SceneKit и ARKit - мягкие тени или размытые тени - PullRequest
1 голос
/ 20 января 2020

Я установил тень в ARKit, но это неудовлетворительные результаты, нам нужен тот же оттенок, что и для быстрого просмотра в сафари. Пожалуйста, помогите мне, как настроить это. Мы приложили два изображения.

Код

var light = SCNLight()
var lightNode = SCNNode()
light.castsShadow = true
light.automaticallyAdjustsShadowProjection = true
light.maximumShadowDistance = 20.0
light.orthographicScale = 1
light.type = .directional
light.shadowMapSize = CGSize(width: 2048, height: 2048)
light.shadowMode = .deferred
light.shadowSampleCount = 128
light.shadowRadius = 3
light.shadowBias = 32
light.zNear = 1
light.zFar = 1000
light.shadowColor = UIColor.black.withAlphaComponent(0.36)
lightNode.light = light2
lightNode.eulerAngles = SCNVector3(-Float.pi / 2, 0, 0)
self.sceneView.scene.rootNode.addChildNode(lightNode)

enter image description here

Ответы [ 2 ]

1 голос
/ 20 января 2020

Если вам нужны более размытые тени в вашей сцене, используйте большие значения для shadowRadius свойства экземпляра. shadowRadius указывает радиус выборки, используемый для визуализации тени приемника.

Значение по умолчанию: 3,0 .

var shadowRadius: CGFloat { get set }

... в реальном коде это выглядит так:

lightNode.light?.shadowRadius = 20.0

документация Apple говорит :

shadowRadius - это число, которое определяет степень размытия по краям теней, отбрасываемых светом . SceneKit создает тени с мягкими краями, визуализируя силуэты геометрии в 2D-карту теней, а затем используя несколько взвешенных выборок из карты теней, чтобы определить силу тени в каждом пикселе в отрисованной сцене. Это свойство контролирует радиус выборки карты теней. Меньшие числа приводят к теням с четко очерченными пиксельными краями, большие цифры приводят к размытым теням .

Кроме того, используйте прожектор вместо направленного света, потому что первый из них производит красивые и размытые тени.

lightNode.light?.type = .spot

И еще один совет: держите прожектор на расстоянии более 2 метров от модели и присвойте значение 179 градусов spotOuterAngle свойству экземпляра:

lightNode.light?.spotOuterAngle = 179.0    /* default is 45 degrees */

PS

Если вы хотите знать, как использовать размытые тени в RealityKit, прочитайте этот пост .

1 голос
/ 20 января 2020

Укажите смещение тени и увеличьте радиус тени. Поиграйте с этими значениями, чтобы получить желаемый результат.

light.shadowOffset = CGSize(width: 1, height: 1) //controls spread
light.shadowOpacity = 0.5  // controls opacity
light.shadowRadius = 5.0 // controls blur level
...