Adventures in Deferred Rendering: Volumetric Lighting

Volumetric lighting is typically driven by a single-phase function that determines how much of the total scattered light is scattered toward the camera. The angle between the incoming light direction and the vector from our camera to the world space position of a given fragment is what primarily drives the Mie-scattering phase function. Implementing a … Continue reading Adventures in Deferred Rendering: Volumetric Lighting

Skin Rendering with Texture-Space Diffusion for Subsurface Scattering

The basis for the specular reflectance of these "skin materials" is a precomputed texture that allows us to calculate in real-time the Kelemen/Szirmay-Kalos specular BRDF and subsequent reflectance value. There's an additional texture that feeds into the specular calculation that simultaneously acts as a roughness parameter (m) that we use to query into the Beckmann … Continue reading Skin Rendering with Texture-Space Diffusion for Subsurface Scattering

Hair Rendering

There are always twists to the typical BRDF models, and Scheuermann's bidirectional scattering distribution function model (BSDF, or BRDF with light integrated over a sphere that aggregates all the light interactions within hair fibers) is a great piece to discuss because we can focus our attention on a simple pixel shader. Some materials lend themselves … Continue reading Hair Rendering

Reflective Shadow Maps

There is a nice extension to shadow mapping that allows for the rendering of plausible indirect illumination. It's not quite as performant as voxel cone tracing, but it introduces some ideas on how we can model the behavior of light. Every pixel in the shadow map is considered as an indirect light source and we … Continue reading Reflective Shadow Maps

Spherical Harmonics

The rendering equation consists of two major components—the diffuse and specular lighting integrals—that can each be approximated in a number of ways. At the end of the day, physically based rendering is all about representing the precise interactions of light in the most accurate manner possible with the goal of presenting scenes in a way … Continue reading Spherical Harmonics

Adventures in Deferred Rendering: Tiled Deferred Shading and Compute Shaders

In basic deferred shading, we evaluate each light separately and add the results to the output buffer, and then use that as the starting point from which we begin the post-processing. Shading a single quad is oftentimes much more scalable than iterating through each geometry to apply lighting information. However, there is one bottleneck that … Continue reading Adventures in Deferred Rendering: Tiled Deferred Shading and Compute Shaders

Percentage-Closer Soft Shadows

I've implemented a few shadow mappers, and so far, percentage-closer soft shadows (PCSS) was my favorite one to get up and running. It is a great illustration of Poisson disk sampling, and the contact hardening that is characteristic of the technique makes for compelling spatial relationship information. For comparison's sake, here's what I did for … Continue reading Percentage-Closer Soft Shadows

Adventures in Deferred Rendering: Screen Space Reflections

I intend for this post to be the first in a series of blog posts on techniques that are greatly facilitated by the concept of deferred rendering. The second post in the series will deal with tiled deferred shading, which is one of several possible solutions to the problem of light culling. The third will … Continue reading Adventures in Deferred Rendering: Screen Space Reflections

Global Illumination Using Voxel Cone Tracing

Facilitating a reasonable and accurate physical description of light in the presence of real-time constraints has always been the driver of work in the field of interactive computer graphics. For me, what makes voxel cone tracing so intriguing is the combination of a less canonical data structure (i.e., the voxel representation) as the center point … Continue reading Global Illumination Using Voxel Cone Tracing