ARKit 和 SceneKit 中的遮挡 Material 或保持着色器

Occlusion Material or Hold-Out Shader in ARKit and SceneKit

我看过一些 ARKit 的示例演示,其中 material A 正在阻挡 material B,有点创建遮挡效果,或黑洞,或掩蔽。但他们似乎都在使用 Unity 引擎(我可能错了)。我想使用 Apple 已经提供的功能来做到这一点。或者也许使用金属着色器。

想知道是否有人知道 ARKit 或什至在 SceneKit 术语中允许这样做的技巧,当 2 个对象重叠时,但希望一个对象遮挡另一个对象,使另一个对象为空。不能是南玻吧,那样太贵了?

是的,绝对可以使用 3D 对象作为保留遮罩,a.k.a。 Occlusion Material 在 iOS 和 macOS 应用程序中。一个名为 .colorBufferWriteMask 的实例 属性,实际上在渲染 material 时写入深度通道信息。因此,对于此 属性 掩码对象,您需要以下值:

sphere.geometry?.firstMaterial?.colorBufferWriteMask = []

...并且不要忘记分配适当的渲染顺序(最靠近相机):

sphere.renderingOrder = -50  

..并给出两个值来确定 SceneKit 在渲染 material 时是否产生深度信息:

sphere.geometry?.firstMaterial?.writesToDepthBuffer = true
sphere.geometry?.firstMaterial?.readsFromDepthBuffer = true