BRDF Importance Sampling for Polygonal Lights
2021–07 in ACM Transactions on Graphics (Proc. SIGGRAPH) 40, 4.
With the advent of real-time ray tracing, there is an increasing interest in GPU-friendly importance sampling techniques. We present such methods to sample convex polygonal lights approximately proportional to diffuse and specular BRDFs times the cosine term. For diffuse surfaces, we sample the polygons proportional to projected solid angle. Our algorithm partitions the polygon suitably and employs inverse function sampling for each part. Inversion of the distribution function is challenging. Using algebraic geometry, we develop a special iterative procedure and an initialization scheme. Together, they achieve high accuracy in all possible situations with only two iterations. Our implementation is numerically stable and fast. For specular BRDFs, this method enables us to sample the polygon proportional to a linearly transformed cosine. We combine these diffuse and specular sampling strategies through novel variants of optimal multiple importance sampling. Our techniques render direct lighting from Lambertian polygonal lights with almost no variance outside of penumbrae and support shadows and textured emission. Additionally, we propose an algorithm for solid angle sampling of polygons. It is faster and more stable than existing methods.
Keywords: projected solid angle sampling, solid angle sampling, light sampling, next event estimation, spherical polygons, spherical triangles, polygonal lights, real-time ray tracing, rendering, linearly transformed cosines, LTC, Monte Carlo integration, optimal MIS
This work gets presented at SIGGRAPH 2021 on 12th of August. The author's version has been published on 11th of June 2021.
Downloads and links
- Supplemental document
- Blog post series about the renderer
- Blog post about BRDF importance sampling
- Source code on GitHub
- Code without data and dependencies (0.5 MB)
- Code with data and dependencies (374 MB)
- Additional scenes (Bistro, 724 MB)
- Python code for slides
- Blog post about Matplotlib slides
- Fast forward video (00:30)
- 5-minute presentation video
- 19-minute presentation video