Снимок снимка Scenekit() не включает настройки экспозиции камеры

Я предоставляю функции скриншотов для своего AR-приложения, и я заметил, что сделанные скриншоты (через sceneView.snapshot()) намного темнее, чем то, что я вижу с камеры. Я использую код примера ARKit от Apple, и похоже, что это влияет на него:

camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
camera.maximumExposure = 3

Когда я удаляю настройки экспозиции, моментальный снимок отлично работает. Любой способ убедиться, что снимки учитывают эти настройки экспозиции?

Ответы

Ответ 1

Вы должны учитывать переменную whitePoint, также известную как уровень яркости для использования в качестве верхнего конца кривой отображения тона.

var whitePoint: CGFloat { get set }

При использовании камеры с высоким динамическим диапазоном (HDR) SceneKit применяет процесс, называемый тональным отображением, для преобразования широкого диапазона значений яркости в видимой области в более узкий диапазон значений яркости, которые могут отображаться на дисплее. SceneKit определяет кривую отображения тона из свойств minimumExposure, maximumExposure, exposureOffset и whitePoint, а также меру яркости сцены.

Значение по умолчанию 1.0. Установив это свойство на более высокое или меньшее значение, вы можете производить более плавные или более резкие переходы между тенями и бликами. Это свойство не действует, если значение wantsHDR равно false.

camera.whitePoint = 1.0