Unity 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
		}	
	}
}

可以设置的渲染类型

类型名称 描述
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
AlphaTest Alpha测试的几何体会使用这个队列,之所以从Geometry队列单独拆分出来,是因为当所有实体都绘制完之后再绘制Alpha测试会更高效 2450
Transparent 在这个队列的几何体按由远及近的顺序进行绘制,所有进行Alpha混合的几何体都应该使用这个队列,例如玻璃材质、粒子特效等 3000
Overlay 用来叠加渲染的效果,例如镜头光晕等,放在最后渲染 4000

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_35687714/article/details/127063099