簡單邊緣泛光處理

2021-09-13 21:05:52 字數 1257 閱讀 4450

前言:本篇部落格只是乙個簡單的實現邊緣泛光功能的例子,主要是當做筆記使用。

核心要點

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個輸出 沿著法線發現 放大的模型,再統一著色,這個顏色就是描邊的顏色。另乙個則直接輸出。由於第乙個沿著法線有做放大,所以就能實現描邊...