Physically-based BRDF

From KlayGE
Revision as of 09:57, 30 December 2010 by Gongminmin (Talk | contribs)

Jump to: navigation, search

Introduction

Physically based rendering have been known for many years, but the "ad-hoc" rendering models (such as Phong) are still widely used in game. These "ad-hoc" models require laborious tweaking to produce high-quality images. However, physically based, energy-conserving rendering models easily create materials that hold up under a variety of lighting environments.

Surprisingly, physically based models are not more difficult to implement or evaluate than the traditional "ad-hoc" ones.

Reflectance equation

The most common used rendering model in game describes only reflectance, not including terms such as SSS. The reflectance equation is:

LaTeX: L_0(\mathbf{v})=\int_{\Omega} \rho(\mathbf{l},\mathbf{v}) \otimes L_i(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d\omega_i

Here LaTeX: \rho(\mathbf{l},\mathbf{v}) is BRDF, LaTeX: L_i(\mathbf{l}) is the contribution from light source, LaTeX: (\mathbf{n} \cdot \mathbf{l}) is the angle between light and surface normal. This integration results the sum of all light sources contribute to a surface point.

Diffuse term

The simplest BRDF is the Lambert. The well-known Lambertian BRDF in game is present as LaTeX: (\mathbf{n} \cdot \mathbf{l}). However, it is part of reflectance equation, and lambertian term is actually a constant value:

LaTeX: \rho_{lambert}(\mathbf{l},\mathbf{v})=\frac{\mathbf{c}_{diff}}{\pi}

Punctual Light Sources

These are classic point, directional, and spot lights in compute games. These local light source can be abstracted to a concept named "punctual light sources". They are infinitely small light with centain direction. Since what we want is the lighting reach a surface point, we don't need to consider the attenuation. A punctual light source are parameterized by the light color LaTeX: \mathbf{c}_{light} and the light direction vector LaTeX: \mathbf{l_c}. The light color LaTeX: \mathbf{c}_{light} is specified as the color a white Lambertian surface would have when illuminated by the light from a direction parallel to the surface normal (LaTeX: \mathbf{l_c}=\mathbf{n}).

How to calculate the contribution from this light source to a point? Here we will start by defining a tiny area light source centered on LaTeX: \mathbf{l_c}, with a small angular extent LaTeX: \varepsilon. This tiny area light illuminates a shaded surface point with the incoming radiance function LaTeX: L_{tiny}(\mathbf{l}). The incoming radiance function has the following two properties:

LaTeX: \forall\mathbf{l}|\angle(\mathbf{l}, \mathbf{l_c})>\varepsilon, L_{tiny}(\mathbf{l})=0
LaTeX: if \mathbf{l_c}=\mathbf{n}, \mathbf{c}_{light}=\frac{1}{\pi}\int_{\Omega} L_{tiny}(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d\omega_i

The first property says that no light is incoming for any light directions which form an angle greater than LaTeX: \varepsilon with LaTeX: \mathbf{l_c}. The second property follows from the definition of LaTeX: \mathbf{c}_{light}. Since the surface is white, LaTeX: \mathbf{c}_{diff}=1. Applying reflectance equation and Lambert from last article, there's the second property. Because LaTeX: \mathbf{c}_{light} requires LaTeX: \mathbf{l_c}=\mathbf{n}, it is the limit as LaTeX: \varepsilon goes to 0:

LaTeX: if \mathbf{l_c}=\mathbf{n}, \mathbf{c}_{light}=\lim_{\varepsilon \to 0}(\frac{1}{\pi}\int_{\Omega} L_{tiny}(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d\omega_i)

Since LaTeX: \mathbf{l_c}=\mathbf{n} and LaTeX: \varepsilon \to 0, we can assume LaTeX: \mathbf{n} \cdot \mathbf{l}=1, which gives us:

LaTeX: \mathbf{c}_{light}=\lim_{\varepsilon \to 0}(\frac{1}{\pi}\int_{\Omega} L_{tiny}(\mathbf{l}) d\omega_i)

That is:

LaTeX: \lim_{\varepsilon \to 0}(\int_{\Omega} L_{tiny}(\mathbf{l}) d\omega_i) = \pi \mathbf{c}_{light}

Now we shall apply our tiny area light to a general BRDF, and look at its behavior in the limit as goes to 0:

LaTeX: L_0(\mathbf{v})=\lim_{\varepsilon \to 0}(\int_{\Omega} \rho(\mathbf{l},\mathbf{v}) \otimes L_{tiny}(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d\omega_i)=\rho(\mathbf{l_c}, \mathbf{v}) \otimes \lim_{\varepsilon \to 0}(\int_{\Omega} L_{tiny}(\mathbf{l}) d\omega_i)(\mathbf{n} \cdot \mathbf{l_c})

So

LaTeX: L_0(\mathbf{v})=\pi \rho(\mathbf{l_c}, \mathbf{v}) \otimes \mathbf{c}_{light} (\mathbf{n} \cdot \mathbf{l_c})

As you see, the tiny area light source term disappears. The remaining of our equation is what we familar with.

Microfacet BRDF

The basis for most physically-based specular BRDF terms is microfacet theory. This theory was developed to describe surface reflection from general (non-optically flat) surfaces. The basic assumption underlying microfacet theory is that the surface is composed of many microfacets, too small to be seen individually. Each microfacet is assumed to be optically flat.

Each of these microfacets reflects light from a given incoming direction into a single outgoing direction which depends on the orientation of the microfacet normal m. When evaluating a BRDF term, both the light direction l and the view direction v are specified. This means that of all the millions of microfacets on the surface, only those that happen to be angled just right to reflect l into v have any contribution to the BRDF value. In the figure below, we can see that these active microfacets have their surface normal m oriented exactly halfway between l and v. We will denote it as h.

Not all microfacets for which m = h will contribute to the reflection; some are blocked by other microfacets from the direction of l (shadowing), from the direction of v (masking), or from both. Microfacet theory assumes that all shadowed light is lost from the specular term. The microfacet specular BRDF term has the following form:

LaTeX: \rho(\mathbf{l}, \mathbf{v})=\frac{F(\mathbf{l},\mathbf{h})G(\mathbf{l},\mathbf{v},\mathbf{h})D(\mathbf{h})}{4(\mathbf{n} \cdot \mathbf{l})(\mathbf{n} \cdot \mathbf{v})}

LaTeX: F(\mathbf{l}, \mathbf{h}) is the Fresnel reflectance of the active microfacets (m = h). LaTeX: G(\mathbf{l}, \mathbf{v}, \mathbf{h}) is the proportion of active microfacets which are not shadowed or masked. LaTeX: D(\mathbf{h}) is the microfacet normal distribution function evaluated at the active microfacet normal m = h; in other words, the concentration of microfacets with normals equal to h. Finally, the denominator LaTeX: 4(\mathbf{n} \cdot \mathbf{l})(\mathbf{n} \cdot \mathbf{v}) is a correction factor which accounts for quantities being transformed between the local space of the microfacets and that of the overall macrosurface.

Fresnel Term

The Fresnel reflectance term computes the fraction of light reflected from an optically flat surface. Its value depends on two things: the incoming angle (angle between light vector and surface normal) and the refractive index of the material. The Schlick approximation of Fresnel term is:

LaTeX: F_{Schlick}(\mathbf{c}_{spec}, \mathbf{l}, \mathbf{h})=\mathbf{c}_{spec}+(1-\mathbf{c}_{spec})(1-(\mathbf{l} \cdot \mathbf{h})^5)

which LaTeX: \mathbf{c}_{spec} is the specular color.

Normal Distribution Term

In most surfaces, the microfacet's orientations are not uniformly distributed. Microfacet normals closer to the macroscopic surface normal tend to appear with smoother. The exact distribution is defined via the microfacet normal distribution function D(m). The function D() determines the size, brightness, and shape of the specular highlight. Normal distribution functions have some kind of "roughness" or variance parameter (anisotropic functions typically have two variance parameters).

Shadowing-Masking Term

The shadowing and masking term G(l, v, h) is also often called the geometry term. In many cases, the shadowing-masking term partially cancels out the LaTeX: (\mathbf{n} \cdot \mathbf{l})(\mathbf{n} \cdot \mathbf{v}) denominator in microfacet BRDF equation, replacing it with some other expression such as LaTeX: max(\mathbf{n} \cdot \mathbf{l}, \mathbf{n} \cdot \mathbf{v}). The shadowing-masking term is essential for BRDF energy conservation--without such a term the BRDF can reflect arbitrarily more light energy than it receives. A key part of the microfacet BRDF is the ratio between the active area (combined area of the microfacets which reflect light energy from l to v) and the total area (of the macroscopic surface). If shadowing and masking are not accounted for, then the active area may exceed the total area, an obvious impossibility which can lead to the BRDF not conserving energy, in some cases by a huge amount, as you see below:

Shadowing and masking

On the top the flat macroscopic surface is shown in green, and the rugged microscopic surface is shown in blue. The facets for which m = h are marked in red. The projection of the macroscopic surface area onto the view direction is shown as a green line on the upper left. The projected areas of the individual red microfacets are shown as separate red lines. On the bottom left the areas of the red microfacets are added up without accounting for masking, resulting in an active area greater than the total area. So the BRDF illogically reflects more energy than it receives. On the right we see that the red areas are combined in a way that accounts for masking. The overlapping areas are no longer counted multiple times, and we see that the correct active area is smaller than the total area.