Не отбрасывайте тени на определенные объекты - PullRequest
0 голосов
/ 17 октября 2018

У меня есть сцена с 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.Можно ли это как-то сделать?

...