SceneKit - 让模型自适应真实环境光照的正确姿势

2018-09-11  本文已影响158人  酷走天涯

本节学习目标

1.如何检测到真实环境中光照的亮度值
2.如何让游戏场景中的光照匹配这个真实光照

效果如下


gif6.gif

我们认识一下ARSCNViewDelegate 它是继承SCNSceneRendererDelegate, ARSessionObserver

那我们本节的第一个问题 如何检测到真实环境的光照值呢,就是在SCNSceneRendererDelegate 这个协议里

func session(_ session: ARSession, didUpdate frame: ARFrame) {
       // 环境光照的强度  强度低于2000
      frame.lightEstimate?.ambientIntensity
      // 环境色温?取值在6000左右
      frame.lightEstimate?.ambientColorTemperature
}

名词解释

环境色温:色温是指绝对黑体从绝对温度(-273℃)开始加温后所呈现的颜色

以上真实环境光照的值需要根据实际项目的需要进行测量,下面问题来了怎么开启环境光照评估呢?

    // 第一步 设置代理
     sceneView.delegate = self  
    let configuration = ARWorldTrackingConfiguration()
    // 第二 开启光照评估
    configuration.isLightEstimationEnabled = true
    sceneView.session.run(configuration)

完成上面两步就能检测到真实的光源了信息

下面我们开始第二问题 .如何让游戏场景中的光照匹配这个真实光照

首先先关闭自动更新灯光选项,不启用默认的灯光

 sceneView.automaticallyUpdatesLighting = false
 sceneView.autoenablesDefaultLighting = false

第二步 自定义灯光 亲测环境光类型没有效果,我们改用方向光代替,上下各加一个方向光

    // 方向朝下的方向光
    directional1.light = SCNLight()
    directional1.light?.type = .ambient
    directional1.light?.intensity = 65
    directional1.light?.zNear = 0
    directional1.position = SCNVector3Make(0, 0, 30)
    directional1.rotation = SCNVector4Make(-1, 0, 0, Float.pi/2.0);
    sceneView.scene.rootNode.addChildNode(directional1)
    // 方向朝上的方向光
    directional2.light = SCNLight()
    directional2.light?.type = .directional
    directional2.light?.zNear = 0
    directional2.position = SCNVector3Make(0, 0, 30)
    directional2.rotation = SCNVector4Make(1, 0, 0, Float.pi/2.0);
    sceneView.scene.rootNode.addChildNode(directional2)

下面就是根据真实的环境光修改场景中这两个灯光值

    self.directional1.light?.intensity = (frame.lightEstimate?.ambientIntensity)!
    self.directional1.light?.temperature =  (frame.lightEstimate?.ambientColorTemperature)!
    self.directional2.light?.intensity = (frame.lightEstimate?.ambientIntensity)!
    self.directional2.light?.temperature =  (frame.lightEstimate?.ambientColorTemperature)!

分享最前沿的技术,助你成功!

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3i4a1yo68wsg0

上一篇下一篇

猜你喜欢

热点阅读