ARCore之路-ARCore Device & Environmental Light

  在我们之前的工程里,我们首先是把ARCore的两个Prefabs:ARCore Device 和 Environmental Light 拖到了我们的 Hierarchy窗口中,那么这两个ARCore的Prefabs都是做什么的呢?下面我们来详细了解一下这两个ARCore的Prefabs的作用。

这里写图片描述

一、ARCore Device

  大致的来说,ARCore Device就是用来处理与设备相关的事宜,具体来说就是管理ARCore session。Session 我们前面说过,是用来管理整个AR应用生命周期的,因此,在场景中引入这个Prefab就是引入了ARCore AR应用的生命周期管理功能了。
  在场景加载激活后,此Prefab将创建并初始化一个Arcore session,并从一个跟随设备位置和方向的Unity摄像机渲染出背景图像。因为AR应用必须要有用户手机相机的使用调取权限,如果应用程序在初始化时没有访问相机的权限,则将弹出提示向用户请求相机调取权限。ARCore Device这个Prefab管理了Arcore session,而一个ARCore应用只允许有且只有一个 session,所以ARCore Device在一个场景中只能允许有且只有一个存在,默认情况下,销毁ARCore Device也会破坏 session,如果要在不同的场景中重用相同的 session,保持跟踪状态,则需要游戏对象上调用DontDestroyOnLoad()方法。不然,之前 session中的所有信息都将会丢失,也就是说相当于是重启了应用,重置了 session。

这里写图片描述

  从上图右侧的Inspector中,可以看到ARCore Device包含了一个ARCore Session的脚本。这个脚本需要一个Session Config的ARCoreSessionConfig对象,这是个Session 配置Scriptable对象,这个对象里设置了ARCore的基本配置,其主要属性如下表所示:
这里写图片描述

ARCoreSessionConfig主要属性(默认值)说明
MatchCameraFramerate = truebool类型,用于设置Arcore是否可以在Unity的帧更新中引入延迟,以与摄像机传感器传送帧的速率相匹配(在大多数设备上,这是每秒30帧)。
PlaneFindingMode = DetectedPlaneFindingMode.HorizontalAndVerticalDetectedPlaneFindingMode类型,设置检测的平面类型,可以是单个值,也可以是一个组合值。
EnableLightEstimation = truebool类型, 是否开启光估计,用于光估计渲染。
EnableCloudAnchor = falsebool类型,是否开启云锚点,以便在不同设备间共享锚点数据。
CameraFocusMode = CameraFocusMode.FixedCameraFocusMode类型,选择ARCore相机的对焦模式,默认是固定模式,也可以选择自动模式。
AugmentedImageDatabaseAugmentedImageDatabase类型,是一个用来对检测图像做对比的图像库。

  在上表中,需要特别说明的是MatchCameraFramerate这个配置。启用这个设置可以减少因在同一帧中多次渲染相同的背景纹理而导致的功耗。启用这个设置还会设置QualitySetting.vSyncCount=0,这样,整个Unity应用(包括动画、UI)都将以相机帧速率来进行刷新,这将降低性能消耗,但需要注意的是,启用此设置并不能保证每个Unity帧都有一个新的和唯一的摄像机背景纹理,因为ARCore将会等待一个新的相机帧(当前是 66毫秒) t成为可用才会进行更新以避免死锁。其他的属性等我们用到的时候再进行详细了解。

这里写图片描述

  在ARCore Device下有一个First Person Camera(第一人称摄像机,这个摄像机其实就是模拟的我们的眼睛),这个摄像机下挂载了Tracked Pose Driver 和 ARCore Backgroud Renderer这两个脚本。从名字可以看出,第一个脚本是用来跟踪用户设备状态的,第二个脚本则主要是负责将从相机获取的图像渲染成场景背景。Tracked Pose Driver脚本将跟踪设备的当前位姿值,Tracked Pose Driver 可以跟踪多种类型的设备,包括通用XR设备、通用控制器和通用遥控器,姿态来源可以是RGB相机、HD设备的左右相机等,还可以设置跟踪类型, 是只跟踪位置还是只跟踪旋转或者两者兼之,然后也可以设置更新模式等等。

二、Environmental Light

这里写图片描述

  相比ARCore Device,Environmental Light Prefab只做一件事,那就是通过相机抓取的图形进行分析,设置_GlobalColorCorrection和_GlobalLightEstimation这两个Shader变量以便在Shader中调整虚拟物体的颜色(Shader是GPU上执行的渲染脚本,后面我们会用到)。这两个变量都可以在Shader中使用,_GlobalColorCorrection是在伽马空间中使用归一化像素强度时进行的颜色校正,颜色校正使用了一个RGB缩放因子来控制校正量,这个缩放因子也是通过ARCore对光照进行估计得出来的;_GlobalLightEstimation也是一个全局变量,ARCore会根据当前相机图像来分析并设置这个值,通过这变量来调整虚拟物体的光照。_GlobalColorCorrection与_GlobalLightEstimation的区别是,_GlobalColorCorrection使用了一个RGB缩放因子而_GlobalLightEstimation没有,_GlobalLightEstimation主要是为了与之前代码兼容。

参考文献

1、ARCore Reference ARCore Reference

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_DavidWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值