模型描邊shader

2021-09-27 03:24:23 字數 1278 閱讀 3255

這個材質的思路實現在於畫兩個pass ,在第1 個pass剔除物體的背面,而在第2 個pass在vertex shader 中把頂點在投影空間利用法線沿著邊緣的方向微微擴張,然後再次剔除物體正面,這樣就留下物體描邊。

shader "unlit/outline"

_outline ("outlinewidth", float) = 0.2

_outlinecolor ("outlinecolor", color) = (1,1,0,1)

}subshader

lod 100

//剔除物體背面,走預設的渲染管線

pass

;struct v2f

;sampler2d _maintex;

float4 _maintex_st;

fixed4 frag (v2f i) : sv_target

endcg

}//在vs中把頂點在投影空間沿著邊緣的方向微微擴張,然後再次剔除物體正面

pass

cull front//使用cull front把外表面裁掉

blend one zero

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

float4 vertex : position;

float3 normal : normal;

};struct v2f;

float _outline;

float4 _outlinecolor;

v2f o;

o.pos = unityobjecttoclippos(v.vertex);

//float3 norm = mul((float3x3)unity_matrix_mv, v.normal);

float3 norm = unityobjecttoviewpos(v.normal);

//得到投影空間所需擴張的方向

float2 offset = transformviewtoprojection(norm.xy);

o.pos.xy += offset * _outline;

return o;

}fixed4 frag(v2f i) : sv_target

endcg}}

}

shader例項 物體描邊自發光

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

Shader例項 邊緣發光和描邊

效果圖 1.邊緣發光 思路 用視方向和法線方向點乘,模型越邊緣的地方,它的法線和視方向越接近90度。點乘越接近0 那麼用 1 減去上面點乘的結果,來作為顏色分量,來反映邊緣顏色強弱。shader custom outline1 rimcolor rim color color 1,1,1,1 邊緣顏...

描邊 深度 Outline描邊

描邊 使用兩個pass繪製兩遍模型,第一遍需要讓模型的每個頂點朝著法線方向外擴,然後使用cull front指令,剔除正面,只渲染背面。第二遍再做一遍普通的渲染,使之蓋住第一遍渲染的影象,就會產生描邊效果。材質面板 color 第二遍普通渲染模型混合顏色。main texture 第二遍普通渲染模型...