Notifications
Article
使用Unity ARFoundation在增强现实中看到模型
Updated 4 days ago
402
2
本文将教大家如何用Unity将3d模型导入到Android和IOS设备上实时查看。
原博地址:http://virtualxdesign.mit.edu/blog/2019/6/22/viewing-your-models-in-ar
发布日期:2019年6月22日
本文中,我们会介绍如何把3D模型导入Unity,然后使用Android设备或iOS设备在AR中查看模型。虽然这样的操作在过去我们需要用到Vuforia增强现实系统,但由于现在Android和iOS系统都默认支持图像跟踪功能,因此我们也不再需要使用第三方工具包了。Unity直接支持Android的ARCore和iOS的ARKit,但是一个更好的工具选择是:ARFoundation。ARFoundation是一款跨平台开发套件,支持Android和iOS的子系统。ARFoundation可以帮助我们轻松地开发在不同设备上使用的应用。然而在部署应用到iOS或Android设备之前,我们仍需要完成额外的步骤。
本教程结束时,我们会学到在增强现实中放置模型的两种设置:图像跟踪和平面跟踪。图像跟踪允许我们指定放置模型的目标图像。我们会打印出目标图像,相关的应用会寻找和放置模型到该图像上。而平面跟踪模式,我们会把模型放置到现实平面中。我们可以在该模式下缩放和旋转模型,下面是二种方法的效果:

教程目录:

  1. 前提条件
  2. 设置Unity项目
  3. iOS的构建过程
  4. Android系统的构建过程
  5. 导入和准备3D模型
  6. 使用图像跟踪模板
  7. 使用平面跟踪模板

下面有一些面向新手的学习资源,可以学习关于Unity,ARCore和ARKit的基础概念:
  • Learning Unity
  • Google ARCore
  • Apple ARKit
虽然学习本教程不必了解关于这些软件包的细节信息,但是这些学习资源可以方便你熟悉相关内容。

第一步,我们要按照前提条件部分的步骤,安装必要的软件:

前提条件

1. 下载并安装Unity Hub。此时会需要创建Unity用户账号。
2. 启动Unity Hub。依次点击Install > Add,从列表选择Unity 2019.1.f7版本。备注:建议不要安装结尾带有“a”或“b”的预览版本,因为我们无法确保它们的兼容性。
3. 在安装界面勾选Android Build Support或iOS Build Support。对于Android系统,要点开Android Build Support旁边的小箭头,勾选Android SDK and NDK Tools选项。这样做可以跳过第四步。

4. Android系统的可选步骤:下载并安装Android Studio。在必要时,我们会使用Android Studio下载最新版Android SDK。备注:建议使用Unity安装Android SDK和NDK,更简单。安装Android Studio可以在电脑上提供Android开发环境,方便实现高级用例。
5. 对于iOS系统,从App Store下载最新版XCode即可。

设置Unity项目

本教程使用Unity ARFoundation示例项目中的两个示例场景。使用模板可以简化编辑操作,从而快速在场景放置和查看模型。
1. 从https://github.com/virtualxdesign/artemplate 下载模板文件,单击Download as Zip即可,下载完成后解压Zip压缩文件。或者在下方下载。👇
2. 启动Unity Hub。依次点击Projects > ADD选择解压的文件夹位置,这样可以把项目添加到Projects列表,最好在电脑安装和项目完全一致的Unity版本,即Unity 2019.1.f7。
3. 如果使用更新的版本,例如:Unity 2019.1.f8,我们会在项目下方看到橙色的感叹号符号。不必担心,只要使用的是更新的版本,所有功能都会如期工作。在下拉菜单选择Unity版本,然后双击打开项目。
现在项目窗口打开了。项目中的ARFoundation应该已经是启用状态,如果没有启用的话,我们也可以手动启用。依次点击Window > Package Manager,打开资源包管理器窗口。该窗口显示Unity项目的所有可用扩展资源包。我们应该会看到AR FoundationArCore XR PluginARKit Face TrackingARKit XR插件已经安装。这些插件名称旁边可能会有一个向下的箭头,表示插件有更新的版本。请不要更新这些插件。如果已经有以下版本号的插件,所有内容都已经设置完成。如果这些资源包没有安装好,请逐个选择这些资源包,从下拉列表选择以下版本,然后单击Install按钮。
  • Ar Foundation -> preview.3 - 2.1.0
  • ArCore XR Plugin -> preview.5 - 2.1.0
  • ArKit XR Plugin -> preview.5 - 2.1.0
  • ArKit Face Tracking -> preview.6 - 1.0.0
4. 切换构建目标为Android或iOS。选择File > Build Settings,我们应该为构建版本选择正确的环境,从左侧列表中,选择Android或iOS,此时可以在底部看到Switch Platform按钮。单击该按钮。转换项目到对应平台需要一些时间,此时不要关闭该窗口。单击左下角的Player Settings,这样会打开带有平台专用设置的窗口。模板应该已经有正确的设置,但我们仍要改变项目的资源包名称。
5. 在Player Settings中,找到Identification部分。按自己喜好修改把资源包名称改成自己想要的。该名称的格式应该为com.packagename.projectname,例如:模板设置的名称为com.virtualxdesign.artemplate。把名称改为com.virtualxdesign.yourprojectname,这样让应用可以有独特的标识符。

现在查看Unity项目文件。在打开场景时,我们会看到类似下图的窗口。
左侧是层级窗口。我们会使用该窗口把模型放到场景中。我们可以把对象放到其它对象之中。我们注意到,在对象中有子对象时,对象名称旁边会有一个小箭头。中间的视图是3D场景视图。类似其它3D建模软件,我们可以在这个窗口中选择,移动,旋转和缩放对象。对于图像跟踪,我们不会使用该窗口。右侧是检视窗口。该窗口可以查看和编辑游戏对象的细节。底部是项目窗口目录,这里列出了所有项目文件,我们会把模型文件放到这里。
现在打开图形跟踪示例。在项目窗口中,打开Scenes/ImageTracking/ImageTracking.Unity。这样会出现我们的第一个模板场景。
我们可以在该场景放置模型到目标图像上,例如:放到明信片或海报上。我们使用默认设置在该场景测试了我们的设置内容。你不必修改任何内容,我们会构建应用,然后传输到设备,查看应用是否可以运行。此时,所有内容应该都准备好了,除了平台专用部分。
在之后的部分,我们会分别介绍在Android设备和iOS设备上运行的准备步骤,请根据自己的设备执行相应的步骤。

iOS的构建过程

为iOS系统构建Unity项目会有一些步骤略复杂。我们在下方提供了Unity官方教程,用于在iOS应用测试自己的应用。请跟随下方链接的指示,准备好编辑内容。我们需要的东西有:
  • 安装iOS 11及更高版本系统的iPhone等iOS设备。
  • 最新版XCode。
  • Apple账号。

备注:下面的教程使用了示例应用。因为我们会使用提供的模板,所以不需要使用该示例。而且我们有一些和教程相同的步骤,请不要重复这些步骤。在学习官方教程时,请注意下面二点:
  • 跳过“Setting up the Simple Mobile Placeholder project(《Simple Mobile Placeholder》工程设置)”部分
  • 跳过“Preparing your Unity project for building to iOS(Unity项目的iOS构建准备工作)”部分

记住这些内容后,请跟随链接中的教程进行学习:构建为在iOS设备上进行测试的Unity项目。
完成以下步骤后,我们的应用应该会如期安装到设备上。启动应用,把摄像头对准ImageTracking>Images文件夹下的图像(按照此路径打开图像)。此时应该会看到,模板里的模型(城堡)出现在图像上。这里可以直接跳到本教程中的“导入和准备3D模型”部分。
(可选步骤)根据Scenes/PlaneTracking.Unity路径打开平面跟踪示例项目。构建并运行该项目。应用运行时,围绕水平面移动摄像头。我们会看到网格出现。在网格上单击,模型会出现在网格上。我们可以使用滑块移动、缩放和旋转模型。

Android系统的构建过程

面向Android系统构建项目的过程相对简单一些。我们需要的Android设备至少要安装Android 7.0版本。
  1. 我们要在设备上启用开发者模式。在设备上打开Settings> About Phone(设置 > 关于手机),找到Build Number(版本号)。点按7次版本号,此时应该看到提示已经进入开发者模式。这样可以在手机上启用Developer Options(开发者选项)。备注:括号内为Android系统中对应中文界面的名称,参考Android Develops网站:https://developer.android.google.cn/studio/debug/dev-options。
  2. 启用开发者模式后,打开Settings > System > Advanced > Developer Options(设置 > 系统 > 高级 > 开发者选项)。备注:根据设备不同,开发者选项的位置可能有所区别。如果无法找到自己设备的开发者选项,请在网上搜索相关信息。
  3. 在开发者选项中,找到并启用USB Debugging(USB调试)。这允许我们从Unity把应用传输到Android设备。
  4. 把Android设备连接到电脑。我们的设备应该会提示“Trust this computer”(信任此电脑),点击“Always Trust”(总是信任),然后确认。如果不选择信任此电脑,电脑将无法把应用传输到手机上。
  5. 现在我们已经准备好构建应用。打开Build Settings构建设置,此时应该已经选中Android平台,找到Run Device设置,单击Refresh按钮。在下拉列表中,找到并选中自己的设备名称。这样会使自己的设备成为构建目标。
  6. 单击Build and Run。Unity会请求在处理前把应用保存在电脑上。使用默认位置即可。命名应用的名称,然后保存,构建过程应该就开始了。
  7. 现在应用应该已经加载到手机上,它会自动启动。把手机摄像头对准Scenes/ImageTracking/Images文件夹下的一幅图像。我们可以在电脑上找到并打开图像文件。然后应该会看到图像上出现了城堡模型。在下个部分,我们会了解如何把自己的模型导入项目。
  8. (可选步骤)根据Scenes/PlaneTracking.Unity路径打开平面跟踪示例场景。构建并运行应用。在应用运行时,围绕水平面移动摄像头。我们会看到有网格出现。在网格上单击,模型应该会出现在网格上。我们可以使用滑块移动、缩放和旋转网格。

导入和准备3D模型

如果拥有通过摄影制图法获得的OBJ文件或FBX文件,在导出模型时,应该把轴心点设为(0,0,0),把上方向设为Y轴。这样在3D建模软件中进行模型准备,比在之后导入Unity再进行设置要方便得多。如果模型的轴心点或朝向设置不正确,我们需要在Unity中进行调整。
3D摄影制图法模型有逼真的纹理和自然的环境光照。因此,我们最好不要对它们应用额外的光照,而是使用Unlit材质。请按照下列步骤,导入和应用Unlit着色器。
1. 把OBJ,MTL和JPG文件拖入Unity的项目窗口目录中。我们可以在3DModels文件夹下创建新文件夹,把模型文件放到该文件夹中。
2. 单击OBJ文件。在检视窗口中,单击Extract Materials,使用已选中的文件夹。这样会让Unity在同一目录下生成可以编辑的材质资源
3. 单击新建的材质资源。在检视窗口中,单击Shader下拉菜单,输入Unlit,单击选择Unlit (Mobile/Unlit) shader
4. 现在,我们要把自己的模型放到模板场景中。为此,我们提供了模板预制件,方便正确地放置和缩放模型。在项目窗口中,打开3DModels文件夹,里面有TrackedModel.prefab预制件。双击打开该预制件。
5. TrackedModel预制件已经放入图像跟踪平面跟踪的示例场景中。在修改该预制件时,二个示例场景都会进行更新。因此,我们只需要把模型放到该预制件中即可。
6. 把模型拖到该预制件中。请把模型添加为TrackedModel预制件的子对象
7. 现在我们在同一预制件中有城堡参考模型和自己的模型。我们之后要删除原来的城堡模型,首先我们需要确保自己的模型有正确的位置和朝向。在放置自己的模型时,使用城堡模型作为参考。
8. 把自己的模型放到TrackedModel预制件之下,我们可能会不小心把它错放到castle子对象下。如果发生这种情况,我们的模型可能会使用错误的缩放,位置和角度参数,从而完全离开屏幕外。我们可以使用检视窗口和3D工具来找到模型,把它移动到原来的位置。
重要提醒:在编辑Transform组件时,请确保选中的是自己的模型,而不是TrackedModel预制件。如果移动或缩放TrackedModel预制件,我们会破坏示例场景。在单击TrackedModel即根对象时,我们会看到下面的参数:
9. 移动、缩放和旋转模型,使模型处在城堡模型中间。它们应该在底部对齐。最后删除城堡模型,单击返回箭头回到主场景。
10. 我们的模型已经准备好了。现在可以打开示例场景,单击Build and Run来体验自己的应用。按照下一部分,向图像目标添加自己的图像。

使用图像跟踪模板

我们提供了图像目标的示例文件。你也可以创建和使用自己的图像目标。
找到合适的目标图像。通常,我们应该使用带有鲜明特征的复杂图像。带有少量或重复特征的图像并不适合使用。查看我们提供的示例图片,你可以更好了解自己的目标图像特点。你也可以查看下方链接,里面提供了挑选正确目标的技巧方法。https://developers.google.com/ar/develop/java/augmented-images/
在项目窗口中,打开Scenes/ImageTraking/Images文件夹,把目标图像文件(.jpg或.png文件)拖到该目录中。
单击ReferenceImagesLibrary.asset,在检视窗口中,我们会看到一组图像添加到目标图像列表。该列表中的所有图像都可以在运行时捕捉到,在列表下单击Add Image
此时会添加新的参考图像。把自己的图像拖到新的参考图像上。它会把图像添加到该列表中。
在Specify Size部分下,输入目标图像在现实世界中的大小,以米为单位。
现在大功告成。构建Image Tracking示例场景时,我们会看到应用能够识别目标图像,并在图像上方放置模型。我们可以尝试不同的图像和大小。

使用平面检测模板

我们也可以使用Plane Tracking示例场景。Plane Tracking示例场景拥有UI,让用户把模型放到任何水平面上。我们可以使用滑块移动、缩放和旋转模型。
在项目窗口中,打开Scenes文件夹。点击Plane Tracking,所有内容应该都已经设置好了。根据Android设备或iOS设备特定步骤,构建并运行应用。
别忘了点按平面来放置模型。在手机识别到平面时,我们会看到平面上出现网格。我们可以把模型放到识别的网格上。

开发过程中遇到问题?在这里提问:connect.unity.com/g/discussion
Unity China
664
Comments
xunshu li
Staff
4 days ago
诸葛瑞达请问摄影制图法可以介绍一下吗?想了解一下!
有的,connect app右上角🔍搜索“摄影制图法”
0
诸葛瑞达
4 days ago
HALO光晕团队负责人
请问摄影制图法可以介绍一下吗?想了解一下!
2