Shader例項 邊緣發光和描邊

2021-08-04 20:36:22 字數 1999 閱讀 4693

效果圖:

1.邊緣發光

思路:用視方向和法線方向點乘,模型越邊緣的地方,它的法線和視方向越接近90度。點乘越接近0

那麼用 1-減去上面點乘的結果,來作為顏色分量,來反映邊緣顏色強弱。

shader "

custom/outline1

" _rimcolor(

"rim color

",color) = (1,1,1,1)//

邊緣顏色

_rimpower ("

rim power

",range(1,10)) = 2

//邊緣強度}

subshader

;sampler2d _maintex;

float4 _rimcolor;

float

_rimpower;

half4 frag(v2f in):color

endcg}}

fallback

"diffuse

"}

2.描邊(一)

思路:兩次渲染,第一次渲染背面,剔除正面,把模型頂點沿法線方向擴伸一定距離(用來表現描邊的粗細)

第二次渲染,渲染正面,剔除背面

shader "

custom/outline2

" _factor(

"factor

",range(0,0.1)) = 0.01

//描邊粗細因子

_outlinecolor("

outline color

",color) = (0,0,0,1)//

描邊顏色}

subshader

;float

_factor;

half4 _outlinecolor;

half4 frag(v2f in):color

endcg

}pass

;sampler2d _maintex;

half4 frag(v2f in) :color

endcg}}

fallback

"diffuse

"}

3.描邊(二)

思路:兩次渲染。第一次渲染背面,剔除正面。利用offset指令,向離攝像機更近的方式偏移

第二次正常渲染物體(不剔除),(或者可以渲染正面,剔除背面)。

offset:深度偏移

offset factor,units

factor引數表示 z縮放的最大斜率的值。

units引數表示可分辨的最小深度緩衝區的值。

我的理解:深度偏移,unity是左手座標系,z的正方向是朝螢幕裡面。

沿z的負方向偏移就是離攝像機更近,

沿z的正方向偏移就是離攝像機更遠。

作用:可以強制使位於同一位置上的兩個幾合體中的乙個幾何體繪製在另乙個的上層

比如:幾何體a的z值比幾何體b更遠,此時b是在a的上層。

但是,給a設定了offset 往z的負方向偏移,此時a比b更近了,a就在b上層了。

在深度測試(z test)的時候,會去比較z值,近的會繪製在遠的上面。

所以上面的思路,要麼第一次渲染背面,往z的負方向偏移

要麼第二次渲染的,往z的正方向偏移,都是可以的。

shader "

custom/outline3

" _outlinecolor(

"outline color

",color) = (0,0,0,1)//

描邊顏色}

subshader

;float4 frag(v2f i) : color

endcg

}//正常渲染物體

pass

;float4 frag(v2f i) : color

endcg}}

}

shader例項 物體描邊自發光

1。思路 面向攝像機的物體,它的表面法線 normal 和視角向量 viewdir 的 夾角 越靠近邊緣就越大。那麼就可以根據這個夾角進行處理,夾角越大,那麼發射光越強,就可以實現我們想要的效果。2。選擇shader 在這裡因為是處理表面的各個點,所以使用su ce shader比較方便。3。要使用...

shader例項(四)物體描邊 自發光

經過一段時間的慢慢學習,感覺著色器真的非常神奇。下面是通過模型的自發光再根據初中的數學知識實現我們想要的描邊效果。首先看示意圖 1。思路 面向攝像機的物體,它的表面法線 normal 和視角向量 viewdir 的 夾角 越靠近邊緣就越大。那麼就可以根據這個夾角進行處理,夾角越大,那麼發射光越強,就...

shader 邊緣發光

當視角方向與法線方向垂直時,頂點座標位置即為邊緣位置。在properties中定義以下變數 xraycolor xray color color 1,1,1,1 xraypower xray power range 0.0001,3 0.1 在pass中定義以下變數 float4 rimcolor ...