EasyAR 3D 物体跟踪

功能简介

3D Tracking是用于检测和跟踪自然场景中的三维物体。

EasyAR目前可以检测和跟踪有丰富的纹理的三维物体。你仅需要准备好待跟踪物体的3D模型文件,即可创建Tracker,而不需要进行复杂的配置或配准工作。你也不需要将模型或任何数据上传到EasyAR或其他网站上。

../_images/image11.jpg ../_images/image12.jpg

如何获得 OBJ 格式的模型

  • 从现有模型中导出

    使用 3Ds Max 或 Maya 或是其它建模工具,导入现有 FBX 或其他格式的模型,然后导出成 OBJ 格式。

  • 创建全新的模型

    使用 3Ds Max 或 Maya 或是其它建模工具创建 3D 模型并输出为 OBJ 格式。

  • 扫描真实世界中的物体,使用一些3D重建工具生成3D模型

    使用 ReMake 或是其他工具生成模型,导入到建模工具中,然后导出为 OBJ 格式。
    可以选择性地使用3Ds Max 或 Maya等建模工具对模型进行调整。

模型准备

使用3D Tracking的第一步是准备好待跟踪物体的3D模型文件。模型文件必须是Wavefront OBJ格式,且必须包含相应的材质文件、以及至少一张纹理贴图文件。纹理贴图文件必须是JPEG或PNG格式。关于模型文件格式的更多细节,请查阅 3D模型规格说明 。以下是一些模型的例子及反例,供快速参考。

  • 模型应当具有丰富的纹理细节。

    ../_images/image131.png ../_images/image141.png

    第一个物体可以被EasyAR检测和跟踪。EasyAR无法检测和跟踪第二个物体,因为它的纹理太少了。

  • 模型可以有不同的形状。

    ../_images/image131.png ../_images/image15.png

    这两个物体都可以被EasyAR检测和跟踪。

  • 模型文件中不能引用绝对路径。

    ../_images/image311.png ../_images/image321.png

    这个模型无法被加载进入EasyAR的tracker中,因为EasyAR找不到使用了绝对路径的文件。

  • 文件名以及模型文件内部的路径不能有空格。

    ../_images/image311.png ../_images/image331.png
  • 模型文件应该使用 UTF-8 编码格式。

    ../_images/image34.png ../_images/image35.png
  • 模型面的法向量的正向遵循右手准则。

    ../_images/image211.png ../_images/image221.png ../_images/image231.png

    第二个立方体中阴影部分的面片的法向量是负值取向。这种面片在EasyAR中会当成不可见面处理。如果从里面看出去,会发现显示成第三个立方体的样子。模型应当避免一切负值取向的面片。

开始工作

当你把待跟踪物体的3D模型文件准备好以后,在EasyAR中可以像使用图像跟踪功能的图片一样使用这些模型。

参考 EasyAR Sense Samples

可以参考不同平台上的 HelloARObjectTracking 样例。

另外,你可能还希望参考不同平台的 HelloAR 和 HelloARTarget 样例来了解不同的target使用方法。虽然这些样例使用 ImageTarget,但是你可以很容易将他们改成使用 ObjectTarget.

这里是一些关于如何在不同平台上使用 EasyAR Sense sample 的介绍。

使用 EasyAR Sense Packages

你需要使用 EasyAR 2.0 或之后版本的 Pro 版本。

这里是一些关于如何在不同平台上使用 EasyAR Sense packages 的介绍。

API 参考

Unity 插件参考

3D模型规格说明

支持的文件格式

  • Wavefront obj格式(.obj)

模型文件最低要求

  • 一个3D模型应该包括一个OBJ (.obj)文件以及相应的MTL (.mtl)文件和纹理贴图文件,并放在同一个目录下;

  • 纹理贴图文件支持.jpg和.png格式;

  • 文件名以及文件内部的路径不能有空格;

  • 文件应使用 UTF-8 格式编码;

OBJ (.obj)文件最低要求

  • 几何顶点(vertex),用(x, y, z [, w])坐标表示,w为可选项,默认为1.0。顶点的色彩参数不是必须的,如果提供了色彩参数系统并不会加载;

  • 纹理坐标(texture coordinates),用(u, v [,w])坐标表示,w为可选项,默认为0。通常情况下,u和v的取值应该是在0至1之间。对于小于0或者大于1的情形,系统默认会以REPEAT模式进行处理,即坐标的整数部分被忽略,然后构建一个重复的模式;(与OpenGL中的GL_REPEAT处理方式相同)

  • 面元素(face),应当至少包含顶点的索引,以及顶点的纹理坐标的索引。超过3个顶点的多边形(如四边形)面片结构同样支持;

  • 材质文件的引用(mtllib),要求至少指定一个外部MTL材质文件,文件路径必须是相对路径,不能是绝对路径;

  • 模型元素所引用的材质需指定材质名字(usemtl),这个材质名字应当与外部MTL材质文件中定义的材质名字保持一致;

MTL (.mtl)文件最低要求

  • 一个MTL文件中应当定义至少一个材质;

  • 纹理贴图(texture map)是必须的。通常情况下,只需要制定环境光(ambient)或者漫反射(diffuse)的纹理贴图。纹理贴图的路径必须是相对路径,不能是绝对路径;

  • 纹理贴图的其他可选参数不是必须的,如果提供了系统并不会采用;