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 样例。

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

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

使用 EasyAR Sense Packages

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

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

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)的纹理贴图。纹理贴图的路径必须是相对路径,不能是绝对路径;

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