How can we computationally account for anisotropic reflections? I suppose this would just mean a BRDF which is not uniform with respect to the surface orientation (in the way that Matt described in class, e.g. rotating the surface around its normal). Does it require any special representation? Is the computational model we use for the "anisotropic-ness" of a doorknob with a rough surface different from the model we might use for the CD in the bottom right?
@Kalecgos Our BRDF can represent both isotropic and anisotropic reflectance.
Suppose we have a BRDF f(\theta_i,\phi_i,\theta_o,\phi_o). A BRDF is isotropic if rotating the object about its normal produces the same reflectance value. The reflectance function for an object rotated by angle x about its normal is given by f(\theta_i,\phi_i+x,\theta_o,\phi_o+x). So if this reflectance function f produces the same value for all x, then we are dealing with an isotropic material. Otherwise, the material is anisotropic and the light reflected by the material depends on its orientation around the normal axis.
The reflectance functions for all the anisotropic materials shown in this slide can be expressed with some BRDF f(\theta_i,\phi_i,\theta_o,\phi_o). However, choosing the right functions f to photorealistically model each of these materials is a bit tough. In practice, there are two typical approaches: for a particular material, (1) choose an analytical model for the BRDF that depends only on a few parameters (e.g., the classic example is the Blinn-Phong model, or the Ashikhmin-Shirley model for anisotropic materials), or (2) use a data-driven approach that interpolates between sampled BRDF values captured from real materials (basically sampling from a 4D texture).
Note that isotropic BRDFs can be defined as a three-dimensional function. This is because f(\theta_i,\phi_i,\theta_o,\phi_o) = f(\theta_i,\phi_i-\phi_o,\theta_o,0). For this reason, it is typically easier to capture and model isotropic BRDFs than it is to model anisotropic BRDFs.
f(\theta_i,\phi_i,\theta_o,\phi_o) = f(\theta_i,\phi_i-\phi_o,\theta_o,0)