What BRDFs are good for

Bidirectional reflectance distribution functions describe how a material surface reflects incoming light. For example a mirror surface reflects light perfectly specular, which means that the angle of reflection equals the angle of incidence. In contrast to specular reflection, a material like matt paper reflects incident light equally into all possible directions. This behavior is called diffuse reflection.

In the real world pretty much all materials have reflection behavior somewhere between diffuse and specular. A BRDF can be used to define the exact reflection behavior of just any material.

Measuring light reflection behavior of materials

BRDFs can be defined either by an equation like the Phong reflection model or it can be measured using a real material sample. A device like gonioreflectometer can record how much and in which direction a material sample reflects light for a given direction of incoming light.

Screenshot of BRDF Rendering Demo

Rendering materials

Now comes the cool part: The MERL BRDF Database offers a nice collection of 100 measured BRDFs for anyone’s (academic) use. Thanks to modern graphics hardware it is possible to write a shader that renders 3D models with measured BRDFs. Since this is not that complicated I wrote a small demo using WebGL:

BRDF Rendering demo

The demo offers the 100 materials from the MERL database and also features an exposure slider to control the intensity of the scene lighting. The BRDF reflectance data itself is encoded as PNG for all 100 materials. The alpha channel of the PNGs is used to encode an exponent that scales the RGB values (RGB·2 Exponent). That way the high dynamic range of the reflectance data is preserved. This is called RGBE encoding and was introduced by Greg Ward.