ARKit和SceneKit中的Blackhole着色器或支持着色器

use*_*553 5 augmented-reality ios scenekit swift arkit

我已经看到了ARKit的一些示例演示,其中材料A阻止了材料B,产生了遮挡效果,或者出现了黑洞或遮罩。但是它们似乎都在使用Unity引擎(我可能错了)。我想使用Apple已经提供的功能来做到这一点。或者使用Metal Shader。

想知道是否有人知道有一个技巧可以使ARKit甚至用SceneKit术语实现,当2个对象重叠但希望一个对象遮挡另一个对象,而使另一个对象为空时。CSG不可能正确,因为那太贵了吗?

谢谢!

ARG*_*Geo 6

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

sphere.geometry?.firstMaterial?.colorBufferWriteMask = []
Run Code Online (Sandbox Code Playgroud)

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

sphere.renderingOrder = -50  
Run Code Online (Sandbox Code Playgroud)

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

sphere.geometry?.firstMaterial?.writesToDepthBuffer = true
sphere.geometry?.firstMaterial?.readsFromDepthBuffer = true
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明