I'm reading this:
It says to pick the normal vector by projecting the light vector into the normal plane. My code for this is:
normalV = normalize(lightVecV - dot(lightVecV, threadDirV)*threadDirV);
However, this seems wrong. Suppose I have a quad of brushed metal in the xy-plane, and +y is up. The threads run in the x-direction (1, 0, 0). Suppose also the light vector is (0,1,0) or close to it.
This would compute the normal as (0,1,0) which just seems wrong.
Also, it seems like if you pick the normal to always be "most aligned" with the light source, your surface will be unnaturally bright.
I feel like something is missing. Is the anisotropic lighting supposed to be weighted against the usual lambertian diffuse term (using the true geometric normal)?