這是本人在學習unity的shader的一些理解,效果圖如下
核心代碼爲
void surf (Input IN, inout SurfaceOutput o) {
fixed4 t = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = t.rgb;
o.Alpha = t.a;
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission= _RimColor.rgb * pow (rim, _RimWidth);
}
我們便來理解一下這些代碼的意思
dot (normalize(IN.viewDir), o.Normal))這是將視口向量與模型的法線做一個點積分,點積的結果是兩個向量夾角的餘弦值,
由上圖,可知道,越是與視口方向偏離角度大的,點積之後結果越小,所以1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));這是一個遞增函數,越往邊緣越大。最後o.Emission= _RimColor.rgb * pow (rim, _RimWidth); 可以得到漫反射