The BRDF
Definition
We already talked about rendering and its two steps: visible surface determination and lighting. When calculating the lighting of an object in a scene we can find two types of surfaces:
- Emmisive. Objects or surfaces that create light (light bulbs, the sun…).
- Non-emmisive. Surfaces that don’t actually create light but they absorb and/or reflect it.
Because most objects in a scene are non-emmisive we need a way that describes the light behavior when it hits the object surface. This is exactly what the bidirectional reflectance distribution function (or simply BRFD) does. The BRDB returns a scalar that is the amount of light that is reflected in a specific direction Wout given an incident point X and an incident direction Win: BRDF(X, Win, Wout)
In fact, the BRDF has a four parameter λ that specifies the wavelength (color) of the light. This is because light may behave differently depending on the color. Because how our eyes (and computers) work, the BRDF is usually defined for three wavelengths corresponding to Red, Green and Blue (this may sound familiar):
BRDF(X, Win, Wout, λ = Red)
BRDF(X, Win, Wout, λ = Green)
BRDF(X, Win, Wout, λ = Blue)
Use case
With this function we can properly (physically-realistic) describe most of the properties of a surface material:
- Color. What we perceive as a color of an object is the combination of wavelengths that get reflected by the surface.
- Shininess. The dependence between Win and Wout defines how shiny or diffuse is a material. If the Win spreads in multiple very different directions Wout the material describes a diffuse distribution. Otherwise, if the Win spreads in a low number of Wout directions that are very similar, the object is shiny.
But, what happens with other properties like refractions or translucency? There are some generalizations of the BRDF that takes this (and more properties) into account, like the bidirectional surface scattering distribution function (BSSDF) that allows incident light directions to point back into the surface to simulate light bounces or scattering (this is how our skin behaves). All this different reflectance distribution functions must satisfy some properties to be physically-plausible:
- It doesn’t make sense to reflect any amount of negative light.
- The amount of reflected light can’t be greater than the incident. In fact, most of the times, some portion of the light will be absorbed, so the reflected light it’s probably going to be smaller (this constraint is called normalization constraint).
- The function must be symmetric regarding Win and Wout (See Helmholtz reciprocity):