Wednesday, April 18, 2012

Subsurface Scattering

Subsurface scattering is a key component to the appearance of many materials. Subsurface scattering happens when light enters a material at one point, scatters around while potentially being absorbed along the way, then exits the material at a different point. All dielectrics exhibit subsurface scattering to some extent; in fact, subsurface scattering is the main mechanism behind diffuse reflection. For highly opaque materials, or when the object is viewed from a substantial distance, a BRDF can be used to approximate this subsurface scattering. The problem is that BRDF models assume that light enters and exits at the same point on the surface of an object, which results in a hard and opaque appearance. Thus many soft, organic, translucent materials—for which light scatters a lot and travels a significant distance beneath the surface—simply cannot be rendered realistically using a BRDF.

I've been very interested in implementing subsurface scattering in my path tracer for quite some time. The main challenge with simulating subsurface scattering is doing so in a reasonable amount of time. Monte Carlo path tracing of opaque surfaces is slow enough already. With translucent materials, light can scatter hundreds or thousands of times beneath the surface before coming out again, and in some cases (e.g., milk) it's hardly absorbed at all along the way. Luckily you can get good results using approximations (transport theory is itself an approximation (of electromagnetic scattering theory), but I'm talking about more significant optimizations).

For the past few months, on and off, I've been thinking about and working toward subsurface scattering. In particular so far I've been working on a point-based, hierarchical, dipole diffusion approximation approach to multiple scattering (i.e., light that has scattered multiple times beneath the surface, as opposed to a single time). My implementation is mainly based on the paper A Rapid Hierarchical Technique for Translucent Materials. I'll post more about my progress soon.

Below are some of the resources I've been using to understand and implement subsurface scattering. I've edited this post to add resources that I hadn't yet used at the time of initial writing:

No comments:

Post a Comment