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