ShaderLab command: ColorMask
概述
ColorMask命令可以设置颜色的写入通道,可以选择哪些通道写入,也就是会阻止GPU将一些通道写入到RenderTarget当中。
默认情况下,GPU会写入所有的通道RGBA,但有时候实现一些效果的时候,我们不需要4个通道,比如我们可以在渲染阴影贴图时关闭所有的颜色通道,因为只需要深度图。还有一种常用的场景就是完全禁用颜色写入,以便我们可以在一个缓冲区中填充数据而无需写入其他缓冲区,例如在不写入渲染目标的情况下填充模板缓冲区。
该命令在各个渲染管线的支持
全都支持
管线 | 内置管线 | URP | HDRP | SRP |
---|
是否支持 | 支持 | 支持 | 支持 | 支持 |
使用方法
这个命令会改变渲染状态,写在Pass块中使用是设置该Pass的渲染状态,或者写在SubShader块中会设置这个SubShader所有的Pass的渲染状态
写法 | 示例 | 说明 |
---|
ColorMask | ColorMask RGB | 将指定的通道写入到RenderTarget | ColorMask | ColorMask RGB 2 | 将指定的通道写入到指定的RenderTarget |
具体参数设置
参数 | 可以设置的值 | 说明 |
---|
channels | 0 | 关闭所有的颜色写入 | | R | 只写入R通道 | | G | 只写入G通道 | | B | 只写入B通道 | | A | 只写入A通道 | | 任意R、G、B、A的组合 | 写入指定组合的通道,比如RB是仅写入R和B通道 比如 RB | render target | 0-7 | render target的索引 |
使用示例
我们使用一个物体来进行测试
Pass
{
ColorMask RGBA
......
}
Pass
{
ColorMask R
......
}
Pass
{
ColorMask G
......
}
Pass
{
ColorMask RB
......
}
Pass
{
ColorMask 0
......
}
测试版本
2019.4
参考
https://docs.unity3d.com/2019.4/Documentation/Manual/SL-ColorMask.html
|