[进击吧shader]深入一点的shader之Tag

来源:互联网 发布:mmd建模软件 编辑:程序博客网 时间:2024/06/04 18:10
Shader "Custom/textshader" {    Properties {        _Color ("Color", Color) = (0,1,1,1)        _MainTex ("Albedo (RGB)", 2D) = "black" {}        _Glossiness ("Smoothness", Range(0,1)) = 0.5        _Metallic ("Metallic", Range(0,1)) = 0.0    }    SubShader {        Tags { "RenderType"="Opaque" }        LOD 200        CGPROGRAM        #pragma surface surf Standard fullforwardshadows        #pragma target 3.0        sampler2D _MainTex;        struct Input {            float2 uv_MainTex;        };        half _Glossiness;        half _Metallic;        fixed4 _Color;        UNITY_INSTANCING_CBUFFER_START(Props)        UNITY_INSTANCING_CBUFFER_END        void surf (Input IN, inout SurfaceOutputStandard o) {            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;            o.Albedo = c.rgb;            o.Metallic = _Metallic;            o.Smoothness = _Glossiness;            o.Alpha = c.a;        }        ENDCG    }    FallBack "Diffuse"}

还是这段代码,以及可以看得懂Properties 里的属性设置了,那么接下来就是去认识sunshader里的东西了

Tags { "RenderType"="Opaque" }

tag标签的定义指定了shader的渲染顺序以及如何渲染

SubShader标签类型:注意这些标签只能在SubShader中声明,不能再Pass中
Queue
1.Background 1000 这个队列被最先渲染。它被用于skyboxes等。
2.Geometry 2000 是这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。
3.AlphaTest 2450 通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。
4.Transparent 3000 该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列, 例如玻璃和粒子效果。
5.Overlay 4000 该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。

RenderType(unity内置的<也可以自定义>)
1.Opaque 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
2.Transparent 用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
3.TransparentCutout 用于透明带镂空着色器
4.Background 天空盒着色器。
5.Overlay GUITexture, Halo(光晕), Flare shaders.光晕着色器、闪光着色器。
6.TreeOpaque 地形引擎中的树皮
7.TreeTransparentCutout 地形引擎中的树叶。
8.TreeBillboard 地形引擎中的广告牌树。
9.Grass 地形引擎中的草。
10.GrassBillboard 地形引擎何中的广告牌草。

DisableBatching 是否进行批处理
当使用绘制调用批处理 Draw Call Batching 时,一些 shaders(主要是做对象空间顶点变形的shader)不工作 - 这是因为批处理将所有几何转换为世界空间,因此“对象空间”丢失。

1.DisableBatching标签可以用来消除这个问题。 有三个可能的值:
“True”(始终禁用此着色器的批处理)
“False”(不禁用批处理; 这是默认值)
“LODFading”(当LOD衰减活动时禁用批处理;主要用于树)。

2.ForceNoShadowCasting 是否强制不生成阴影
如果给出了ForceNoShadowCasting标签并且值为“True”,则使用此subshader渲染的对象将永远不会投射阴影。 当你在透明对象上使用shader替换,并且你不会继承来自另一个subshader的阴影传递时,这是最有用的。

3.IgnoreProjector 是否忽略投影器投影 如果给定IgnoreProjector标记并且值为“True”,则使用此shader的对象不会受到投影机的影响。 这对半透明象最有用,因为暂时没有对他们产生投影的比较合适的办法,那么直接忽略掉就行了。

4.CanUseSpriteAtlas 是否可以用于精灵图集 将sprite的sharder效果应用于整个图集 应该设置为false

5.PreviewType 指material 在inspector预览应如何显示材质。 默认情况下,材质显示为球体,但PreviewType也可以设置为“Plane”
(显示为2D)或“Skybox”(将显示为天空盒)。

RenderSetup
1. Cull 设置剔除模式 CullBack、CullFront、CullOff(剔除背面、剔除正面、剔除关闭)
2.ZTest 设置深度测试时使用的函数 ZTest Less/Greater/LEqual/GEqual/Equal/NotEqual/Always
3.ZWrite 设置深度写入 ZWrite On/Off
4.Blend 设置混合模式 Blend Off /Blend srcFactor targetFactor(Alpha混合)等(命令很多)
5.Lighting 设置光照开关 Lighting On/Off
6.SeparateSpecular 设置高光开关 SeparateSpecular On/Off
7.Fog{} 雾效 Mode Off | Global | Linear | Exp | Exp2 (雾效开关)

这些看看就好,之后就开始是正文

CGPROGRAM//中间是CG语言的部分,明天继续~CGEND
阅读全文
0 0