1. 首页
  2. ARCore

ARCore之路-ARCore Device & Environmental Light

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

ARCore之路-ARCore Device & Environmental Light

一、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。

ARCore之路-ARCore Device & Environmental Light

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

ARCore之路-ARCore Device & Environmental Light
ARCore之路-ARCore Device & Environmental Light

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

ARCore之路-ARCore Device & Environmental Light

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

二、Environmental Light

ARCore之路-ARCore Device & 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主要是为了与之前代码兼容。


David Wang原创ARCore文章

作者:yolon3000

原文:https://blog.csdn.net/yolon3000/article/details/82192785

版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

AR社区交流群:AR社区交流群

QR code