У меня есть сцена с 2 огнями - omni
и directional
.Directional
должен действовать как 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
, но и на object2
.Object2
вообще не должен получать это shadow
.Можно ли это как-то сделать?