UnityShader 简单护盾效果
生活随笔
收集整理的這篇文章主要介紹了
UnityShader 简单护盾效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Shader "Unlit/Shield"
{Properties{_Color("Color", Color) = (1,1,1,1)//圈內的顏色_RimColor("Rim Color", Color) = (1,1,1,1)//邊緣顏色_RimScale("Rim Scale", Float) = 1//邊緣大小_Transparent("Transparent", Range(0, 1)) = 0//控制透明度}SubShader{Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True" "ForceNoShadowCasting" = "True" }LOD 300//Unity會把 CGINCLUDE 和 ENDCG 之間的代碼插入到每一個pass中,已達到聲明一遍,多次使用的目的。CGINCLUDE#include "UnityCG.cginc"fixed4 _Color;fixed4 _RimColor;float _RimScale;fixed _Transparent;struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD1;float3 worldViewDir : TEXCOORD2;};v2f vert(a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldViewDir = UnityWorldSpaceViewDir(v.vertex);return o;}fixed4 frag(v2f i) : SV_TARGET{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldViewDir = normalize(i.worldViewDir);// 計算法線和視線的點積結果,越靠近邊緣,值越趨近于1fixed rim = 1 - abs(dot(worldNormal, worldViewDir));fixed4 finalColor = fixed4(lerp(_Color.rgb, _RimColor.rgb, rim* _RimScale), max(rim* _RimScale, _Transparent));return finalColor;}ENDCGPass {Cull OffZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment fragENDCG}}
}
可以自己更改護盾的顏色,用到了檢測邊緣的知識而已,挺簡單的東西。
Unity會把 CGINCLUDE 和 ENDCG 之間的代碼插入到每一個pass中,已達到聲明一遍,多次使用的目的。
總結
以上是生活随笔為你收集整理的UnityShader 简单护盾效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的C/S聊天室
- 下一篇: 梦想在三十岁起航!__来自黑马程序员69