Unity AR-VR虚拟现实开发基础(第2版)课件 第11章 AR Foundation跨平台实战开发_第1页
Unity AR-VR虚拟现实开发基础(第2版)课件 第11章 AR Foundation跨平台实战开发_第2页
Unity AR-VR虚拟现实开发基础(第2版)课件 第11章 AR Foundation跨平台实战开发_第3页
Unity AR-VR虚拟现实开发基础(第2版)课件 第11章 AR Foundation跨平台实战开发_第4页
Unity AR-VR虚拟现实开发基础(第2版)课件 第11章 AR Foundation跨平台实战开发_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARFoundation简介目录什么是ARFoundationARFoundation有哪些功能特性ARFoundation的构成什么是ARFoundation了方便开发者将设计开发的AR应用快速部署到多个不同的平台,Unity3D推出了ARFoundation工具包。需要注意的是,它的作用是给Unity3D开发者提供了访问特定平台ARSDK的接口,自身并不实现任何AR功能特性。为了在目标设备平台上开发AR应用,我们还需要针对该特定平台的工具包。比如针对苹果的iOSARKit,我们需要ARKitXRPlugin。而针对安卓平台的ARCore,我们需要ARCoreXRPlugin。ARFoundation有哪些功能特性ARFoundation包含了一系列的MonoBehaviour和API,并通过不同设备平台ARSDK的共同作用,以实现以下AR功能特性:1. 世界追踪(Worldtracking):在真实的物理空间中追踪设备的位置和朝向2. 平面检测(Planedetection):检测真实世界中的水平和竖直平面。3. 点云(Pointclouds):也被称为特征点。点云这个概念来自三维重建领域,稍微有点抽象。简单来说,点云指的是通过测量设备(相机或激光扫描仪)获取的物体表面的点数据集合,通常包括三维坐标,颜色信息,激光反射强度等等。通过处理点云信息,我们可以实现对物体的三维重建。4. 锚点(Anchor):设备检测到的任意位置和朝向信息5. 光线估计(Lightestimation):对真实世界的色温和亮度进行估算。6. 环境探头(Environmentprobe):通过生成一个环境反射贴图,来模仿真实物理空间的某个特定区域。7. 面部追踪(Facetracking):检测和跟踪人类的脸部8. 图像追踪(Imagetracking):检测和追踪2D图像。ARFoundation的构成ARFoundation由子系统构成。Unity3D中跟AR相关的子系统由ARSubsystems工具包定义,并使用命名空间UnityEngine.XR.ARSubsystems。每个子系统都用于处理不同的功能特性,举例来说,平面检测需要使用XRPlaneSubsystem。在ARFoundation中有一个提供者(provider)的概念,它用于对某个子系统的具体实现。听起来有点抽象,但其实并不复杂。举例来说,ARCoreXRPlugin资源包就包含了ARCore对多个AR子系统的具体实现。因为不同的provider支持不同的功能特性,因此每个子系统也有一个descriptor(描述器),来说明它支持具体哪一种子系统的特性。举例来说,XRPlaneSubstemDescriptor中的属性就说明了它是否支持水平或垂直平面检测。iOSARKit简介王寒目录什么是ARKitARKit的功能特性ARKit支持的设备平台什么是ARKit什么是ARKit国当地时间2017年6月5日上午9点,苹果全球开发者大会(WWDC2017)在加州SanJose召开。TimCook在iOS10环节宣布推出ARKit,一款全面支持AR增强现实开发的SDK。用Cook自己的话来说,苹果一夜之间成为全球最大的AR开发平台。什么是ARKit目前苹果将ARKit归为iOS的一个Framework(框架),和CoreML(机器学习)、SiriKit、HomeKit、HealthKit等处于同一级别。但目前看来,ARKit和CoreML必将成为iOS平台上最有潜力的两个Framework,甚至有望在日后成就类似iOS和MacOS这样的独立生态系统。当然,前提是苹果推出了和ARKit及CoreML对应的硬件产品,就如同WatchOS对应着AppleWatch,而TVOS则对应着AppleTV一样。在当前阶段,我们暂且将ARKit视作iOS平台中的一个系统框架即可。什么是ARKitARKit的功能特性ARKit集成了设备的运动跟踪、摄像头场景捕捉、先进的场景处理,以共同构建令人惊艳的AR体验效果ARKit的功能特性2020年的WWDC上,ARKIT4又增加了几个新的功能:1.深度API的支持可以通过激光雷达来收集环境相关的信息,并将虚拟的3d网格数据和真实场景融合。2.LocationAnchoring支持在城市、地标和其它地方放置AR体验3.扩展的面部追踪4.增强的动作捕捉功能,可以捕捉人体运动和姿态ARKIT4为2021年即将发布的苹果ARGlass做好了充分准备ARKit的功能特性ARKit的功能特性ARKit的功能特性ARKit的功能特性ARKit的功能特性ARKit支持的设备平台基于苹果一贯的风格,ARKit目前只支持iOS产品,目前是iPhone和iPad。预计在不久的将来ARKit将支持苹果全线硬件设备,包括AppleWatch、AppleTV、Mac电脑,以及传闻中的iGlass。当然,ARKit的强悍功能基于海量的计算,因此目前只支持AppleA9和A10处理器。从硬件设备上来看,目前搭载了AppleA9和A10处理器的只有iPhone6s,iPhone6sPlus,iPhone7,iPhone7Plus,iPadPro和最新一代的iPad。不过让开发者欣慰的是,ARKit除了支持苹果原生的开发,如搭配Metal、SceneKit进行Native开发之外,还支持第三方的游戏引擎,特别是Unity3D和UnrealEngine。ARKit支持的设备平台ARKit支持的设备平台ARCore简介王寒目录什么是ARCoreARCore的功能特性ARCore所支持的设备平台什么是ARCore什么是ARCore2017年6月的WWDC上,苹果推出了面向iOS平台的ARKit。2017年8月,Google很快宣布推出了和ARKit对标的面向安卓平台的ARSDK,名为ARCore。ARCore和ARKit类似,利用丰富的API让安卓智能手机可以感知环境、理解现实世界,并与信息进行交互。ARCore的功能特性ARCore的功能特性ARCore的运动跟踪技术使用手机摄像头标识兴趣点(称为特征点),并跟踪这些点随着时间变化的移动。将这些点的移动与手机惯性传感器的读数组合,ARCore可以在手机移动时确定它的位置和屏幕方向。除了标识关键点外,ARCore还会检测平坦的表面(例如桌子或地面),并估测周围区域的平均光照强度。这些功能共同让ARCore可以构建自己对周围世界的理解。借助ARCore对现实世界的理解,开发者和用户能够以一种与现实世界无缝整合的方式添加物体、注释或其他信息。ARCore的功能特性ARCore支持以下功能特性:1. 运动跟踪当您的手机在现实世界中移动时,ARCore会通过一个名为并行测距与映射(或COM)的过程来理解手机相对于周围世界的位置。ARCore会检测捕获的摄像头图像中的视觉差异特征(称为特征点),并使用这些点来计算其位置变化。这些视觉信息将与设备IMU的惯性测量结果结合,一起用于估测摄像头随着时间推移而相对于周围世界的姿态(位置和方向)。通过将渲染3D内容的虚拟摄像头的姿态与ARCore提供的设备摄像头的姿态对齐,开发者能够从正确的透视角度渲染虚拟内容。渲染的虚拟图像可以叠加到从设备摄像头获取的图像上,让虚拟内容看起来就像现实世界的一部分一样。2. 环境理解ARCore会通过检测特征点和平面来不断改进它对现实世界环境的理解。ARCore可以查找看起来位于常见水平或垂直表面(例如桌子或墙)上的成簇特征点,并让这些表面可以由您的应用用作平面。ARCore也可以确定每个平面的边界,并将该信息提供给您的应用。您可以使用此信息将虚拟物体置于平坦的表面上。由于ARCore使用特征点来检测平面,因此可能无法正确检测像白墙一样没有纹理的平坦表面。ARCore的功能特性3. 光估测ARCore可以检测其环境光线的相关信息,并为您提供给定摄像头图像的平均光强度和色彩校正。此信息让您能够使用与周围环境相同的光照来照亮您的虚拟物体,提升它们的真实感。4. 用户交互ARCore利用命中测试来获取对应于手机屏幕的(x,y)坐标(通过点按或您希望应用支持的任何其他交互提供),并将一条射线投影到摄像头的视野中,返回这条射线贯穿的任何平面或特征点以及交叉位置在现实世界空间中的姿态。这让用户可以选择环境中的物体或者与它们互动。5. 定向点借助定向点,您可以将虚拟物体置于倾斜的表面上。当您执行会返回特征点的命中测试时,ARCore将查看附近的特征点并使用这些特征点估算表面在给定特征点处的角度。然后,ARCore会返回一个将该角度考虑在内的姿态。由于ARCore使用成簇特征点来检测表面的角度,因此可能无法正确检测像白墙一样没有纹理的表面。ARCore的功能特性6. 锚点和可跟踪对象姿态会随着ARCore改进它对自身位置和环境的理解而变化。当您想要放置一个虚拟物体时,您需要定义一个锚点来确保ARCore可以跟踪物体随时间推移的位置。很多时候,您需要基于命中测试返回的姿态创建一个锚点,如用户交互中所述。姿态会发生变化,这就意味着ARCore可能会更新平面和特征点等环境物体随时间推移的位置。平面和特征点是一种特殊类型的物体,称为可跟踪对象。顾名思义,ARCore可以随着时间推移跟踪这些物体。您可以将虚拟物体锚定到特定的可跟踪对象,确保您的虚拟物体与可跟踪对象之间的关系即使在设备移动时也能保持稳定。这意味着,如果您将一个虚拟的Android小雕像放在您的书桌上,即使ARCore稍后调整了与书桌关联的平面的姿态,Android小雕像仍会看起来位于桌子上。7. 增强图像使用增强图像,您可以构建能够响应特定2D图像(如产品包装或电影海报)的AR应用。用户可以在将手机的摄像头对准特定图像时触发AR体验,例如,他们可以将手机的摄像头对准电影海报,使人物弹出,然后引发一个场景。可离线编译图像以创建图像数据库,也可以从设备实时添加单独的图像。注册后,ARCore将检测这些图像、图像边界,然后返回相应的姿态。ARCore的功能特性8. 共享借助ARCoreCloudAnchorAPI,可以创建适用于Android和iOS设备的协作性或多人游戏应用。使用云锚点,一台设备可以将锚点和附近的特征点发送到云端进行托管。可以将这些锚点与同一环境中Android或iOS设备上的其他用户共享。这使应用可以渲染连接到这些锚点的相同3D对象,从而让用户能够同步拥有相同的AR体验。ARCore的功能特性ARCore的功能特性ARCore所支持的设备ARCore所支持的设备ARCore目前支持的设备包括安装了Android7.0或更高版本系统,且安装了ARCoreSDK的安卓智能手机或平板设备。:除此之外,ARCore也支持所有运行iOS11.0或更高版本的ARKit兼容设备。/ar/discover/supported-devicesHello

AR实战项目王寒目录案例描述案例实施案例描述案例描述在这个实战项目中,我们将借助Unity3D的官方模板创建一个简单的HelloAR应用。通过这个小项目,我们会对ARFoundation的使用有初步的认识。因为这个项目需要同时支持ARKit和ARCore,所以部分内容需要Mac系统和Xcode,没有Mac的同学可以只学习其中的Android部分。案例实施案例实施1.下载并打开官方示例项目首先在浏览器中打开页面,/Unity-Technologies/arfoundation-samples点击Cloneordownload按钮,选择DownloadZIP,从而下载官方提供的ARFoundation示例项目。下载完成后将其解压缩到文件夹中案例实施打开UnityHub,点击右上角的ADD按钮,选择我们下载的arfoundation-samples-master目录,从而将该项目添加到UnityHub中。注意,如果TargetPlatform中没有指定平台,我们需要手动设置一个版本。设置完成后,双击项目名称可以在Unity3D中将其打开。案例实施2.下载并导入所需的资源包在编辑器中点击主菜单上的Window-PackageManager,然后在Allpackages中检查ARFoundation,ARSubsystems,ARCoreXRPlugin和ARKitXRPlugin等四个插件是否已安装且升级到了最新的版本。案例实施3.打开SimpleAR场景在Project视图中找到Assets-Scenes-SimpleAR目录下的SimpleAR场景案例实施双击将其打开。可以看到,在其Hiearchy视图中跟AR相关的对象主要是ARSession和ARSessionOrigin。其中ARSession用于启用或关闭AR效果,ARSessionOrigin中有一个ARCamera子对象,用于控制AR的显示。在iOS设备上测试在编辑器中点击主菜单上的File-BuildSettings,在Platform中选择iOS,然后点击右下角的SwitchPlatform,切换到iOS设备的调试设置在iOS设备上测试切换完成后记得在BuildSettings界面上部的ScenesInBuild中勾选Scenes/SimpleAR/SimpleAR在iOS设备上测试完成后点击右下角的BuildAndRun按钮,在弹出的对话框中输入HelloAR作为项目名称,并选择项目的存放地点。此时Unity3D会将当前项目保存为一个iOS项目,并自动在Xcode中将其打开接下来我们需要在Xcode中进行配置。首先从顶部工具栏中选择用于测试的iOS设备接着要配置测试用的证书。点击TARGETS下的Unity-iPhone,切换到Signing&Capabilities面板,然后在Signing下面勾选Automaticallymanagesigning。此时会出现一个弹出对话框,选择EnableAutomatic即可。完成后还需要在Team处选择自己的开发者账户在iOS设备上测试全部设置完成后,点击工具栏顶部的右三角符号即可在设备上进行测试。注意在执行这一步操作前一定要将iPhone或者iPad连接到自己的Mac电脑上。手机上启动应用后首先会请求对相机的使用权限,一定要选择确认,否则AR应用就完全没有作用了。进入应用后,将手机后置摄像头对准桌面或地面等平面,然后点击检测到的平面,就会有一个小方块出现在所触碰的区域。在Android设备中进行测试1.在编辑器中点击主菜单上的File-BuildSettings,在Platform中选择Android,然后点击右下角的SwitchPlatform,切换到Android设备的调试设置2.点击PlayerSettings,更改PackageName和MinimumAPILevel设置完成后在BuildSettings中点击BuildAndRun,就可以在安卓设备上查看运行的效果了。这里再次强调一下,所使用的测试设备一定要事先安装ARCore的相关工具包,否则无法正常运行。AR家居设计项目王寒目录案例描述案例实施案例描述案例描述这个实战项目中,我们将使用ARFoundation创建一个跨平台的AR室内装饰应用。该应用在Unity3D中开发完成后可以同时部署到iOS设备和Android设备中。不过需要注意的是,iOS设备必须支持ARKit,而安卓设备则需要支持ARCore。案例描述案例描述用户可以触碰界面上的按钮选择家具,然后在系统检测到的平面上放置家具。触碰不同按钮,可以选择其它家具,然后接着在平面上放置家具。如果觉得效果不够理想,还可以触碰“重置”按钮。案例实施开始前的准备1.下载并打开官方示例项目首先在浏览器中打开页面,/Unity-Technologies/arfoundation-samples点击Cloneordownload按钮,选择DownloadZIP,从而下载官方提供的ARFoundation示例项目。下载完成后将其解压缩到文件夹中,打开UnityHub,点击右上角的ADD按钮,选择我们下载的arfoundation-samples-master目录,从而将该项目添加到UnityHub中。注意,如果TargetPlatform中没有指定平台,我们需要手动设置一个Unity3D版本。设置完成后,双击项目名称可以在Unity3D中将其打开。2.下载并导入所需的资源包在编辑器中点击主菜单上的Window-PackageManager,然后在Allpackages中检查ARFoundation,ARSubsystems,ARCoreXRPlugin和ARKitXRPlugin等四个插件是否已安装且升级到了最新的版本。此外还需要将本章资源包中的其它资源添加到场景中。创建项目的主场景为了简单起见和避免出现设置错误,这里我们选择对之前的SimpleAR场景进行复制和修改。在Project视图中找到Assets-Scenes-SimpleAR目录下的SimpleAR场景,右键单击,选择Duplicate,从而复制出一个场景,将复制出的场景更名为ARHouseDesign。更改UI界面在默认的SimpleAR场景中,有四个按钮,分别用于重置,重新加载、暂停和继续AR场景。我们可以选择保留这些功能按钮,也可以将其删除或隐藏。这里我们选择隐藏这些场景,仅保留一个ReloadButton。除此之外,我们还需要添加三个按钮,分别用于显示不同的家具类型。在Hierarchy视图中点开Canvas的下三角,选中ResetButton,PauseButton和ResumeButton,然后取消勾选Inspector视图左上角的勾选框,从而让三个按钮在场景中隐藏。选中ReloadButton,使用工具栏上的移动工具将其移动到常见的右上角,并设置锚点为topright更改UI界面接着要在Inspector视图中的OnClick()事件响应部分点击右下角的减号,从而删除当前的响应事件。在Hierarchy视图中右键单击ReloadButton,选择Duplicate三次,从而复制出三个新的按钮,使用移动工具将三个按钮移动到合适的位置。更改每个按钮的文本,分别是VASE,SOFA和TORCHERE,代表花瓶,沙发和地板灯。更改每个按钮的SourceImage,分别对应花瓶、沙发和地板灯的图形。更改UI界面添加处理AR的脚本在Hierarchy视图中选中ARSessionOrigin,可以看到在Inspector视图中关联着多个脚本。添加处理AR的脚本其中ARPlaneManager和ARPointCloudManager分别用于检测平面和管理点云,而ARRaycastManager脚本用于射线检测。最后的PlaceOnPlane用于检测用户的触摸事件,并在检测的平面上根据用户的触摸点放置物体。在PlaceOnPlane脚本组件上当前只有一个参数,也就是PlacedPrefab,我们可以在这里手动更改要放置的3D对象。但是如果想要在程序中动态进行更改,就必须借助脚本的力量了。取消对PlaceOnPlane脚本组建的勾选,因为接下来我们将使用自己创建的脚本来替代该脚本的作用。添加处理AR的脚本在Inspector视图中点击AddComponent,创建一个新的脚本,将其命名为PlaceControllerWithUISelection,双击在VisualStudio中将其打开,更改其中的代码参考PlaceControllerWithUISelection.cs注意事项需要注意的是,因为预设体文件是通过代码自动加载到场景中的,所以几个预设体文件一定要存放在特定的文件目录下。如果这几个预设体没有放置在指定路径下,系统将无法正常加载,也无法将3D物体添加到场景中。设置按钮响应事件在Hierarchy视图中选择Canvas对象的子对象ReloadButton,然后在Inspector视图的OnClick()部分点击加号,设置响应的对象为ARSessionOrigin,设置响应的事件为PlaceControllerWithUISelection.reloadScene接着在Hierarchy视图中选择ARVaseButton对象,在Inspector视图的OnClick()部分,点击加号,设置响应的对象为ARSessionOrigin,设置响应的事件为PlaceControllerWithUISelection.ChangePrefabTo,设置响应参数为vase使用类似的方式为ARTouchereButton和ARSofaButton分别设置响应事件,并设置不同的参数。在iOS设备上进行测试在Unity3D编辑器中点击主菜单上的File-BuildSettings,在Platform中选择iOS,然后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论