Unity shader 实现氮气加速特效

1:材质和shader

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

Unity shader 实现氮气加速特效_第1张图片

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

2: 准备工作

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

Unity shader 实现氮气加速特效_第2张图片

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

Unity shader 实现氮气加速特效_第3张图片

3: 实现的效果:

Unity shader 实现氮气加速特效_第4张图片

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"

}

氮气加速特效详细的视频详细讲解,和项目工程,可以加学习讨论群,今天的分享都到这里结束了,谢谢大家。点击链接加入群聊【Unity/Cocos交流群】

你可能感兴趣的:(Unity shader 实现氮气加速特效)