线性各向异性
主要思路:根据贴图的凹凸部分叠加原有的高光部分,将边缘进行锐利的衰减操作。主要代码都来自课本内代码,有小部分更改。
编(抄)写过程中,一直不太明白 atten(衰减因子)表示什么。输出后发现得到下图:
发现 atten 是对影子的描绘;atten为1的时候(无衰减)和关闭阴影得到的结果是一样的。
表面着色器部分编写如常;光照部分代码:
half4 LightingAnisotropic(SurfaceAnisoOutput s, float3 lightDir, float3 viewDir, fixed atten)
{
//形容该点光照强度
float NdotL = max(0.01, dot(s.Normal, lightDir));
//通过Blinn半角公式得到高光点
//NdotH描述本身物体光照与半角高光的契合度
fixed3 halfVector = normalize(normalize(lightDir) + normalize(viewDir));
fixed NdotH = dot(normalize(s.Normal + s.AnisoDirection), halfVector);
//2.5描述同一面上出现圈环的层数;4以下较为自然
float aniso = max(0, sin((NdotH + _AnisoOffset) * 2.5));
//对环状高光进行进一步聚拢
float spec = saturate(pow(aniso, s.Gloss * 128) * s.Specular);
//最终颜色 = (本身颜色*light0颜色*漫反射 + 光色*高光强度)* 衰减因子
fixed4 c;
c.rgb = ((s.Albedo * _LightColor0.rgb * NdotL) +
(_LightColor0.rgb * spec)) * (atten);
c.a = 1.0;
return c;
}
径向各向异性
换了一张贴图,代码与线性各向异性相同。
导入过程中发现径向这张图的 Texture Type 调成 Cursor 后抗锯齿效果会好一些;而线性各向异性的贴图保持 Default 才能有拉丝效果。