Как оценить интенсивность и цвет окружающего света по изображению с камеры для приложения дополненной реальности? - PullRequest
0 голосов
/ 05 февраля 2020

ARKit и ARCore имеет функцию оценки интенсивности и цвета окружающего света для реалистичной визуализации c.

ARKit: https://developer.apple.com/documentation/arkit/arlightestimate?language=objc

ARCore: https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/LightEstimate#getColorCorrection (число с плавающей запятой [],% 20int)

Они оба показывают интенсивность окружающей среды и цвет окружающей среды. В ARKit цвет выражается в градусах Кельвина, в то время как в ARCore это коррекция цвета RGB.

Вопрос 1: В чем разница между кельвином и коррекцией цвета и как их можно применять для рендеринга?

Вопрос 2: Какой алгоритм оценки интенсивности света и цвета по кадрам камеры? Есть ли существующий код или исследовательские работы, к которым мы можем обратиться, если мы хотим реализовать их самостоятельно?

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

При условии, что вы добавили легкий узел с именем 'light' с SCNLight, прикрепленным к нему в вашем "ship.scn" SCNScene, и что ваш ViewController соответствует ARSessionDelegate, так что вы можете получить оценку освещенности на кадр :

class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate {

@IBOutlet var sceneView: ARSCNView!

override func viewDidLoad() {
    super.viewDidLoad()
    sceneView.delegate = self
    let scene = SCNScene(named: "art.scnassets/ship.scn")!
    sceneView.scene = scene
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let configuration = ARWorldTrackingConfiguration()
    configuration.isLightEstimationEnabled = true
    sceneView.session.run(configuration)
    sceneView.session.delegate = self
}

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    guard let lightEstimate = frame.lightEstimate,
    let light = sceneView.scene.rootNode.childNode(withName: "light", recursively: false)?.light else {return}
    light.temperature = lightEstimate.ambientColorTemperature
    light.intensity = lightEstimate.ambientIntensity
}

}

В результате, если вы приглушите свет в своей комнате, SceneKit также приглушит виртуальный свет.

ARKit light estimation

1 голос
/ 06 февраля 2020

Вопрос 2 для ARCore: Вот исследовательский документ по Как работает HDR для окружающей среды

Вот краткое резюме HDR для окружающей среды в ARCore + Sceneform

Надеюсь, это поможет вам в вашем поиске:)

...