冰材质2-iceRefrationVF

在U4.6.3版本里报错,估计在U5.0版本以上才可以吧


Shader "Custom/iceRefrationVF" 

{
Properties {
   _Color ("Main Color", Color) = (1,1,1,1)
   _MainTex ("BaseTex", 2D) = "white" {}
   _BumpMap ("Normalmap", 2D) = "bump" {}
   _BumpAmt ("Distortion", range (0,1)) = 0.12


}


Category {


   // We must be transparent, so other objects are drawn before this one.
   Tags { "Queue"="Transparent" "RenderType"="Opaque" }
    zwrite off
    
   SubShader {


       // This pass grabs the screen behind the object into a texture.
       // We can access the result in the next pass as _GrabTexture
       GrabPass {
           Name "BASE"
           Tags { "LightMode" = "Always" }
       }


       // Main pass: Take the texture grabbed above and use the bumpmap to perturb it
       // on to the screen
       Pass {
           Name "BASE"
           Tags {"RenderType"="Opaque" "LightMode" = "Always" }
           


        CGPROGRAM
          #pragma vertex vert_surf 
  #pragma fragment frag_surf 
  #pragma multi_compile_fog 
  #include "UnityCG.cginc"
  #pragma target 3.0


       struct appdata_t {
           float4 vertex : POSITION;
           float2 texcoord: TEXCOORD0;
       };


       struct v2f {
           float4 vertex : SV_POSITION;
           float4 uvgrab : TEXCOORD0;
           float2 uvbump : TEXCOORD1;
           float2 uvmain : TEXCOORD2;
           UNITY_FOG_COORDS(3)
       };


       float _BumpAmt;
       float4 _BumpMap_ST;
       float4 _MainTex_ST;


       v2f vert (appdata_t v)
       {
           v2f o;
           o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
           #if UNITY_UV_STARTS_AT_TOP
           float scale = -1.0;
           #else
           float scale = 1.0;
           #endif
           o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
           o.uvgrab.zw = o.vertex.zw;
           //以上7行可以用o.uvgrab = ComputeGrabScreenPos(o.vertex);代替
           o.uvbump = TRANSFORM_TEX( v.texcoord, _BumpMap );
           o.uvmain = TRANSFORM_TEX( v.texcoord, _MainTex );
           UNITY_TRANSFER_FOG(o,o.vertex);
           return o;
       }


       sampler2D _GrabTexture;
//      float4 _GrabTexture_TexelSize;
       float4 _Color;
       sampler2D _BumpMap;
       sampler2D _MainTex;




       half4 frag (v2f i) : SV_Target
       {
           // calculate perturbed coordinates
           half2 bump = UnpackNormal(tex2D( _BumpMap, i.uvbump )).rg; 
           // we could optimize this by just reading the x & y without reconstructing the Z
           float2 offset = bump * _BumpAmt ;
           i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;


           half4 col = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(i.uvgrab));
           half4 tint = tex2D(_MainTex, i.uvmain)*_Color*2;
           col *= tint;
           UNITY_APPLY_FOG(i.fogCoord, col);
           return col;
       }
       ENDCG
               }
           }


           // ------------------------------------------------------------------
           // Fallback for older cards and Unity non-Pro


           SubShader {
               Blend DstColor Zero
               Pass {
                   Name "BASE"
                   SetTexture [_MainTex] { combine texture }
               }
           }
       }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值