270 likes | 553 Views
Incremental Instant Radiosity for Real-Time Indirect Illumination. Samuli Laine 1,3 Hannu Saransaari 3 Janne Kontkanen 2,3 Jaakko Lehtinen 3,4 Timo Aila 1,3 1 NVIDIA Research 2 PDI/DreamWorks 3 Helsinki University of Technology 4 Remedy Entertainment. Motivation.
E N D
Incremental Instant Radiosity forReal-Time Indirect Illumination Samuli Laine1,3 Hannu Saransaari3Janne Kontkanen2,3 Jaakko Lehtinen3,4Timo Aila1,3 1NVIDIA Research 2PDI/DreamWorks 3Helsinki University of Technology 4Remedy Entertainment
Motivation • Indirect illumination looks good Direct + constant ambient Direct + 1 bounce indirect
Previous Work • Instant radiosity [Keller 97] • Interleaved sampling [Keller & Heidrich 01] • Hardware implementation [Segovia et al. 06] • Large-scale interactive indirect illumination • Ingo Wald’s PhD thesis [Wald04] • Precomputed transport [Kristensen et al. 05] • Reflective shadow maps, Splatting indirect illumination [Dachsbacher&Stamminger 05] x 2
Instant Radiosity Howto • Trace light paths from light source • Place virtual point lights (VPLs) at intersections • Render scene, use VPLs as 180o spots • Global illumination ensues
One-Bounce Indirect Illumination • Officially close enough to full GI solution • Terminate light paths at first intersection Tabellion and Lamorlette, SIGGRAPH 2004
Baseline 1-Bounce Instant Radiosity • Cast a bunch of rays from the light source • Rays must be distributed according to the emission function • At each hit point, construct a VPL • Render shadow map (paraboloid) • Yes, that’s a lot of shadow maps to render per frame • Gather illumination from all VPLs • Yes, that’s a lot of shadow map lookups per pixel
The Recipe for Success Old ingredients • Instant radiosity with single bounce • Interleaved sampling • Paraboloid shadow mapping New ingredients • Reuse of VPLs • ... and that’s about it
VPL Reuse • Reuse VPLs from previous frame • Generate as few new VPLs as possible • Stay within budget, e.g. 4-8 new VPLs/frame + Benefit: Can reuse shadow maps! ! Disclaimer: Scene needs to be static § Note: Illumination does not lag behind
How To Reuse VPLs • Every frame, do the following: • Delete invalid VPLs • Reproject existing VPLs to a 2D domain according to the new light source position • Delete more VPLs if the budget says so • Create new VPLs • Compute VPL intensities
2D Domain for VPLs • Let’s concentrate on 180o cosine-falloff spot lights for now • Nusselt analog Uniform distribution in unit disc = Cosine-weighted directional distribution
Reprojecting VPLs • So we have VPLs from previous frame • Discard ones behind the spot light • Discard ones behind obstacles • Reproject the rest
Spatial Data Structures • Compute Voronoi diagram and Delaunay triangulation for the VPL point set
Deleting VPLs • Greedily choose the ”worst” VPL = The one with shortest Delaunay edges
Generating New VPLs • Greedily choose the ”best” spot = The one with longest distance to existing VPLs
Computing VPL Intensities • Since our distribution may be nonuniform, weight each VPL according to Voronoi area
Omni Lights?! • Perform all 2D domain actions on the surface of unit sphere • Blunder in the paper • Surface of 3D tetrahedralization = convex hull • Would’ve been a lot simpler and faster
Interleaved Sampling • Reduces the number of shadow map lookups per pixel • For each pixel, use a subset of all VPLs • Apply geometry-aware filtering
Results • 256 VPLs in all scenes • Budget: 4-8 new VPLs per frame • GeForce 8800 GTX
Cornell Triangles: original 32tessellated 4.4k
Maze Triangles: original 55ktessellated 63k
Sibenik Triangles: original 80ktessellated 109k
Limitations / Future Work • Not full GI • Well, we could use entire light paths, but that would lead to many faint VPLs • Feasible at some point in future • Diffuse surfaces only • Slightly glossy should work OK • Truly glossy won’t work
More Limitations / Future Work • Not view-dependent • Distributing VPLs should be based on visual importance • Insert heuristics here • Dynamic scenes non-trivial • The shadows are wrong for less than a second when the scene changes, but still... • Predictive VPL generation could help
Strengths • No precomputation • Dynamic objects can receive indirect light • Real-time performance • Simplicity
Thank You • Questions