Adventures in Deferred Rendering: Volumetric Lighting

I like god rays. They're easy to implement and yet they add so much detail to a scene. 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 … Continue reading Adventures in Deferred Rendering: Volumetric Lighting

Skin Rendering with Texture-Space Diffusion for Subsurface Scattering

I was reading about pre-integrated skin shading and screen-space subsurface scattering in the associated GPU Pro 360 books, which got me really interested in learning about ways to represent subsurface scattering—a type of diffuse lighting—in a rendering pipeline. I came across another article on realistic real-time skin rendering on mobile, and it occurred to me … Continue reading Skin Rendering with Texture-Space Diffusion for Subsurface Scattering

Hair Rendering Part 1: The Shading Model

Given my proclivity to pore over material from recent GDCs and GPU Pro articles, I've been meaning to write up a more accessible concept as a way to segue from the early to mid 2000s techniques to the state-of-the-art ideas that find their way into modern AAA titles. I think it's also important to demonstrate … Continue reading Hair Rendering Part 1: The Shading Model

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