《自學(xué)記錄》
1、先創(chuàng)建一個Cube,再創(chuàng)建兩個材質(zhì)球Cube、Unilt
2、再創(chuàng)建一個shader代碼UniltShader【Project右鍵Create->Shader->NewSurfaceShader】把里面原來的代碼刪除,寫入下面的代碼
Shader "Custom/highlight "{
//屬性
Properties{
_Diffuse("Diffuse", Color) = (1,1,1,1)
_OutlineCol("OutlineCol", Color) = (1,0,0,1)
_OutlineFactor("OutlineFactor", Range(0,1)) = 0.1
_MainTex("Base 2D", 2D) = "white"{}
}
//子著色器
SubShader
{
//描邊使用兩個Pass,第一個pass沿法線擠出一點,只輸出描邊的顏色
Pass
{
//剔除正面,只渲染背面,對于大多數(shù)模型適用,不過如果需要背面的,就有問題了
Cull Front
CGPROGRAM
#include "UnityCG.cginc"
fixed4 _OutlineCol;
float _OutlineFactor;
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata_full v)
{
v2f o;
//在vertex階段,每個頂點按照法線的方向偏移一部分,不過這種會造成近大遠(yuǎn)小的透視問題
//v.vertex.xyz += v.normal * _OutlineFactor;
o.pos = UnityObjectToClipPos(v.vertex);
//將法線方向轉(zhuǎn)換到視空間
float3 vnormal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
//將視空間法線xy坐標(biāo)轉(zhuǎn)化到投影空間,只有xy需要,z深度不需要了
float2 offset = TransformViewToProjection(vnormal.xy);
//在最終投影階段輸出進(jìn)行偏移操作
o.pos.xy += offset * _OutlineFactor;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
//這個Pass直接輸出描邊顏色
return _OutlineCol;
}
//使用vert函數(shù)和frag函數(shù)
#pragma vertex vert
#pragma fragment frag
ENDCG
}
}
//前面的Shader失效的話,使用默認(rèn)的Diffuse
FallBack "Diffuse"
}
3、把shader?UniltShader拖給材質(zhì)球Unilt

4、把Cube的Mesh?Renderer中Materials的Size改為2,然后把材質(zhì)球Cube、Unilt分別拖到Element0和Element1中,如下圖

自己修改想要的邊緣顏色(修改Unilt)文章來源:http://www.zghlxwxcb.cn/news/detail-720254.html
最終效果文章來源地址http://www.zghlxwxcb.cn/news/detail-720254.html

到了這里,關(guān)于Unity用Shader實現(xiàn)邊緣光效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!