首页 > 代码库 > Unity实现混合模式的ADD模式

Unity实现混合模式的ADD模式

一般来说,2D的特效都会用到ADD模式来播放,但是Unity居然没有内置任何的混合模式,网上资料太少,没有写好的Shader,这里提供下我自己编写Shader:

 1 Shader "Unlit/NewUnlitShader" 2 { 3     Properties 4     { 5         _MainTex ("Texture", 2D) = "white" {} 6     } 7     SubShader 8     { 9         //Tags { "RenderType"="Opaque" }10         Tags{ "Queue" = "Transparent" } // 不使用这个会导致出现背景透明部分不显示的情况11 12         LOD 10013 14         GrabPass{} // 绘制当前的屏幕图像到 _GrabTexture 里15 16         Pass17         {18             CGPROGRAM19             #pragma vertex vert20             #pragma fragment frag21             // make fog work22             #pragma multi_compile_fog23             24             #include "UnityCG.cginc"25 26             struct appdata27             {28                 float4 vertex : POSITION;29                 float2 uv : TEXCOORD0;30             };31 32             struct v2f33             {34                 float2 uv : TEXCOORD0;35                 UNITY_FOG_COORDS(1)36                 float4 vertex : SV_POSITION;37                 half4 screenuv : TEXCOORD2; // 当前屏幕图像的UV坐标38             };39 40             sampler2D _MainTex;41             float4 _MainTex_ST;42 43             sampler2D _GrabTexture; // 当前屏幕图像44             45             v2f vert (appdata v)46             {47                 v2f o;48                 o.vertex = UnityObjectToClipPos(v.vertex);49                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);50                 UNITY_TRANSFER_FOG(o,o.vertex);51                 o.screenuv = ComputeGrabScreenPos(o.vertex); // 获取当前屏幕图像的UV坐标52                 return o;53             }54             55             fixed4 frag (v2f i) : SV_Target56             {57 58                 fixed4 colour = tex2D(_GrabTexture, float2(i.screenuv.x, i.screenuv.y)); // 获取当前屏幕图像的颜色59 60                 // sample the texture61                 fixed4 col = tex2D(_MainTex, i.uv);62 63                 fixed4 endd = col + colour; // ADD 混合模式64 65                 // apply fog66                 UNITY_APPLY_FOG(i.fogCoord, endd);67                 return endd;68             }69             ENDCG70         }71     }72 }

 

Unity实现混合模式的ADD模式