zoukankan      html  css  js  c++  java
  • 震荡波Shader_HeatDistort

    // Per pixel bumped refraction.
    // Uses a normal map to distort the image behind, and
    // an additional texture to tint the color.

    Shader "HeatDistort" {
    Properties {
     _BumpAmt  ("Distortion", range (0,128)) = 10
     _MainTex ("Tint Color (RGB)", 2D) = "white" {}
     _BumpMap ("Normalmap", 2D) = "bump" {}
    }

    CGINCLUDE
    #pragma fragmentoption ARB_precision_hint_fastest
    #pragma fragmentoption ARB_fog_exp2
    #include "UnityCG.cginc"

    sampler2D _GrabTexture : register(s0);
    float4 _GrabTexture_TexelSize;
    sampler2D _BumpMap : register(s1);
    sampler2D _MainTex : register(s2);

    struct v2f {
     float4 vertex : POSITION;
     float4 uvgrab : TEXCOORD0;
     float2 uvbump : TEXCOORD1;
     float2 uvmain : TEXCOORD2;
    };

    uniform float _BumpAmt;


    half4 frag( v2f i ) : COLOR
    {
     // 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 * _GrabTexture_TexelSize.xy;
     i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
     
     half4 col = tex2Dproj( _GrabTexture, i.uvgrab.xyw );
     half4 tint = tex2D( _MainTex, i.uvmain );
     return col * tint;
    }
    ENDCG

    Category {

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


     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 { "LightMode" = "Always" }
       
    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag

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

    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;
     o.uvbump = MultiplyUV( UNITY_MATRIX_TEXTURE1, v.texcoord );
     o.uvmain = MultiplyUV( UNITY_MATRIX_TEXTURE2, v.texcoord );
     return o;
    }
    ENDCG
      }
     }

     // ------------------------------------------------------------------
     // Fallback for older cards and Unity non-Pro
     
     SubShader {
      Blend DstColor Zero
      Pass {
       Name "BASE"
       SetTexture [_MainTex] { combine texture }
      }
     }
    }

    }

  • 相关阅读:
    java枚举enum
    冒泡排序、选择排序、插入排序、二分法排序、快速排序、二叉树排序、堆排序总结
    Django-tinymce富文本的使用
    Redis-基本操作总结
    git-总结大全
    css-总结
    html-table布局
    html表单示例
    html总结
    python-浅拷贝、深拷贝实例以及讲解
  • 原文地址:https://www.cnblogs.com/softimagewht/p/2173204.html
Copyright © 2011-2022 走看看