我有一个隐藏的雅克特场景:
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)