3D遊戲中經常會用到往前走場景的淡入效果,實際就是物體從透明逐漸變實的過程
用Shader實現非常簡單
實現思路:
1 設置淡入的起始距離 和 結束距離
2 在vertex階段計算物體頂點與相機的距離
3 根據距離計算alpha
Shader如下
- Shader "Custom/Fade" {
- Properties {
- _MainTex ("Texture", 2D) = "white" { }
- _FadeDistanceNear ("Near fadeout dist (View Space)", float) = 35
- _FadeDistanceFar ("Far fadeout dist (View Space)", float) = 40
- }
- SubShader
- {
- Tags { "Queue"="Transparent" "RenderType"="Transparent"}
- ZWrite On
- Blend SrcAlpha OneMinusSrcAlpha
- pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- sampler2D _MainTex;
- float4 _MainTex_ST;
- struct v2f {
- float4 pos : SV_POSITION;
- float2 uv : TEXCOORD0;
- float fade:TEXCOORD1;
- } ;
- float _FadeDistanceNear;
- float _FadeDistanceFar;
- v2f vert (appdata_base v)
- {
- v2f o;
- o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
- //相機座標系的物體座標
- float3 posView = mul(UNITY_MATRIX_MV,v.vertex).xyz;
- //計算與相機距離
- float dis = length(posView);
- //計算fade
- o.fade = 1 - saturate((dis - _FadeDistanceNear)/(_FadeDistanceFar - _FadeDistanceNear));
- return o;
- }
- float4 frag (v2f i) : COLOR
- {
- float4 texCol = tex2D(_MainTex,i.uv);
- float4 outp = texCol;
- //fade作爲alpha
- return float4(outp.rgb,i.fade);
- }
- ENDCG
- }
- }
- }
轉載自風宇衝新浪博客