当前位置:   article > 正文

Unity Shader学习案例一: 流光效果_u3d 编写shader适用于按钮流光效果

u3d 编写shader适用于按钮流光效果

Unity Shader Lab新手宝典简单Shader案例一:流光效果 + 相关基础知识说明

Shader "Samples/Light Flow"//shader名称
{
	Properties//开放到材质面板的属性
	{
		_Tex("Texture",2D) = "white"{}
		_Color("Color",Color) = (0,1,1,1)

		//关键词枚举,0为X方向,1为Y方向
		[KeywordEnum(X,Y)] _DIRECTION("Flow Direction",float) = 0
		_Speed("Flow Speed",float) = 1
	}

	SubShader//下面是shader的主要内容
	{
		Tags{"RenderType" = "Transparent" "Queue" = "Transparent"}//标签,通过键值对的形式声明,没有数量限制。
		//RenderType(渲染类型)标签:将Shader划分为不同类别,用于后期进行Shader替换,或者产生摄像机的深度纹理
		//所有可使用的渲染类型:Opaque\Transparent\TransparentCutout\Background\Oberlay\TreeQpaque\TreeTransparentCutout\TreeBillboard\Grass\GrassBillboard
		//Queue(队列)标签:确定物体的渲染顺序
		//Unity预先定义的五种渲染队列:Background\Geometry\AlphaTest\Transparent\Overlay
		
		Blend One One//混合模式,线性减淡
		Cull Off//渲染状态,Cull Back\Front\Off,设置多边形的剔除方式,有背面剔除、正面剔除、不剔除,默认为Back,可以放到Pass内。
		Pass
		{
			CGPROGRAM//接下来是CG语言
			//编译指令
			#pragma vertex vert//定义顶点着色器的名称,通常使用vert
			#pragma  fragment frag//定义片段着色器名称,通常使用frag

			//定义枚举关键词
			#pragma shader_feature _DIRECTION_X _DIRECTION_Y

			#include"unityCG.cginc"//导入包含文件

			struct v2f
			{
				float2 texcoord : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};

			sampler2D _Tex;
			float4 _Tex_ST;
			fixed4 _Color;
			float _Speed;

			v2f vert (appdata_base v)
			{
				v2f o;

				o.texcoord = TRANSFORM_TEX(v.texcoord,_Tex);
				o.vertex = UnityObjectToClipPos(v.vertex);

				return o;
			}

			float4 frag(v2f i) : SV_Target
			{
				float2 texcoord;

				//判断流动方向
				#if _DIRECTION_X
				texcoord = float2(i.texcoord.x + _Time.x * _Speed, i.texcoord.y);
				#elif _DIRECTION_Y
				texcoord = float2(i.texcoord.x, i.texcoord.y + _Time.x * _Speed);
				#endif

				return tex2D(_Tex,texcoord) * _Color;
			}
			ENDCG
		}	
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

可以设置的渲染类型

类型名称描述
Opaque用于普通Shader,例如:不透明、自发光、反射、地形Shader
Transparent用于半透明Shader,例如:透明、粒子
TransparentCutout用于透明测试Shader,例如:植物叶子
BackGround用于Skybox Shader
Overlay用于GUI纹理、Halo、Flare Shader
TreeOpaque用于地形系统中的树干
TreeTransparentCutout用于地形系统中的树叶
TreeBillboard用于地形系统中的Billboard树
Grass用于地形系统中的草
GrassBillboard用于地形系统中的Billboard草

Unity预定义的五种渲染队列

队列名称描述队列号
Background最先执行渲染,一般用来渲染天空盒(Skybox)或者背景1000
Geometry非透明的集合体通常使用这个队列,当没有声明渲染队列的时候,Unity默认使用这个队列2000
AlphaTestAlpha测试的几何体会使用这个队列,之所以从Geometry队列单独拆分出来,是因为当所有实体都绘制完之后再绘制Alpha测试会更高效2450
Transparent在这个队列的几何体按由远及近的顺序进行绘制,所有进行Alpha混合的几何体都应该使用这个队列,例如玻璃材质、粒子特效等3000
Overlay用来叠加渲染的效果,例如镜头光晕等,放在最后渲染4000

除了使用这些Unity预定义的渲染队列外,也可以自己指定一个队列,例如:

Tags{"Queue" = "Geometry + 1"}
  • 1

这就是表示队列号为2000+1的队列号,在所有非透明几何体绘制完后再进行绘制。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号