我有一个隐藏的雅克特场景:

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

此平面放置在地面上,用于从场景中放置的其他对象渲染SCNPlane
我想渲染另一个deferred shadows,它应该与不可见平面处于同一级别(与SCNPlane-坐标相同)。问题是,每当新对象位于不可见平面下时,它根本就不会被渲染。
当物体在不可见的平面下时,有什么方法可以渲染它吗?

最佳答案

您可以使用以下代码行来实现它:

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

.colorBufferWriteMask选择两个实例属性之一:
shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = .alpha
// OR:
shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = SCNColorMask(rawValue: 0)

为对象设置渲染顺序,例如:
shadowsPlane.renderingOrder = -1   // the nearest layer
shadowsPlane.renderingOrder = 100  // the farthest 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)

08-27 00:16