0x00 - 前言
我從去年就開始對AR(Augmented Reality)技術比較關注,但是去年AR行業一直處於偶爾發聲的狀態,絲毫沒有其"異姓同名"的兄弟VR(Virtual Reality)火爆。至於MR(Mixed Reality)更像是Google Glass事情之后對AR的洗白。但是今年AR行業出了件大事,沒錯,別左右看了,說的就是你 —— Pokemon GO。暫且不討論這款游戲是不是AR游戲,畢竟爭議挺大,但是這款游戲着實是讓AR火了一把。AR應用開發貌似也有了燎原之勢。
0x01 - AR技術定義
目前對AR技術的常見理解就是CV(Computer Vision)+CG(Computer Graphic)。CV的方法很多,簡單些比如FREAK+ICP(ARToolKit中的NFT),復雜些就是SLAM(Magic Leap)。CG就沒什么好說的,利用CV算法獲取到的圖形相關信息(比如CG中的模型矩陣、視圖矩陣、投影矩陣)進行繪制。從這一點上來說Pokemon GO確實不能算作AR游戲,畢竟人家只是基於LBS的。
知乎上有一個話題 - 我想給大家說下AR的昨天今天明天可以嗎?歡迎一起討論 關於未來的AR形態?里面提到了AR兩種被廣泛接受的定義:
1. 一種是Paul Milgram和Fumio Kishino於1994年定義的“現實-虛擬連續體”。他們描述了從真實環境到虛擬環境的連續體。如圖1-2所示,真實場景和虛擬場景分布在兩端,在這兩者之間接近真實環境的是增強現實,接近虛擬場景的是增強虛擬(擴增虛境),而位於中間的部分叫做混合實境。
2. 另外一種定義是1997年北卡大學的Ronald Azuma提出的增強現實的定義。他認為增強現實技術應具有三個具體特征:三維注冊、虛實融合以及實時交互。
作者:AR學院歸海
鏈接:https://www.zhihu.com/question/33214635/answer/56058935
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
如果從這兩個定義來說,Pokemon GO也是可以算一種簡單形式的AR游戲,至少給人在感官上的體驗是符合AR的。其雖然我知道很多人認為下面這樣才叫AR……但是我們還是要有信心的嘛!
這里我表達一下我個人對AR的看法:
不管是vision based還是LBS,AR在技術上的目標其實就是建立一個和現實場景1:1的虛擬世界。從CG的角度,AR最關鍵的技術點是建立一個相機坐標系,並能獲取到現實場景中相應的模型信息(網格、位姿、材質等等)。那么vision based的方法目前可以做到對於已經注冊過的識別對象,是可以獲取到它在相機坐標系中的位姿信息。而LBS的方法更符合一般CG開發的流程,首先利用GPS建立一個世界坐標系,就可以獲取到每個物體在世界坐標系的位置(包括相機),這樣你就可以將這些物體轉化到相機坐標系中,思路差不多是這樣,只是精度上存在一定問題。目前給AR下一個精准的定義還太早,我認為用戶感官上覺得是虛實融合就可以算是AR。
0x02 - AR技術現狀
雖然上面提到了很多次Pokemon GO,但是LBS的AR系統並不是我想研究的重點,畢竟從目前來看vision based的AR系統才是主流。但是局限於我個人的見識,只使用過Vuforia、EasyAR、ARToolKit。大家有興趣的話,可以看一下知乎上的討論 - 有哪些比較優秀的AR開源項目,或者SDK?
Vuforia沒得說,商業SDK,支持的特性也比較多,好像可以支持3D Object Tracking,具體支持到什么程度,還沒有嘗試,大家感興趣可以登錄Vuforia官網。EasyAR是國內的一款SDK,AR識別性能還是要贊一個,大家可以去看EasyAR官網視頻,還是很真實地反映了其性能(不像Magic Leap之前那個鯨魚的視頻),個人還是很看好的,比起Vuforia最大優勢是免費使用時不需要水印(^_^;)。而ARToolKit相對上述兩個SDK在識別性能和特性上表現的不是很突出,但是ARToolKit勝在開源,如果你需要做一些AR業務擴展,而Vuforia和EasyAR不能滿足你,ARToolKit是一個很好的選擇。而且AR其中一個趨勢就是集成到現有App中,那么使用Vuforia和EasyAR的代價就比較大了。另外作為一個學生,抱着研究學習的心態,ARToolKit就再合適不過了。
所以后期我還是專注於ARToolKit的研究上,聽說今年秋天ARToolKit6將發布,還是很期待的,ARToolKit官網鏈接請戳。
0x03 - ARToolKit概述
ARToolKit系統核心思路是這樣的:
下面以NFT(自然圖片追蹤,Natural Feature Tracking)為例,簡述AR實現流程
1. 通過相機校准(標定),獲取到因為相機制造工藝偏差而造成的畸變參數,也就是相機內參(intrinsic matrix),來復原相機模型的3D空間到2D空間的一一對應關系。這對后面的特征提取步驟有很大作用。
2. 根據相機本身的硬件參數,我們可以計算出相應的投影矩陣(Projection Matrix)。
3. 對待識別的自然圖片(也就是任意的一張二維圖片)進行特征提取,獲取到一組特征點{P1}。
4. 實時對相機獲取到的圖像進行特征提取,也是一組特征點{P2}。
5. 使用ICP(Iterative Closest Point)算法來迭代求解這兩組特征點的RT矩陣(Rotation&Translation),即Pose矩陣,也就是圖形學中常說的模型視圖矩陣(Model View Matrix)。
6. 有了MVP矩陣(Model View Projection),就可以進行圖形繪制了。
0x04 - ARToolKit支持特性
目前來說,ARToolKit支持自然圖片/Marker/2D BarCode的識別。
- 自然圖片處理
這個應用比較廣泛,對用戶的限制也會小很多。不過最好使用一些特征比較明顯的圖像,效果會更好。
- Marker/MultiMarker
這是一種經過特殊處理的圖像,需要在邊緣包裹兩層,最外側是包裹了白色/淺色邊緣,內側是包裹了黑色邊緣,大家猜也能猜出來這樣做主要是提高識別度,同時也方便計算Pose(因為可以直接提取邊緣來計算Pose)。如下圖:
- 2D BarCode(二維碼)
這個沒什么好說的,最常見的。
另外ARToolKit目前支持的渲染引擎是OSG(OpenSceneGraph),不過版本比較低。當然,你也可以使用OpenGL ES進行繪制。畢竟我們只需要獲取到了MVP矩陣,理論上繪制部分是可以完全分開的。