Getting Started with ARToolKit for Unity

Getting Started with ARToolKit for Unity

安装

  ARToolKit for Unity 以Unity package的方式发布。Package是一个包含了所有可以导入并解包到你的Unity项目的文件的打包文档。像前面说的一样,这个package包含了将ARToolkit 与你的Unity 项目集成到一起所需的所有插件,脚本和资源文件。
  
  ARToolKit for Unity package可以在ARToolKit网站上下载到。将其下载并存储到你的机器上。
  
  你可以将这个package导入到一个全新或是已经存在的项目中。选择菜单栏中的 Assets -> Import Package -> Custom Package… 然后在对话框中找到存储在你硬盘上的ARToolKit package。选择这个package,Unity会询问你是否要导入这个package。这一步就简单的选择导入全部文件即可。
  
  Getting Started with ARToolKit for Unity_第1张图片
  Getting Started with ARToolKit for Unity_第2张图片
  
  你的Unity项目现在就包含了ARToolKit中所有的必须文件了。

Package 预览

这个package中包括以下内容:

  • Unity 脚本:一个用来处理Unity与原生插件之间信息交流的C#脚本集。这些就是开发者们用来获取ARToolKit功能的脚本。它们都包含在ARToolKit5-Unity.dll 这个文件中。

  • Unity Editor 脚本:另外一个C#脚本集,它扩展了Unity Editor本身的编辑界面,制订了专用的属性编辑面板和3D 线框指示器(Gizmos)。这些脚本包含在Editor/ARToolKit5-UnityEditor这个文件中。

  • ARToolKit 插件:原生插件的实现。对于不同平台有不同的版本支持, 比如Windows,Mac OS X,Android 和 iOS。这些都存储在 Assets/Plugins 目录及其子目录下。

  • ARToolKit 数据文件: 在Resources/ardata 目录下存储了默认的摄像头校准文件以及两个特征图像样本。在 Assets/StreamingAssets 目录下存储了一个NFT模式的样本。

  • Android Activity: 一个自定义化的Android平台的Unity Player版本。(已经打包为jar格式)同时也需要一个自定义的 Manifest.xml 文件, 以及一些存储在“res” 子目录下的Android的资源文件。

  • 简单样例: 目录中存储了一系列十分基本的样例场景,你可以使用这些场景作为不同AR技术学习的起点。

Getting Started with ARToolKit for Unity_第3张图片

场景构建

   ARToolKit 允许在Unity中构建拥有多于一个特征图像的动态场景。所有的特征图像匹配内容(指的是扫描到特征图像会出现的虚拟内容)可以处于同一个Layer中,而且附加在不同特征图像上的内容之间的关系(例如物理关系)是十分直观易懂的。下面三个Component一起合作可以创建一个简单的AR场景:

  • ARController - 管理ARToolKit总体程序的初始化,预处理,运行和结束。只能存在一个。

  • AROrigin - 表示ARToolKit世界的中心点,也是整个场景的根节点。通常放置在{0, 0, 0}的坐标上。

  • ARTrackedObject - 代表了在当前场景中正在跟踪的特征图像,所有和这个特征图像有关的虚拟内容将以它为父物体。

  • ARCamera - 将Unity的Camera与AR内容联系到一起。允许这些AR内容被渲染。

1 - ARController

  在Scene中创造一个Object来附加AR配置物体,ARController和ARMarker。在那些样例项目中,我们已经将其命名为“ARToolKit”。将一个ARController脚本拖动放置到这个物体上。
  
Getting Started with ARToolKit for Unity_第4张图片

  这个ARController 脚本将会处理创建并管理AR跟踪,也包括背景图像。开发者所需要提供的仅仅是一个用来显示背景影像的Layer,通常来说是”user layer 1”, 也许你会偏向于将其重命名为”AR Background”或类似的名字。在Unity中Layer的作用是将Scene中的物体分成几部分,一个摄像机只能看到对应的某些Layer中的物体。因此,背景影像将独立存在于代表背景的Layer中。你现在可以花一点时间再去定义一个名为”AR Foreground”的Layer。这将是你放置所有marker对应虚拟物体的Layer。
  
Getting Started with ARToolKit for Unity_第5张图片
  你现在应该可以运行这个Scene并看到摄像头捕捉的动态影像了。开发者可以参考显示输出的横纵比来选择输入影像的横纵比。如果它们并不匹配,比如4:3的输入影像在16:10的屏幕上显示,那么开发者可以选择拉伸输入视频(这将产生画面扭曲失真)或是使用更少的显示屏(这将产生屏幕两侧的黑边)。产生的屏幕黑边将使用场景内Camera的Background属性的颜色填充。

  • Fill screen:尽可能的拉伸渲染图像并会产生失真。

  • Maintain video aspect ratio (bars):不会失真,但在输入影像比显示器更接近正方形时会在两侧出现黑边,在显示器比输入影像更接近正方形时会在顶端和底部出现黑边。

  • Maintain video aspect ratio (overfill screen):由于Unity不允许视口边框超出屏幕边缘,所以这个模式暂时不可使用。这个问题将在下一次更新中得到解决。

2 - ARMarkers

  特征图像的跟踪需要使用到Marker,所以将你想跟踪的所有Marker全部拖动到场景里。设置这些Marker,并确保将它们的Tag设置为一些便于记忆的值,这将用来在动态场景中用来找到并获取它们的数据。

Template Markers

  ARMarker脚本会自动的找到放置在当前项目中Resources/ardata/markers 目录下的那些Template Marker。默认情况下,安装了ARToolKit后这个目录下会包括标准的Hiro和Kanji两个图案数据。这些数据都会在脚本中Marker这个属性的下拉菜单中找到。选择你想跟踪的图案,并给这个ARMarker一个tag值(在你的项目中这个值必须是唯一的)。

NFT Markers

  NFT Marker可以通过在ARMarker component 的marker type属性中选择”NFT” 来使用。这样做将会在属性面板上出现一个名为dataset 的输入区域。所有用genTexData 工具生成的NFT数据(.iset, .fset和 .fset2)都要放到你的Unity项目中Assets/StreamingAssets 目录下才可以使用。

  这个SDK中包含了一个样例dataset(文件名:gibraltar.iset, gibraltar.fset, gibraltar.fset2)。 可以把这个样例NFT dataset 的名字输入到NFT dataset name 属性中(这里输入gibraltar)。

3 - AROrigin

  下一步将决定你的AR场景中哪一点作为整体图像的基点(root)。AR场景中所有的动态内容都将作为这个基点的子物体(child)存在,而且这个基点的坐标将作为AR计算的原点(origin)。通常来说,它会是你的场景中处于最高层级(在Unity中的hierarchy中不存在任何Parent)的Empty GameObject,但它也可以是任何GameObject。在样例中,这个物体被命名为”Scene root”。 将一个AROrigin 脚本附加到这个物体上。将这个物体以及它的所有子物体放到另外一个Layer上,例如创建一个名为”AR foreground”的Layer,将对后面的开发十分有利。

4 - ARTrackedObjects

  现在,在你上一步中设置的基点物体下方创建一个子物体。这个物体将承载第一个AR marker 的对应AR 内容,所以你可以将其命名为”Marker Scene 1”之类的名字。给它附加一个ARTrackedObject 脚本, 并将其中的Tag 属性对应地改为之前在ARMarker那一步中设置的值。这样就将ARTrackedObject 与ARMarker 链接了起来。在程序运行时,这个物体的子物体将会与marker进行坐标和旋转的同步,而且这些子物体的显示与隐藏也取决于marker 是否已找到。请确保每一个ARTrackedObject 都有一个AROrigin 脚本附加在它的父物体上,否则附加在它上的任何物体永久不会显示。

5 - ARCamera

  在你想看到AR内容之前要做的最后一件事就是配置Unity 的Camera 物体。它必须是AR场景基点物体的子物体。在它的culling mask 属性中选择正确的Layer(选中前面提到的”AR Foreground”,不要选中”AR Background”)。将ARCamera 脚本附加到这个Camera 物体上。

Testing and Adding Content

  现在你再次运行你的场景。尽管没有任何内容展现在marker上,不过你应该注意到了控制台中显示了marker被找到或丢失的提示信息。
  
  首先从你想提升的ARTrackedObject 开始。它将作为marker 对应显示的AR子场景的父物体。在默认情况下,所有的marker 在场景中初始是垂直的状态。然而多数情况下,你希望这些marker平躺在地面上,这也正是我们现在要做的。在你选定的ARTrackedObject下创建一个子GameObject,并在Inpector中将它Rotation的X值改为90。这将使它所有的子物体关于X轴旋转90度(在左手系中),在ARCamera 中就可以正常显示了。
  
Getting Started with ARToolKit for Unity_第6张图片

  给旋转过的GameObject 附加一个cube。这样就完成了一个基本场景。将这个cube 的scale 属性设置为{0.08, 0.08, 0.08},position属性设置为{0, 0.04, 0},这样就可以将它正确的放置到marker 的位置上了。
  
  选择你刚刚创建的所有内容并确保它们都存在于前面几步创建的前景Layer上(更改Layer时可以选择应用到所有children)。
  
  再次点击”Play”,这时候你应该就可以看到marker 上的cube 了。恭喜你走出了第一步!

说明

所需的数据文件

  在一个标准的ARToolKit应用中,通常需要几种数据文件,如摄像头校准文件和Marker数据文件。在Unity平台上工作时,这些文件都包含在项目的Resources/ardata 目录下。为了能够被Unity识别,这些文件的命名必须按照以下规则:

  • 摄像头参数文件:camera_para.dat 应该存储在Resources/ardata/目录下,命名为camera_para.bytes。

  • 图案数据文件应该存储在Resources/ardata/markers 目录下,后缀名为txt(如patt.hiro.txt)。

      这些文件依旧可以使用标准的ARToolKit 工具生成;这些简单的命名方式和放置位置对于Unity插件来说十分重要。

Unity世界中的计量单位

  这个插件的默认操作单位是米。 因此默认的marker 尺寸为0.08(8cm)而且camera 的near clipping plane和far clipping plane属性也分别为0.1(10cm)和5.0(5m)。这些数据都可以在ARController 和ARMarker 的属性中进行修改。

发布说明

  如果你使用了NFT格式的marker,那么在你最终打包之前请确定你的StreamingAssets文件夹中不存在其他无用的数据来防止无意义的存储占用。同样的,如果你使用了传统的Template marker,也建议你将不必要的图案数据全部移除。

下一步

  请查看Scripts in ARToolKit for Unity in Unity和 ARToolKit for Unity Scripting and Low-Level API 来获取更多信息。

你可能感兴趣的:(unity,ar,ARToolKit)