Version: Unity 6.0 (6000.0)
语言 : 中文
ShaderLab 中的 Offset 命令参考
ShaderLab 中的 ZClip 命令参考

ShaderLab 中的模板命令参考

配置与 GPU 模板缓冲区相关的设置。

渲染管线兼容性

功能名称 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义 SRP 内置渲染管线
模板

语法

签名 示例语法 功能
Stencil
{
    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>
}

请注意所有参数均为可选。
Stencil
{
    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 中的 Offset 命令参考
ShaderLab 中的 ZClip 命令参考