Caustic simulation that takes in a surface (e.g. water in a pool) and map of incoming light direction. A simulated photon of incoming light is refracted by the surface, changing its direction of travel (represented as a ray). Photons are visualized via instanced point geometry, with the instance position calculated by intersecting the refracted ray with some bounding object (e.g. the bottom of the pool). In this project, the bounding object is either a plane or a hemisphere.

I explain the technical concepts and implemenation in TouchDesigner here, with a more in-depth look at rendering and performance here