Unity Shader实现《氮气加速特效》

1:材质和shader

Shader 是一种給GPU执行的代码,GPU的渲染流水线,为了方便开发人员定制效果,开放出接口給程序员编写代码来控制,这种程序叫作shader, shader开发语言,cocos采用的是GLSL编程语言。开发人员可以在下图顶点Shader和着色Shader来插入代码。

材质是一种配置文件,选择好一个Shader(算法), 并給这个Shader提供必要的参数,当游戏引擎绘制物体的时候,先读取材质,根据材质, 給GPU配置shader和shader要的参数, 这样管道流水线就可以完成的绘制出来这个物体。

2: 准备工作

准备一个子弹头模型(子弹列车^_^)

准备一个加速特效的火焰与透明渐变的贴图:

3: 实现的效果:

4: 上代码:

Shader "Custom/additiveTex_2" {
	Properties {
		_TintColor ("Tint Color", Color) = (0.5, 0.5, 0.5, 0.5)
		_Intensity ("Intensity", Float) = 1.0
		_MainTexture ("Base (RGB) Alpha(A)", 2D) = "white" {}
		_Mask    ("Mask (ARGB or Grayscale)", 2D) = "white" {}
		_speed("speed",Float)=5
	}
	
	Category {
		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
			
	    Blend SrcAlpha One
	    AlphaTest Greater 0.01
	    ColorMask RGB
	    Cull Off
	    Lighting Off
	    ZWrite Off

	    // Fog { Color (0,0,0,0) }
		/*BindChannels {
	        Bind "Color", color
	        Bind "Vertex", vertex
	        Bind "TexCoord", texcoord
    	}*/

		SubShader {
			Pass {
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#pragma fragmentoption ARB_precision_hint_fastest

				#include "UnityCG.cginc"

				fixed4 _TintColor;
				float  _Intensity;
				sampler2D _MainTexture;
				sampler2D _Mask;

				float _speed;

				float4 _MainTexture_ST;
				float4 _Mask_ST;
				
				struct appdata_t {
					float4 vertex : POSITION;
					fixed4 color : COLOR;
					float2 texcoord : TEXCOORD0;
					float2 texcoord2 : TEXCOORD1;
				};

				struct v2f {
					float4 vertex : POSITION;
					fixed4 color : COLOR;
					float2 texcoord : TEXCOORD0;
					float2 texcoord2 : TEXCOORD1;
				};

				v2f vert (appdata_t v)
				{
					v2f o;
					o.vertex = UnityObjectToClipPos(v.vertex);
					o.color = v.color;
					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTexture);
					o.texcoord2 = TRANSFORM_TEX(v.texcoord2,_Mask);
					return o;
				}
					
				fixed4 frag (v2f i) : COLOR
				{
					i.texcoord.x+=_Time*_speed;
					i.texcoord.y-=(_Time*_speed*16);
					
					half4 c = i.color * _TintColor * tex2D(_MainTexture, i.texcoord);
					half4 mask = tex2D(_Mask, i.texcoord2);
					c *= mask.a;
					return _Intensity * c;					
				}
				ENDCG 
			}
		}
	} 
	FallBack "Diffuse"
}

氮气加速特效详细的视频详细讲解,和项目工程,可以加学习讨论群,今天的分享都到这里结束了,谢谢大家。

猜你喜欢

转载自blog.csdn.net/voidinit/article/details/126478394