Playing with BRDFs

This is a status update. Been messing around with non-analytical BRDFs for the last few days.

Thanks to Pab Ltd for the data.

A Bi-Directional Reflectance Distribution Function is a 4D function that defines surface reflection. To avoid the 4-th dimension I generated 3D isotropic approximation from Pab’s data. Unlike anisotropic surfaces (e.g. brush metal), isotropic surfaces reflection is invariant of the tangental direction, therefore the two ϕ angles of the incident and exitant vectors in spherical coordinates can be merged. This results in a 3D function which can be easily encoded as a 3D texture.

Analytical models, like Phong or more sophisticated Torrance-Sparrow (microfacets), Oren-Nayar, etc., that approximate surface reflectance analytically with a few configurable parameters, are easy to work with and provide decent results. However measurements of real surfaces are indispensable.

Rendering at about 150 frames per second, histogram-tonemapped HDR rendering and lens blur. BRDF lookup done in a deferred pass with material information loaded as a buffer object. A white light source dropped somewhere above the vase.

No shadowing or global illumination here. Random materials applied to each object.

What’s next
Anisotropic materials and integration of a more sophisticated lighting system.