![]() |
| Plastic, satin/velvet, polished metal, burnished metal and brushed metal BRDFs with shadowed directional light and 8 point lights |
While we can store a material index in the alpha channel of the albedo buffer to be used later to lookup the appropriate BRDF response instead of storing all lobe parameters, the problem is really trying to store the BRDF response of the original LaFortune lobes into a 2D texture lookup table. Specifically, the issue is that the original LaFortune lobe has 3 inputs, not 2.
ARF uses modified LaFortune lobes to work around this issue. We sacrifice single-direction anisotropic effects to drop the number of inputs to 2, while retaining bi-directional anisotropy (so we can still simulate materials like velvet and brushed metal). By dropping single-direction anisotropy we also do not have to care about generating tangent space axes for normals sampled from the normal buffer when lighting the scene. The BRDF is then evaluated for the range of inputs and stored in a 128x128 1-byte texture.
So not only can you simulate different BRDF effects (including bi-anisotropy, off-specular or back-specular reflections) using 1 or more of these modified LaFortune lobes stored into a texture, but also only 1 texture fetch is required to evaluate a BRDF result. The fetch itself should be quite fast too since the BRDF texture is small-ish and the sampling pattern relatively cache friendly.


No comments:
Post a Comment