目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:ShaderLab: Pass
版本:2019.1
ShaderLab: Pass
ShaderLab的Pass
Pass块内容是几何体渲染时绘制一次的内容。
Syntax
语法
Pass { [Name and Tags] [RenderSetup] }
一个基础的Pass命令可包含一组设置渲染状态的命令。
Name and tags
名字与tags标签
一个Pass可以定义它的Name名字,和一些Tags。这些名称或是tags值,可给unity rendering engine(unity渲染引擎)专递用意。
Render state set-up
渲染状态的设置
一个Pass可设置一些硬件状态,如:是否alpha blending,depth testing是否启用。
命令如下:
Cull
剔除
Cull Back | Front | Off
设置多边形的剔除模式
ZTest
Z测试(深度测试)
ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)
设置深度缓存的测试模式
ZWrite
Z写入(深度写入)
ZWrite On | Off
设置深度缓存的写入模式
Offset
Offset OffsetFactor, OffsetUnits
设置z buffer深度的偏移。查看文档 Cull and Depth page了解详情。
查看Cull and Path 可了解更详细的 Cull,ZTest,ZWrite和Offset。
(也可查看我之前写的Offset测试文章)
Blend
混合
Blend sourceBlendMode destBlendMode
Blend sourceBlendMode destBlendMode, alphaSourceBlendMode alphaDestBlendMode
BlendOp colorOp
BlendOp colorOp, alphaOp
AlphaToMask On | Off
设置了alpha blending,alpha 操作方式,alpha覆盖模糊。查看文档 Blending 了解详情。
(这些参数包含了color blending, alpha blending, colorOp, alphaOp,可以看之前写的一篇Vulkan的Color Blending的伪代码来了解计算过程)
ColorMask
颜色通道掩码
ColorMask RGB | A | 0 | any combination of R, G, B, A
(通道掩码设置,例如:ColorMask R只写入Red红色通道数据,写入RGBA通道写法是:ColorMask RGBA)
(写MRT索引设置,例如:ColorMask R 0对MRT0写入R通道,ColorMask GB 1对MRT1写入GB通道数据,MRT可以是0~7的数字(不同硬件支持数量也是不一样的))
设置最终写入framebuffer的颜色通道掩码。ColorMask 0 是关闭了所有颜色通道的写入。默认是 RGBA通道,但有些特殊的效果是需要你过滤某些通道来完成的。
当使用multiple render target(MRT:多渲染目标)时,可设置不同的颜色通道掩码来渲染到每个目标上,在后面加上索引0-7的数字可决定写入的MRT[N]索引。例如,ColorMask RGB 3 将会如MRT3写入RGB通道数据。
Legacy fixed-function Shader commands
旧版的固定函数着色器命令
还有一些命令用于编写旧版本的"fixed-function sytle"的着色器用的。这些都被认为是过时的功能,使用 Surface Shader 或是 Shader Programs 将允许你更灵活的实现各个功能。但是,编写简单的Shader时,使用固定函数风格的shader会更简单容易,有那么一些命令可以使用。注意下面的命令都将会被忽略掉,如果你使用的不是固定函数的shader。
Fixed-function Lighting and Material
固定函数的光照和材质
Lighting On | Off
Material { Material Block }
SeparateSpecular On | Off
Color Color-value
ColorMaterial AmbientAndDiffuse | Emission
所有这些固定函数都控制着逐顶点光照:它们控制着,材质的颜色,高光开关,提供默认颜色(如果顶点光照关闭了的话),还有控制网格的顶点颜色如果影响光照。查看 Materials 了解更多详情。
Fixed-function Fog
固定函数的雾化
Fog { Fog Block }
设置固定函数Fog参数。查看文档 Fogging了解更多详情。
Fixed-function AlphaTest
固定函数AlphaTest(Alpha测试)
AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always) CutoffValue
开启固定函数的alpha testing。查看 alpha testing 了解更多详情。
Fixed-function Texture combiners
固定函数纹理合成器
在设置完一些渲染状态后,使用 SetTexture 命令来指定一些纹理的组合模式:
SetTexture textureProperty { combine options }
Details
Shader的Pass可有几种与Unity的渲染管道交互方式;例如,一个Pass可以使用Tags来指定是否仅用于 deferred shading(延迟渲染)。每个pass也可以在同一个GameObject渲染对象上执行多次;例如,在 forward rendering(正向渲染),“ForwardAdd” 的Pass 类型将基于影响GameObject渲染对象的个数来决定执行次数。查看文档 Render Pipeline 了解详情。
See Also
有那么一些特殊的pass可复用的通用功能或实现不同的高端效果: