EasyAR 3D 物体跟踪

功能简介

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

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

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

Key

你需要使用 basic + Pro(trail) key 试用这个功能,或者使用 basic + Pro key 进行发布。可以参考 使用哪个 Key ? 中的描述。

如何获得 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/image13.png ../_images/image14.png

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

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

    ../_images/image13.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 SDK Samples

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

请注意,你需要使用 basic + Pro(trail) key 试用这个功能,或者使用 basic + Pro key 进行发布。可以参考 使用哪个 Key ? 中的描述。

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

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

使用 EasyAR SDK Packages

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

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

API 参考

Unity 插件参考

使用3D object tracking功能需要 ObjectTarget

ObjectTarget 节点下的物体Rotation 需要设成,

X: 90
y: 180
z: 0
../_images/image841.png ../_images/image851.png ../_images/image861.png

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

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