赞
踩
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草 |
队列名称 | 描述 | 队列号 |
---|---|---|
Background | 最先执行渲染,一般用来渲染天空盒(Skybox)或者背景 | 1000 |
Geometry | 非透明的集合体通常使用这个队列,当没有声明渲染队列的时候,Unity默认使用这个队列 | 2000 |
AlphaTest | Alpha测试的几何体会使用这个队列,之所以从Geometry队列单独拆分出来,是因为当所有实体都绘制完之后再绘制Alpha测试会更高效 | 2450 |
Transparent | 在这个队列的几何体按由远及近的顺序进行绘制,所有进行Alpha混合的几何体都应该使用这个队列,例如玻璃材质、粒子特效等 | 3000 |
Overlay | 用来叠加渲染的效果,例如镜头光晕等,放在最后渲染 | 4000 |
除了使用这些Unity预定义的渲染队列外,也可以自己指定一个队列,例如:
Tags{"Queue" = "Geometry + 1"}
这就是表示队列号为2000+1的队列号,在所有非透明几何体绘制完后再进行绘制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。