【问题标题】:Occlusion Material or Hold-Out Shader in ARKit and SceneKitARKit 和 SceneKit 中的遮挡材质或保持着色器
【发布时间】:2018-01-28 01:29:19
【问题描述】:

我看过一些 ARKit 的示例演示,其中材料 A 阻挡了材料 B,产生了遮挡效果、黑洞或遮罩。但他们似乎都在使用 Unity 引擎(我可能错了)。我想用苹果已经提供的东西来做到这一点。或者也许使用金属着色器。

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

【问题讨论】:

  • 看看 Apple 是否支持 ARKit/SceneKit 中的遮挡会很有趣。到目前为止,我看到的 SceneKit 数量有限,似乎没有?遮挡数学很复杂
  • 你能链接到这些例子吗?

标签: swift scenekit arkit


【解决方案1】:

是的,绝对可以在 iOS 和 macOS 应用程序中使用 3D 对象作为保留蒙版,也就是 Occlusion Material。一个名为.colorBufferWriteMask 的实例属性实际上在渲染材质时会写入深度通道信息。因此,您需要此属性的以下值来屏蔽对象:

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

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

sphere.renderingOrder = -50  

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2019-03-01
    • 2015-02-16
    相关资源
    最近更新 更多