目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:ShaderLab: Pass 版本:2019.1
ShaderLab: PassShaderLab的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
设置多边形的剔除模式
ZTestZ测试(深度测试)
ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)
设置深度缓存的测试模式
ZWriteZ写入(深度写入)
ZWrite On | Off
设置深度缓存的写入模式
OffsetOffset 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可复用的通用功能或实现不同的高端效果:
- UsePass 将根据pass的name,从其他的shader中include进来使用。
- GrabPass 可抓取屏幕内容到一张纹理上,供后面的pass来使用。