Anisotropic Effect 各向异性效果
Different from normal speculars, the anisotropic specular has a symmetrical look. According to the Heidrich–Seidel Anisotropic Distribution (see details in Wikipedia), the specular part of an Anisotropic object can be write in:
where T is Tangent Space in world, L is mainlight direction, N is worldnormal and V is view position. In my own shader, I modiffied the equation and change the minus to add.
float3 L = normalize(light.direction);
float3 N = normalize(i.worldNormal);
float3 T = normalize(i.worldTangent);
float3 V = normalize(_WorldSpaceCameraPos - i.worldPos);
float3 H = normalize(_MainLightPosition.xyz + V);
float TdotL = dot(T,L);
float TdotV = dot(T,V);
float3 NdotL = dot(N,L);
float3 NdotH = dot(N,H);
float3 diffuse = _lightColor.rgb * saturate (0.5 * NdotL + 0.5); // using Half Lambert for a softer look
float3 specular = _lightColor.rgb * saturate(pow(TdotL * TdotV + sqrt(1 - TdotL * TdotL)
* sqrt(1 - TdotV * TdotV), _Glossiness));
The final look of the effect looks like this.