版本:Unity 6 (6000.0)
语言:English
ShaderLab 中的偏移命令参考
ShaderLab 中的 ZClip 命令参考

ShaderLab 中的模板命令参考

配置与 GPU 上的模板缓冲区存储每个像素 8 位值的内存存储区。在 Unity 中,您可以使用模板缓冲区标记像素,然后仅渲染通过模板操作的像素。更多信息
参见术语表
相关的设置。

渲染管线兼容性

功能名称 通用渲染管线一系列操作,用于获取场景的内容并在屏幕上显示它们。Unity 允许您从预构建的渲染管线中选择,或编写自己的渲染管线。更多信息
参见术语表
(URP)
高清渲染管线 (HDRP) 自定义 SRP 内置渲染管线
模板

语法

签名 示例语法 功能
模板
{
    Ref <ref>
    ReadMask <readMask>
    WriteMask <writeMask>
    Comp <comparisonOperation>
    Pass <passOperation>
    Fail <failOperation>
    ZFail <zFailOperation>
    CompBack <comparisonOperationBack>
    PassBack <passOperationBack>
    FailBack <failOperationBack>
    ZFailBack <zFailOperationBack>
    CompFront <comparisonOperationFront>
    PassFront <passOperationFront>
    FailFront <failOperationFront>
    ZFailFront <zFailOperationFront>
}

请注意,所有参数都是可选的。
模板
{
    Ref 2
    Comp equal
    Pass keep
    ZFail decrWrap
}
根据给定的参数配置模板缓冲区。

参数

参数 功能
ref 一个整数。范围为 0 到 255。默认值为 0。 参考值。

GPU 使用在 comparisonOperation 中定义的操作将模板缓冲区的当前内容与此值进行比较。

此值将与 readMask 或 writeMask 进行掩码,具体取决于是否正在执行读取或写入操作。

如果 Pass、Fail 或 ZFail 的值为 Replace,则 GPU 还可以将此值写入模板缓冲区。
readMask 一个整数。范围为 0 到 255。默认值为 255。 GPU 在执行模板测试时使用此值作为掩码。

有关模板测试方程,请参见上文。
writeMask 一个整数。范围为 0 到 255。默认值为 255。 GPU 在写入模板缓冲区时使用此值作为掩码。

请注意,与其他掩码一样,它指定了哪些位包含在操作中。例如,值 0 表示操作中不包含任何位,而不是模板缓冲区接收值为 0。
comparisonOperation 比较操作。有关有效值,请参见比较操作值。默认值为 Always。 GPU 对所有像素执行模板测试的操作。

这定义了所有像素的操作,而不管方向如何。如果除了 comparisonOperationBack 和 comparisonOperationFront 之外还定义了此值,则此值将覆盖它们。
passOperation 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素同时通过模板测试和深度测试时,GPU 对模板缓冲区执行的操作。

这定义了所有像素的操作,而不管方向如何。如果除了 passOperationBack 和 passOperationFront 之外还定义了此值,则此值将覆盖它们。
failOperation 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素未通过模板测试时,GPU 对模板缓冲区执行的操作。

这定义了所有像素的操作,而不管方向如何。如果除了 failOperationBack 和 failOperationFront 之外还定义了此值,则此值将覆盖它们。
zFailOperation 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素通过模板测试但未通过深度测试时,GPU 对模板缓冲区执行的操作。

这定义了所有像素的操作,而不管方向如何。如果除了 zFailOperationBack 和 zFailOperationFront 之外还定义了此值,则此值将覆盖它们。
comparisonOperationBack 比较操作。有关有效值,请参见比较操作值。默认值为 Always。 GPU 执行模板测试的操作。

这仅定义了背面像素的操作。如果定义了 comparisonOperation,则该值将覆盖此值。
passOperationBack 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素同时通过模板测试和深度测试时,GPU 对模板缓冲区执行的操作。

这仅定义了背面像素的操作。如果定义了 passOperation,则该值将覆盖此值。
failOperationBack 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素未通过模板测试时,GPU 对模板缓冲区执行的操作。

这仅定义了背面像素的操作。如果定义了 failOperation,则该值将覆盖此值。
zFailOperationBack 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素通过模板测试但未通过深度测试时,GPU 对模板缓冲区执行的操作。

这仅定义了背面像素的操作。如果定义了 zFailOperation,则该值将覆盖此值。
comparisonOperationFront 比较操作。有关有效值,请参见比较操作值。默认值为 Always。 GPU 执行模板测试的操作。

这仅定义了正面像素的操作。如果定义了 comparisonOperation,则该值将覆盖此值。
passOperationFront 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素同时通过模板测试和深度测试时,GPU 对模板缓冲区执行的操作。

这仅定义了正面像素的操作。如果定义了 passOperation,则该值将覆盖此值。
failOperationFront 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素未通过模板测试时,GPU 对模板缓冲区执行的操作。

这仅定义了正面像素的操作。如果定义了 failOperation,则该值将覆盖此值。
zFailOperationFront 模板操作。有关有效值,请参见模板操作值。默认值为 Keep。 当像素通过模板测试但未通过深度测试时,GPU 对模板缓冲区执行的操作。

这仅定义了正面像素的操作。如果定义了 zFailOperation,则该值将覆盖此值。

比较值

在 C# 中,这些值由Rendering.CompareFunction 枚举表示。

Rendering.CompareFunction 枚举中的相应整数值 功能
Never 1 从不渲染像素计算机图像中最小的单位。像素大小取决于屏幕分辨率。像素灯光在每个屏幕像素处计算。更多信息
参见术语表
Less 2 当其参考值小于模板缓冲区中的当前值时渲染像素。
Equal 3 当其参考值等于模板缓冲区中的当前值时渲染像素。
LEqual 4 当其参考值小于或等于模板缓冲区中的当前值时渲染像素。
Greater 5 当其参考值大于模板缓冲区中的当前值时渲染像素。
NotEqual 6 当其参考值与模板缓冲区中的当前值不同时渲染像素。
GEqual 7 当其参考值大于或等于模板缓冲区中的当前值时渲染像素。
Always 8 始终渲染像素。

模板值

在 C# 中,这些值由Rendering.Rendering.StencilOp 枚举表示。

Rendering.StencilOp 枚举中的相应整数值 功能
Keep 0 保留模板缓冲区的当前内容。
Zero 1 将 0 写入模板缓冲区。
Replace 2 将参考值写入缓冲区。
IncrSat 3 递增缓冲区中的当前值。如果该值已经是 255,则保持为 255。
DecrSat 4 递减缓冲区中的当前值。如果该值已经是 0,则保持为 0。
Invert 5 否定缓冲区中当前值的所有位。
IncrWrap 6 递增缓冲区中的当前值。如果该值已经是 255,则变为 0。
DecrWrap 7 递减缓冲区中的当前值。如果该值已经是 0,则变为 255。

其他资源

ShaderLab 中的偏移命令参考
ShaderLab 中的 ZClip 命令参考