http://graphics.cs.williams.edu/papers/PhotonHPG09/
Hardware-Accelerated Global Illumination
by Image Space Photon Mapping
Abstract
We describe an extension to photon mapping that recasts the mostexpensive steps of the algorithm -- the initial and final photon bounces -- asimage-space operations amenable to GPU acceleration. This enables global illumination for real-time applications as well as accelerating itfor offline rendering.
Image Space Photon Mapping (ISPM) rasterizes a light-space bounce map of emitted photons surviving initial-bounce Russianroulette sampling on a GPU. It then traces photons conventionally on the CPU. Traditional photon mapping estimates final radiance bygathering photons from a k-d tree. ISPM instead scatters indirect illumination by rasterizing an array of photon volumes.Each volume bounds a filter kernel based onthe a priori probability density of each photon path. These two steps exploit the factthat initial path segments from point lights and final ones into a pinhole cameraeach have a common center of projection. Anoptional step uses joint bilateral upsampling of irradiance to reduce the fill requirements of rasterizing photon volumes. ISPM preserves the accurateand physically-based nature of photon mapping, supports arbitrary BSDFs, and capturesboth high- and low-frequency illumination effects such as caustics and diffuse color interreflection.
An implementation on a consumer GPU and 8-core CPU renders high-quality global illumination at up to 26 Hz at HD (1920x1080) resolution, for complex scenes containing moving objectsand lights.
Acknowledgments
We thank the anonymous reviewers and Evan Hart (NVIDIA) for substantial suggestions, Unknown Worlds Entertainment for the the pre-release Onos model from Natural Selection 2, Dan Fast (Williams) for 3D modeling, andQi Mo (UNC), Kefei Lei (Williams), and Eric Enderton (NVIDIA) for proofreading.
Data
Models:
Additional Results All illumination in these images is dynamic and global. There is no ambient or lightmap term.
![]() ![]() ![]() ![]()
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
Additional, unpublished performance results from our experiments.
An early screen capture of our SIGGRAPHexhibition game demo is available. This uses an aggressively optimizedimplementation and mixes local and global illumination models.
Implementation Guide
The files below are modified up versions of the key pieces of sourcecode used in our experimental setup. These are intended to assistothers in implementing or experimenting with our algorithm. They havebeen heavily commented in support of that goal. This code won'tcompile as is because it is missing the surrounding game engineinfrastructure, which we are not releasing.
Please keep in mind that this is research code released to furtherscientific and progress.We do not provide technical support for this code and it is not aproduct. We have not produced a standalone binary or plug-in fordistribution. There is no warranty on the code, so use it at your ownrisk. Although the algorithms and data sources are fully described inthe paper, we cannot release the full project or data files directlyfor intellectual property reasons. All code is copyright 2009 MorganMcGuire, all rights reserved.
The files provided in ispm.zip are:- ISPM - complete implementation of the rendering algorithm
- Photon - statistical photon representation
- PhotonVolume - repacking of Photon for radiance estimate on the GPU
- GBuffers - shader for producing deferred-shading geometry buffers
- GFXPhotonVolumeArray - helper for transferring PhotonVolumes to the GPU
- BounceMap - sample bounce map shader
- PhotonVolume - shader for generating photon volumes from the data in GFXPhotonVolumeArray and performing the actual radiance estimate
- Upsample - joint bilateral upsampling filter (bilinear kernel)
In addition, the major support classes have been released in the G3D Innovation Engine version 8.0beta 1. These include SuperBSDF, SuperShader, Material,ArticulatedModel, GBuffers, TriTree, and Tri classes. The version ofTriTree in G3D is a bounding interval hierarchy that is about 2xfaster than the kd-tree used in our experiments. |