Skip to content

CodyJasonBennett/three-rc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

three-rc

An implementation of "Radiance Cascades: A Novel Approach to Calculating Global Illumination"1 in 3D using screen-space probes and a BVH2. This algorithm captures any number of offscreen occluders or emitters and results in noise-free diffuse and specular global illumination without any temporal accumulation. Probe storage is fixed-cost and stored in a screen-sized texture. A novel upscaler by Alexander Sannikov3 is used for depth-aware interpolation, which cannot be licensed. I have omitted a license here for this reason.

Sponza Preview

Tracing can be made fixed-cost or scene-independent with a different tracing function, such as a screen-space raymarcher. Below, it uses the raymarcher from Tiny Glade4 for fast and accurate tracing but no longer models offscreen occluders or emitters. Prefiltering and min/max probes can be added without much performance penalty to stabilize probes during camera motion while under high depth complexity.

ScreenSpace Tracing

Future work would include a more robust BVH and material lookup to scale to more complex scenes (poor Bistro below does not look up emissive triangles in the correct order). I did not want to spend time on a bespoke BVH implementation in WebGL due to its tight performance constraints and cross-platform bugs. Additionally, a short gather pass in screen-space can be performed for pixel-perfect contact effects without much added performance penalty and would allow aggressive upscaling (e.g., 16x) without much quality loss.

Bistro Preview

All rights reserved.

About

Implementation of Radiance Cascades GI in 3D using three.js and three-mesh-bvh.

Topics

Resources

Stars

Watchers

Forks