3D物体跟踪总体上是和平面图像跟踪差不多的,设置,包括程序控制,识别多个对象。区别只是目标对象的不同。
总体说明
3D物体跟踪对3D物体的纹理,也就是表面的图案的丰富程度是有要求的,纹理如果是简单的色块组成的效果并不很好。官方对被跟踪的3D物体的详细要求可以查看官方网站的文档
地址:https://help.easyar.cn/EasyAR%20Sense/v4/Guides/EasyAR-3D-Object-Tracking.html
3D物体跟踪主要是ObjectTracker和ObjectTarget这两个游戏对象,每个ObjectTarget对应一个被跟踪的3D物体,场景中也可以同时出现多个ObjectTracker。
ObjectTracker游戏对象相关
- enable属性可以用于获取当前跟踪器状态,也可以用于启用/禁用当前跟踪器。
- Simultaneous Target Number设置指定当前的跟踪器同时跟踪目标的最大数量。
ObejctTarget游戏对象相关
- Tracker设置, 每个ObjectTarget游戏对象必须指定一个ObjectTracker游戏对象才能被跟踪,可以通过修改该设置实现对3D物体的加载和卸载。
- Active Control选项用于设置ObjectTarget游戏对象是否激活。
- Source Type选项用于设置跟踪类型,通常情况下使用Object File即可。
- ObjectTargetController类提供了4个事件,分别是3D物体被识别TargetFound,被识别的3D物体从视野消失TargetLost,3D物体加载完成TargetLoad和3D物体卸载完成TargetUnload。
跟踪3D物体
导入官方示例中的内容。
- 将hexagon.obj、hexagon.mtl、hexagon.jpg文件拖到StreamingAssets目录下,作为跟踪用的内容。
- 将hexagon.obj文件拖到Models目录下,作为识别后显示用的模型。
- 将hexagon.jpg文件拖到Textures目录下,作为模型纹理。
- 将hexagon_hexagonMat.mat文件拖到Materials目录下,作为材质文件,并设置材质的纹理为hexagon.jpg。
- 设置Main Camera游戏对象清除标志Clear Flags为Solid Color。
- 将EasyAR/Prefabs/Composites目录下的EasyAR_ObjectTracker-1_CloudRecognizer-1预制件拖到场景中。
- 将EasyAR/Prefabs/Primitives目录下的ObjectTarget预制件拖到场景中。
- 设置Obj Path属性为hexagon.obj即要跟踪的.obj文件的路径。
- 修改Extra File Paths的Size值为“2”,并添加另外2个文件的路径,即hexagon.mtl和hexagon.jpg。
- 设置Name属性和Scale属性。
Scale属性为模型的缩放比例。其值为模型在空间中的物理大小与在模型坐标系中的大小的比值,默认值为1。
- 将hexagon模型拖到ObjectTarget游戏对象下作为跟踪后显示的模型。
- 修改Rotation的值为“0,180,0”,选择模型以保持方向一致。
选中hexagon:hexagon游戏对象,设置其材质是导入的材质。
运行效果如下:当识别到3D物体以后就会显示模型,模型正好覆盖原有物体。直观上就是黑白的变成彩色的了。
当然也可以继续添加其他模型,在ObjectTarget游戏对象下添加一个方块后的效果。
物体跟踪也可以同时跟踪多个物体,跟踪多个物体的逻辑和平面图像跟踪多个图像是一样的。包括程序的使用,只是参数类型有所改变,使用方法是一样的。
自制3D物体跟踪
当想要制作一个可以跟踪的3D物体,通常用2种办法,一种是根据实际物体,重新建模,然后实现3D物体跟踪。EasyAR官方并没有给出更好的解决办法,所以,如果是有一个物体想要实现3D物体跟踪的话,只能老老实实建模。
另外是根据3D模型做个物体出来,最简单的当然是联想到3D打印。不过,对于学习使用EasyAR,更推荐使用纸模。
接下来介绍如何将一个3D模型变成可识别的物体。
- 在Unity商城选取一个3D模型。
- 修改合适后保存成prefab。
- 将prefab导出成fbx。
- 将fbx转换成obj。
- 将obj转换成纸模。
首先,从Unity商城(当然也可以是其他途经)选取一个不太复杂的模型。
- 修改模型内容,去掉一些零碎的东西,减小制作难度。
- 修改纹理贴图使其更容易被跟踪。
- 将修改好的内容保存成一个prefab。
- 在Unity3D的商城中找到FBX Exporter插件并导入。
- 选中之前生成的Prefab文件,选择菜单GameObject-Export To FBX…
- 在弹出窗口中,选择导出的路径Export Path,在Include选项中选择只导出模型,不导出动画,点击Export按钮即可。
- 下载AutoDesk公司的3D模型文件转换的工具,FBX Converter。下载并安装。地址:https://www.autodesk.com/developer-network/platform-technologies/fbx-converter-archives
- 点击左边的Add按钮导入,fbx文件。
- 点击右边的Destination format旁的下拉菜单,选择导出格式为OBJ,然后点击Convert按钮,将fbx文件转换成obj文件。
- 下载纸艺大师软件。下载并安装。地址:https://tamasoft.co.jp/pepakura-cn/download/index.html
- 点击打开图标,找到obj文件,选中并打开。
- 调整输出模型的大小和拆分方式。
- 将结果输出为pdf。
- 将pdf打印出来,剪开粘好。
- 将模型文件FireTruckII.obj、firetruckii.mtl和FireTruckII.png导入到StreamingAssets目录,作为识别内容。
- 将模型文件FireTruckII.obj、firetruckii.mtl和FireTruckII.png导入到Models目录,作为识别后显示的内容。
- 选中ObjectTarget游戏对象,设置Obj Path属性为FireTruckII.obj即要跟踪的“.obj”文件的路径。
- 修改Extra File Paths的Size值为“2”,并添加另外2个文件的路径,即FireTruckII.mtl和FireTruckII.jpg。
- 设置Name属性和Scale属性,将跟踪物体改为FireTruckII。
- 将FireTruckII模型拖到ObjectTarget游戏对象下成为其子游戏对象。
- 修改FireTruckII游戏对象的角度为“90,0,-180”。
运行效果如下:
视频版地址:https://www.bilibili.com/video/BV1yZ4y1W7JL/