目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:ShaderLab: Pass 版本:2019.1
ShaderLab: PassTags Pass的Tags标签
Pass中使用tags标签可以告诉渲染引擎如果来渲染。
Syntax语法
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
指定 TagName1 的值为 Value1,TagName2 值为 Value2。你可以根据你的需求来添加多个tag内容。
DetailsTags 是一个键值对。Pass 的Tags用于控制该Pass在Unity光照管线中的定位(环境光照,顶点光照,像素光照,等等)。注意下面的tags会被Unity识别,这些tags值能在Pass块中定义,不是再SubShader块下。
LightMode tag光照模型的tag
LightMode tag 定义了该Pass在Unity光照管线的角色定位。查看 render pipeline 了解更多详情。这些tag很少同于手写;通常需要与光照交互的shader才需要添加这些tag,如Surface Shader都处理了这些细节内容。
LightMode的tag对应可能的值:
- Always:该对象总会被渲染;但没有光照应用。
- ForwardBase:用于 Forward rendering(正向渲染),环境光,主要的方向光,顶点或是SH球谐函数和静态烘焙光照贴图都应用了。
- ForwardAdd:用于 Forward rendering(正向渲染);逐像素的叠加光照应用,每个有效的灯光都会调用一次这样的pass。
- Deferred:用于 Deferred Shading(延迟着色渲染);渲染到G-Buffer。
- ShadowCaster:渲染对象深度到一张shadowmap中或是深度纹理中。
- MotionVectors:用于计算每个对象的运动向量。
- PrepassBase:用于 legacy Deferred Lighting(旧版本的延迟光照渲染),渲染法线和高光指数。
- PrepassFinal:用于 legacy Deferred Lighting(旧版本的延迟光照渲染),渲染最终的纹理,光照,自发光的组合颜色。
- Vertex:用于 legacy Vertex Light rendering(旧版本的顶点光照渲染),当对象不使用静态的光照烘焙贴图时使用;所有顶点光照都会应用。
- VertexLMRGBM:用于 legacy Vertex Lit rendering (旧版本的顶点光照渲染),当对象是使用了静态光照烘焙贴图时使用;该静态光照烘焙贴图使用RGBM编码(PC 和 游戏主机平台使用)。
- VertexLM:用于 legacy Vertex Lit rendering(旧版本的顶点光照渲染);当对选哪个使用了静态光照烘焙贴图时使用;静态光照烘焙贴图使用double-LDR编码(移动平台使用)。
一个pass可以指定一个标记,告诉 rendering pipeline (Unity渲染管线)如何传递数据给该pass。这可以通过PassFlags来完成,使用一个用空格分隔的flag名称。当前支持的flags有(官方提供的连接都看了,看到最后又倒回了这个页面,没有说明这个PassFlags是哪个,而且下面哪个flags也没有以空格来分开啊,真的无语了):
- OnlyDirectional:用于ForwardBase类型的pass,这个flag会让unity只会将主要的方向光和环境光/光探针数据传入该shader中。这意味着non-important非重要的光照数据是不会被传入顶点光照或是球谐函数的shader变量中的。查看 Forward rendering 了解更多详情。
一个pass可以指定它会在满足某些外部条件时才被绘制渲染用。这可以使用 RequireOptions tag来完成,值是一个使用空格分隔的字符串。当前支持的有:
- SoftVegetation:pass的渲染仅在 Quality 窗口中的 Soft Vegetation 开启时。
SubShader也可设置Tags,查看 SubShader Tags。