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”。
運行效果如下: