Unity Shader實(shí)現(xiàn)描邊OutLine效果
本文實(shí)例為大家分享了Unity Shader實(shí)現(xiàn)描邊OutLine效果的具體代碼,供大家參考,具體內(nèi)容如下
Shader實(shí)現(xiàn)描邊流程大致為:對模型進(jìn)行2遍(2個(gè)pass)繪制,第一遍(描邊pass)在vertex shader中對模型沿頂點(diǎn)法線方向放大,fragment shader設(shè)置輸出顏色為描邊顏色;第二遍正常繪制模型,除被放大的部分外,其余被覆蓋,這樣就有了描邊的效果。
實(shí)現(xiàn)代碼如下:
Shader "Custom/OutlineShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _OutLineWidth("width", float) = 1.2//定義一個(gè)變量 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float2 uv:TEXCOORD0; }; struct v2f { float2 uv :TEXCOORD0; float4 vertex:SV_POSITION; }; float _OutLineWidth;//設(shè)置變量 v2f vert(appdata v) { v2f o; //設(shè)置一下xy //v.vertex.xy *= 1.1; v.vertex.xy *= _OutLineWidth;//乘上變量 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag(v2f i) :SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //return col; return fixed4(0, 0, 1, 1); } ENDCG } Pass { ZTest Always CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float2 uv:TEXCOORD0; }; struct v2f { float2 uv :TEXCOORD0; float4 vertex:SV_POSITION; }; v2f vert(appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag(v2f i) :SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //return fixed4(0, 0, 1, 1);//返回藍(lán)色,因?yàn)樵俅武秩緯训谝粋€(gè)顏色覆蓋掉 return col; } ENDCG } } FallBack "Diffuse" }
物體被遮擋,仍然需要顯示,需要設(shè)置描邊pass的語句ZTest為Always,深度檢測一直通過,這樣描邊pass的片段不會被深度剔除。
運(yùn)行效果圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity shader實(shí)現(xiàn)消融效果
- Unity shader實(shí)現(xiàn)自由放大縮小效果
- Unity Shader實(shí)現(xiàn)序列幀動(dòng)畫效果
- Unity3D中shader 輪廓描邊效果實(shí)現(xiàn)代碼
- unity shader實(shí)現(xiàn)玻璃折射效果
- Unity Shader實(shí)現(xiàn)玻璃材質(zhì)效果
- Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果
- Unity3D Shader實(shí)現(xiàn)貼圖切換效果
- Unity shader實(shí)現(xiàn)遮罩效果
- 淺談Unity中的Shader
相關(guān)文章
C#中Array與ArrayList用法及轉(zhuǎn)換的方法
C#中Array與ArrayList用法及轉(zhuǎn)換的方法,需要的朋友可以參考一下2013-03-03使用C#實(shí)現(xiàn)讀取PDF中所有文本內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取PDF中所有文本內(nèi)容,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,有需要的小伙伴可以了解下2024-02-02將DLL放入到資源中,運(yùn)行時(shí)自動(dòng)加載的小例子
這篇文章介紹了將DLL放入到資源中,運(yùn)行時(shí)自動(dòng)加載的小例子,有需要的朋友可以參考一下2013-10-10C#基礎(chǔ)教程之類class與結(jié)構(gòu)struct的區(qū)別
struct是值類型,創(chuàng)建一個(gè)struct類型的實(shí)例被分配在棧上,class是引用類型,創(chuàng)建一個(gè)class類型實(shí)例被分配在托管堆上,下面這篇文章主要給大家介紹了關(guān)于C#基礎(chǔ)教程之類class與結(jié)構(gòu)struct區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-11-11Unity讀取Excel文件轉(zhuǎn)換XML格式文件
這篇文章主要為大家詳細(xì)介紹了Unity讀取Excel文件轉(zhuǎn)換XML格式文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06