ARKit——在不可见平面下渲染 3D 对象

ARKit – Rendering a 3D object under an invisible plane

我有一个不可见的 ARKit 场景 SCNPlane:

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

此平面放置在地面上,用于从放置在场景中的其他对象渲染deferred shadows

我想渲染另一个 SCNPlane,它应该与不可见平面处于同一水平(相同的 Z 坐标)。问题是,每次新对象在不可见平面下时,根本不会渲染。

有什么方法可以在不可见平面下渲染物体吗?

You can achieve it using the following lines of code:

shadowsPlane.geometry?.materials.first?.writesToDepthBuffer = true
shadowsPlane.geometry?.materials.first?.readsFromDepthBuffer = true

.colorBufferWriteMask 选择两个实例属性之一:

shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = []

为您的对象设置渲染顺序,例如:

shadowsPlane.renderingOrder = -1   // the nearest layer

当然,使用合适的 .lightingModel 实例 属性:

shadowsPlane.geometry?.materials.first?.lightingModel = .constant 

记住,两个平面之间会有一些微小的气隙:

shadowsPlane.position = SCNVector3(x: 0, y: 0, z: 0)
floorPlane.position = SCNVector3(x: 0, y: -0.01, z: 0)