首页 > 代码库 > 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模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。