unity_shader之實現場景淡入淡出

3D遊戲中經常會用到往前走場景的淡入效果,實際就是物體從透明逐漸變實的過程
用Shader實現非常簡單

實現思路:
1 設置淡入的起始距離 和 結束距離
2 在vertex階段計算物體頂點與相機的距離
3 根據距離計算alpha

Shader如下
 

  1. Shader "Custom/Fade" {
  2.     Properties {
  3.         _MainTex ("Texture"2D) = "white" { }
  4.         _FadeDistanceNear ("Near fadeout dist (View Space)"float) = 35    
  5.         _FadeDistanceFar ("Far fadeout dist (View Space)"float) = 40
  6.     }
  7.     SubShader
  8.     {
  9.         Tags { "Queue"="Transparent" "RenderType"="Transparent"}
  10.         ZWrite On
  11.         Blend SrcAlpha OneMinusSrcAlpha
  12.         pass
  13.         {
  14.             CGPROGRAM
  15.             #pragma vertex vert
  16.             #pragma fragment frag
  17.             #include "UnityCG.cginc"
  18.             sampler2D _MainTex;
  19.             float4 _MainTex_ST;
  20.             struct v2f {
  21.                 float4  pos : SV_POSITION;
  22.                 float2  uv : TEXCOORD0;
  23.                 float fade:TEXCOORD1;
  24.             } ;
  25.             float _FadeDistanceNear;
  26.             float _FadeDistanceFar;
  27.             v2f vert (appdata_base v)
  28.             {
  29.                 v2f o;
  30.                 o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
  31.                 o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
  32.                 //相機座標系的物體座標
  33.                 float3 posView = mul(UNITY_MATRIX_MV,v.vertex).xyz;
  34.                 //計算與相機距離
  35.                 float dis = length(posView);
  36.                 //計算fade
  37.                 o.fade = 1 - saturate((dis - _FadeDistanceNear)/(_FadeDistanceFar - _FadeDistanceNear));
  38.                 return o;
  39.             }
  40.             float4 frag (v2f i) : COLOR
  41.             {
  42.                 float4 texCol = tex2D(_MainTex,i.uv);
  43.                 float4 outp = texCol;
  44.                 //fade作爲alpha
  45.                 return float4(outp.rgb,i.fade);
  46.             }
  47.             ENDCG
  48.         }
  49.     }
  50. }

 

轉載自風宇衝新浪博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章