Некоторое время я смотрю вокруг, чтобы найти ответы на свои вопросы, но не могу найти ничего, что действительно помогает или объясняет, что происходит.Я также снова и снова проверял все, что нашел в SO, но не смог найти ответ.
Проблема возникает постоянно при отображении объектов в мире AR.Я помещаю объект на самолет на полу, который является моей невидимой плоскостью теней.Тогда все зависит от угла обзора с устройства.Для пояснения я добавил к изображениям, у которых просто немного другой угол обзора.Посмотрите, что происходит с тенями:
![enter image description here](https://i.stack.imgur.com/K62D5.jpg)
Я хотел бы иметь хорошую тень все время, а не такие артефакты, как вы можете видеть.
Примечание. Я уже поиграл, используя shadowSampleCount , смещение и все другие параметры, которые должны помочь получить правильную тень с низкой стоимостью рендеринга.
Вот выдержка из соответствующего кода для освещения и плоскости, материала и т. Д.
для SCNLight :
class func directionalLight() -> SCNLight {
let light = SCNLight()
light.type = .directional
light.castsShadow = true
light.color = UIColor.white
light.shadowMode = .deferred
light.shadowSampleCount = 8
light.shadowRadius = 1
// light.automaticallyAdjustsShadowProjection = false
light.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.75)
light.categoryBitMask = -1
return light
}
и того, как я его добавляю:
func setupLights() {
lightDirectionNode.light = Lighting.directionalLight()
// lightDirectionNode.eulerAngles = SCNVector3(-66.degreesToRadians, 0, 0)
lightDirectionNode.eulerAngles = SCNVector3(0, 90.degreesToRadians, 45.degreesToRadians)
sceneView.scene.rootNode.addChildNode(lightDirectionNode)
}
Для SCNPlane :
class func shadowPlane() -> SCNNode {
let objectShape = SCNPlane(width: 200, height: 200)
objectShape.heightSegmentCount = 2
objectShape.widthSegmentCount = 2
objectShape.cornerRadius = 100
objectShape.cornerSegmentCount = 16
let objectNode = SCNNode(geometry: objectShape)
objectNode.geometry?.firstMaterial?.diffuse.contents = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
objectNode.geometry?.firstMaterial?.colorBufferWriteMask = SCNColorMask(rawValue: 0)
objectNode.physicsBody = Physics.floorPhysicsBody(shape: objectShape)
objectNode.name = "floor"
objectNode.renderingOrder = -10 // renderingOrder // 0
return objectNode
}
и как мне его добавить:
func setupShadowPlane() {
let shadowPlane = NodeFactory.shadowPlane()
// Set the Node's properties
shadowPlane.position = SCNVector3(x: (focusSquare.lastPosition?.x)!, y: (focusSquare.lastPosition?.y)!, z: (focusSquare.lastPosition?.z)!)
shadowPlane.eulerAngles = SCNVector3(-90.degreesToRadians, 0.0, 0.0)
sceneView.scene.rootNode.addChildNode(shadowPlane)
}
Что я делаю не так?Кто-нибудь может помочь?