這個材質的思路實現在於畫兩個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 第二遍普通渲染模型...