我有一个来自github项目的着色器管理脚本,我试图逐行了解它的功能。一方面,它会拿起相机并执行以下操作:
m_transparentCamera.cullingMask = ~(1 << LayerMask.NameToLayer("Transparent"));
然后渲染摄影机。在文本的稍后部分,它将更改相机的目标纹理,然后执行以下操作:
m_transparentCamera.cullingMask = 1 << LayerMask.NameToLayer("Transparent");
然后使用其他着色器再次渲染。
这里的符号是什么意思?我知道〜和<<是按位运算符,但是这里对剔除蒙版实际上是做什么的?
为什么这样做呢?
为什么先反转图层蒙版的位,然后再反转呢?
答案 0 :(得分:0)
相机的消隐遮罩告诉它要渲染的图层。
第一个蒙版newtype Render s a = Render { runRender :: MaybeT (ST s) a }
deriving instance Functor (Render s)
deriving instance Applicative (Render s)
deriving instance Monad (Render s)
instance MonadThrow (Render s) where
throwM _ = Render $ MaybeT $ pure Nothing
instance PrimMonad (Render s) where
type PrimState (Render s) = s
primitive f = Render $ lift $ primitive f
将除了的所有内容呈现为透明层。
第二个遮罩~(1 << LayerMask.NameToLayer("Transparent"))
仅渲染透明层。
一遍渲染不透明的几何图形,然后在第二遍渲染透明的几何图形是很常见的。这样可以确保渲染在透明对象后面的所有不透明对象。
如果这些都不有意义,则您可能需要阅读bit masks。
位屏蔽往往会大量使用:
1 << LayerMask.NameToLayer("Transparent")
)来选择一点<<
)以启用掩码的某些位|
)以禁用掩码的某些位&
)否定掩码