Presentation on theme: "Photon Mapping. How did I use it 10 years ago? Why might you want to use it tomorrow?"— Presentation transcript:
How did I use it 10 years ago? Why might you want to use it tomorrow?
Ever increasing complexity (For an approximation!)
Photon map creation Emit photon from light sources in turn based on relative energy output, until ‘n’ emitted. Photons all emit at same power but power and color may vary after reflectance. Stored AND / OR reflected at each hit surface. Adjust photon energy based on number of actual emitted photons. Heavy use of random probability based on surface material (drand48)
Photon Map – Raw samples
Sampling photons Incorrect density estimates = dark corners & edges Problem: Photon map does not store geometry Impractical… for direct visualization
Kd-tree From efficient storage to critical tool. Can be dynamized for generic use
Why do indirect lights work? Photon Map stores energy to emit ‘The Final Bounce’ Ray tracers use photon map to accelerate ‘Final Gathering’ Light Energy is conserved
Indirect Lights Sampled from top levels of kd-tree
Direct lights close to surfaces
Spatial structures for visibility testing Hybrid BSP Top levels are octree Lower levels arbitrary planes Stored as binary tree Not balanced Polys in leaves as edges
Packing textures Good enough Many ways to generate texture atlas Can be part of seam reduction I used simple, largest first box packing with empty space reclamation
There seems to be a problem The map makers problem… how to map a round surface to a flat plane, and hide the evidence. Biliner filtering works against you. There is no perfect solution.
(Feature) Size Matters Texel size vs Geometry wall thickness means choosing sample points wisely. Shift sample points within texel. Use multiple sample point locations.
Direct Lights can look coarse Not enough of them to look like indirect light
Direct lights can look soft When considered a surface instead of a point.
Why can’t I see the stars during the day time? Exposure control to the rescue… map infinite floating point light range to 8 bits. Pics show 0.5, 1.0, 2.0 K values for equation
Area lights Pretend it’s Radiosity Light polys sampled as jittered grid, texel receivers How much energy from one area to another
Final Results (1 of 3)
Final Results (2 of 3)
Final Results (3 of 3)
How fast is it?
Real-time? Deferred lighting / shading for many direct light sources. May not need shadows / occlusion per light. Photon map creation (sample scene energy) and prepare virtual lights takes ‘seconds’. As background process, get results with latency. Energy changes when lights OR geometry move. Represent geometry with LOD mesh or voxels.
Screens from My Virtual Home (1 of 3)
What if we changed the kitchen? (2 of 3)
MVH Looking good (3 of 3)
Questions? From self published paper: Diffuse Global Illumination via Direct and Virtual Indirect Light Sources (2003) Download from citeseer or gmscript.com Some images used without permission… Thanks Google. Thank you for staying awake and not texting.