Unity/C# 相机剔除遮罩表示法
Unity/C# Camera Culling Mask Notation
我有一个来自 github 项目的着色器管理脚本,我试图逐行了解它的作用。有一次它拿起相机并执行此操作:
m_transparentCamera.cullingMask = ~(1 << LayerMask.NameToLayer("Transparent"));
然后渲染相机。稍后在文本中它改变了相机的目标纹理,然后这样做:
m_transparentCamera.cullingMask = 1 << LayerMask.NameToLayer("Transparent");
然后使用不同的着色器再次渲染。
这里的符号是什么意思?我知道 ~ 和 << 是按位运算符,但它实际上对这里的剔除掩码做了什么?
为什么要这样做?
为什么先反转图层蒙版的位,然后再反转?
Github 信誉:https://github.com/candycat1992/OIT_Lab
相机的剔除遮罩告诉它要渲染哪些层。
第一个蒙版 ~(1 << LayerMask.NameToLayer("Transparent"))
渲染所有内容 除了 透明层。
第二个蒙版 1 << LayerMask.NameToLayer("Transparent")
仅渲染透明层。
在一次渲染中渲染不透明几何体,然后在第二次渲染透明几何体是很常见的。这可确保您渲染透明对象后面的任何不透明对象。
如果其中 none 有意义,您可能需要继续阅读 bit masks。
位掩码往往大量使用:
- 左移(
<<
)挑一点
- 按位或 (
|
) 以启用掩码的某些位
- 按位与 (
&
) 禁用掩码的某些位
- 按位非 (
~
) 否定掩码
我有一个来自 github 项目的着色器管理脚本,我试图逐行了解它的作用。有一次它拿起相机并执行此操作:
m_transparentCamera.cullingMask = ~(1 << LayerMask.NameToLayer("Transparent"));
然后渲染相机。稍后在文本中它改变了相机的目标纹理,然后这样做:
m_transparentCamera.cullingMask = 1 << LayerMask.NameToLayer("Transparent");
然后使用不同的着色器再次渲染。
这里的符号是什么意思?我知道 ~ 和 << 是按位运算符,但它实际上对这里的剔除掩码做了什么?
为什么要这样做?
为什么先反转图层蒙版的位,然后再反转?
Github 信誉:https://github.com/candycat1992/OIT_Lab
相机的剔除遮罩告诉它要渲染哪些层。
第一个蒙版 ~(1 << LayerMask.NameToLayer("Transparent"))
渲染所有内容 除了 透明层。
第二个蒙版 1 << LayerMask.NameToLayer("Transparent")
仅渲染透明层。
在一次渲染中渲染不透明几何体,然后在第二次渲染透明几何体是很常见的。这可确保您渲染透明对象后面的任何不透明对象。
如果其中 none 有意义,您可能需要继续阅读 bit masks。
位掩码往往大量使用:
- 左移(
<<
)挑一点 - 按位或 (
|
) 以启用掩码的某些位 - 按位与 (
&
) 禁用掩码的某些位 - 按位非 (
~
) 否定掩码