前言:本篇部落格只是乙個簡單的實現邊緣泛光功能的例子,主要是當做筆記使用。
核心要點:
1.使用法向量和視角向量的點積值來獲取明亮度,從模型邊緣到模型中心點積值從0~1變化。點積值為負數說明當前頂點在平面背面,攝像機視角看不到,可以不做明亮度處理。點積值為正值時,說明當前頂點在平面正面,可以結合衰減係數呼叫pow介面來獲取衰減後的明亮值。
2.第乙個pass主要是沿著法向量方向縮放模型,並從模型中心點往模型邊緣處明亮度從1->0的變化,然後和顏色緩衝區中的顏色進行透明度混合處理。效果如圖所示:
3.第二個pass主要是在源模型大小進行原色輸出,然後用第乙個pass中的顏色減去當前pass中的顏色和第乙個pass中顏色的透明度值,從而來實現源模型處鏤空的效果。效果如圖所示:
4.使用第三個pass從模型中心點往模型邊緣處明亮度從0->1的變化,然後和上面pass中的顏色進行透明度混合處理。效果圖如下所示:
5.由於使用了多個pass,且每個pass都對模型做了處理。為了得到正確的層級效果,需要關閉深度寫入。
核心**:如下所示:
shader "custom/rim"
subshader
pass ;
fixed4 _maincolor;
float _scale;
float _outer;
fixed4 frag(v2f v):color0
endcg
} pass ;
fixed4 frag(v2f v):color0
endcg
} pass ;
float _scale;
fixed4 frag(v2f v):color0
endcg
} }}
執行效果:如下圖所示:
untiy 利用法線做高效3D模型 邊緣泛光
在unity3d專案中,當選中乙個3d模型,需要對其做乙個外觀的變化,來表現乙個互動。經常是以描邊或邊緣泛光的形式來處理。描邊的效果經常都是通過兩個pass來實現的,1個輸出 沿著法線發現 放大的模型,再統一著色,這個顏色就是描邊的顏色。另乙個則直接輸出。由於第乙個沿著法線有做放大,所以就能實現描邊...