Caustics Triangles on the GPU Umenhoffer Tamás Gustavo Patow Szirmay-Kalos László
CGI Caustics – Causticus – Kaustikos
CGI Generation of caustic paths specular gathering specular shooting
CGI Caustic generation on the GPU Multipass synthesis (Arvo, Jensen, Shirley) Photon tracing from the light sources: Photon map Final gathering for the camera Ray tracing on the GPU: How? Ray tracing of the original geometry: Ray engine(Carr02), Regular grid (Purcell02), octree (Meseth05), kd-tree (Foley05, Popov07, Zhou08), BVH (Carr06), ray-hierarchy (Szécsi06,Roger07). Ray tracing of the sampled geometry: Shadow map (Shah06,Wyman06), Height map (Oliveira04), Distance map, Layered Depth Image (Krüger06) or layered cube maps (Umenhoffer07)
CGI distance Ray tracing on distance maps
CGI Linear search (marching) R d x r = x + Rd undershoot: |r|<|r’|=distMap(r) overshoot: |r|>|r’|=distMap(r) r r’
CGI Linear search (marching) d = |x||R||x||R| t 1-t R x
CGI Secant search
CGI Photon power distribution Where to store photons? – neighborhood! Object space (Purcell03), texture space(Szirmay05), ray space (Krüger06), shadow map space (Shah06), This paper: cube map space How to filter? Nearest neighbor search (Jensen95, Purcell03, Zhou08), splatting (all others), This paper: caustic triangles. rightsmalllarge
CGI Photon tracing Hit location power Triangle area
CGI Filtering Photon hits Vertex shader Pixel shader Triangles with dummy vertices Vertices on the cube map face Additive blending
CGI Final gathering
CGI Results 60 FPS (NV6800)
CGI Conclusions Caustic generation algorithm Stores and filters photon hits in the space of the cube map used to trace rays Good neighborhood: during filtering visibility from the caustic generator is also taken into account Renders caustic triangles instead of splatting No overblurring Continuous signal automatically caustic triangle = adaptive filter