Движок SceneKit вычисляет тени немного иначе, чем 3D-приложения, как Maya или 3dsMax.В рамках SceneKit position
и scale
вашего Spotlight, а также его значение cone angle
имеют решающее значение для генерации теней.Основное правило таково: когда площадь луча прожектора в SceneKit становится больше, края тени становятся более неясными (или размытыми).
Вот свойства, которые необходимо учитывать при использовании прожектора:
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light!.type = .spot
lightNode.rotation = SCNVector4(x: 0, y: 0, z: 0, w: 1)
lightNode.castsShadow = true
/* THESE SEVEN SPOTLIGHT PROPERTIES AFFECT SHADOW'S APPEARANCE */
lightNode.position = SCNVector3(0, 10, 0)
lightNode.scale = SCNVector3(7, 7, 7)
lightNode.light?.spotOuterAngle = 120
lightNode.light?.shadowRadius = 10
lightNode.light?.zNear = 0
lightNode.light?.zFar = 1000000
lightNode.light?.shadowSampleCount = 20
lightNode.light?.shadowColor = UIColor(write: 0, alpha: 0.75)
lightNode.light?.shadowMode = .deferred
scene.rootNode.addChildNode(lightNode)
Кроме того, я рекомендую использовать Ambient Light
с очень низким Intensity
для освещения темных областей на ваших 3D-моделях .
Надеюсь, это поможет.