不要在特定对象上留下阴影

时间:2018-10-17 15:46:23

标签: ios swift scenekit arkit

我有一个有2个灯光的场景-omnidirectionalDirectional被假定为扮演Sun的角色-它应该在地板上投射阴影并在某些物体上发光。

现在我有多个节点,其中一些节点应与太阳光发生反应并从中投射阴影,而另一些节点应被太阳光和阴影完全忽略。

所以对于阳光,我会这样做:

let light         = SCNLight()
light.type        = .directional
light.castsShadow = true
light.shadowMode  = .deferred
light.shadowColor = SunNode.shadowColor
light.color       = SunNode.lightColor
light.automaticallyAdjustsShadowProjection = true
light.categoryBitMask = 1 << 1

好,现在我可以创建将与sun反应的节点:

let node = SCNNode()
...
node.categoryBitMask = 1 << 1

此节点与太阳光线发生反应,并将shadows落在floor上,到目前为止效果很好。

然后我们创建另一个对象,该对象完全不应该与sun反应。

let node2 = SCNNode()
...
node2.categoryBitMask = 1 << 0 // (Just to make it clear that bit mask is different)

这不会在shadows上投放floor,但是object2存在一个问题。如果在object2和太阳之间有object1,则此object1不仅在shadow上而且在floor上投object2Object2根本不会收到此shadow。可以通过某种方式做到吗?

0 个答案:

没有答案