unity3d邊緣發光效果

這是本人在學習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); 可以得到漫反射

發佈了39 篇原創文章 · 獲贊 17 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章