c# - Unity/C# 相机剔除 mask 表示法

标签 c# unity-game-engine rendering shader vertex-shader

我有一个来自 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") ,仅渲染透明层。

在一次渲染中渲染不透明几何体,然后在第二次渲染中渲染透明几何体是很常见的。这可确保渲染透明对象后面的任何不透明对象。

如果这些都没有意义,您可能需要阅读 bit masks .

位掩码往往会大量使用:

  • 左移 ( << ) 选择一点
  • 按位或 ( | ) 启用掩码的某些位
  • 按位 AND ( & ) 禁用掩码的某些位
  • 按位 NOT ( ~ ) 对掩码取反

关于c# - Unity/C# 相机剔除 mask 表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565626/

相关文章:

javascript - EJS View 未渲染

css - 基于边框的三 Angular 形未按预期呈现

java - Jtable 渲染器颜色避免颜色反转

c# - 授权 header 未通过 UnityWebRequest 传递

ios - Firebase Analytics iOS/Unity 推送通知?

c# - 如何使用c# AnimateWindow函数的滑动效果来显示和隐藏窗体?

javascript - 从浏览器到桌面应用程序的信号

c# - MongoDB C# 驱动程序 - 无需设置/替换即可更新

c# - HttpWebRequest 自动发送需要的HttpRequests

unity-game-engine - Unity PlayerPrefs 保存