ARToolKit為開源的AR庫,相對於高通和easyAr有幾點特點:
1)開源
2)識別項目可以動態添加(詳細在后)
3)識別文件可以本地生成
4)目前只能識別圖片(目前為.jpg格式)
下邊開始詳細介紹:
1)下載sdk
可以自己搜索下載,也可以在Git上下載https://github.com/artoolkit/artoolkit5;解壓打開如下圖所示:
其中可以把unitypackage直接丟進unity中進行使用。導入后主要用到ARcontroller、ARMaker、AROrigin以及ARTrackedObject四個腳本。
2)AR初始化場景搭建
第一步,添加控制器
在場景中新建空的Gameobject,此游戲物體名稱為ARToolKit(插件中自己名稱,可更改),並添加腳本ARController;如下圖所示:
坑點:第一個參數camera paramater默認為空,但是通過代碼追蹤進去,代碼並沒有進行賦值,導致中間參數獲取不到(不得不說里面寫的有點爛),如果不做處理,當搭建好環境以后運行會提示無法連接攝像頭,如上右圖所示。追蹤進去發現其參數是為了獲取Resources目錄下的文件生成TextAsset實例,如下圖所示,所以找到Resources下ardata目錄下的文件,隨便將一個文件的名字給它賦值既可以啟動攝像頭了(初步估計為一些開啟不同攝像頭的參數)
第二步,設置追蹤設置追蹤標記文件
在第一步中游戲物體上繼續添加腳本ARMarker,通過這個腳本獲取識別圖像所需要的數據,如第一步第一張圖所示,其中MarkerTag為此圖像的標記(可以手動修改),通過標記進行識別追蹤的物體,所以下一步需要腳本ARTrackedObject來設定追蹤。
ARMarker中type參數選為NFT,表示識別圖像的信息文件在StreamingAssets下名字為NFT Dataset Name的三個文件(后續會講怎么生成)。如果想把路徑改為其他,可在ARMarker腳本中查找StreamingAssets路徑,把相關參數值進行修改
第三步,設置追蹤目標
在場景中繼續新建空游戲物體,取名稱為Scene root,添加腳本AROrigin,此游戲物體坐標為原點(猜測跟識別后進行游戲物體定位有關),並將其層設定為特定值,比如插件默認的為ARBackground2(可繼續使用)此層。在第三步新建游戲物體下新建子游戲物體(設置layer為設定的特定值),取名稱為Marker scene,並掛載腳本ARTrackedObject,並把MarkerTag設置為與第二步中ARMarke的值一樣,表示通過ARMarker識別此tracketobject;ARMarker與ARTrackedObject成對出現,可重復第二步和第三步進行重復設置不同的識別體。如下圖所示,表示可分別對兩個圖像進行識別
至此,環境搭載結束,當識別到相應圖像后處理如下所示(截圖來自腳本ARTracketObject),如下代碼分別對應當識別到物體,追蹤物體以及追蹤失敗后對應的操作,當當識別到物體時,會對evetReceiver進行消息廣播(即eventReceiver以及其子游戲物體腳本中的所有的OnMarkerFound方法觸發),並對ARTracketObject所在的游戲物體下的子游戲物體進行激活。所以可以把識別的模型放在此游戲物體下,也可以新建游戲物體,添加腳本,腳本中添加一個OnMarkerFound方法,通過此方法進行一系列的后續操作。追蹤物體以及追蹤失敗對應的運作與上述類似。
3)生成識別文件
此處文件即為ARMarker對應的文件也是生成名為NFT Dataset Name識別文件。
將要識別的jpg文件拖到第一步中getTexData.exe上,按步驟分別輸入特征點的級別以及最大最小分辨率即可,getTexData.exe所在目錄:arunity5-master\arunity5-master\bin。通過此操所會生成三個后綴為fset、iset和fset3的文件,將這三個文件放在StreamingAssets目錄下或者修改后的目錄下即可。
PS:由於可以通過程序添加ARMarker和ARTRackerObject,可以具有較高的靈活性,可以方便的進行各種設置。但是,在程序運行過程中,不管是停掉AR模塊進行添加還是UnLoad掉相關參數添加都會導致程序跳掉,但是首次添加不會存在此問題,所以每次更改可以通過加載場景的方式跳過此bug