我從去年就開始對ar(augmented reality)技術比較關注,但是去年ar行業一直處於偶爾發聲的狀態,絲毫沒有其"異姓同名"的兄弟vr(virtual reality)火爆。至於mr(mixed reality)更像是google glass事情之後對ar的洗白。但是今年ar行業出了件大事,沒錯,別左右看了,說的就是你 —— pokemon go。暫且不討論這款遊戲是不是ar遊戲,畢竟爭議挺大,但是這款遊戲著實是讓ar火了一把。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於2023年定義的「現實-虛擬連續體」。他們描述了從真實環境到虛擬環境的連續體。如圖1-2所示,真實場景和虛擬場景分布在兩端,在這兩者之間接近真實環境的是增強現實,接近虛擬場景的是增強虛擬(擴增虛境),而位於中間的部分叫做混合實境。如果從這兩個定義來說,pokemon go也是可以算一種簡單形式的ar遊戲,至少給人在感官上的體驗是符合ar的。其雖然我知道很多人認為下面這樣才叫ar……但是我們還是要有信心的嘛!
這裡我表達一下我個人對ar的看法:
不管是vision based還是lbs,ar在技術上的目標其實就是建立乙個和現實場景1:1的虛擬世界。從cg的角度,ar最關鍵的技術點是建立乙個相機座標系,並能獲取到現實場景中相應的模型資訊(網格、位姿、材質等等)。那麼vision based的方法目前可以做到對於已經註冊過的識別物件,是可以獲取到它在相機座標系中的位姿資訊。而lbs的方法更符合一般cg開發的流程,首先利用gps建立乙個世界座標系,就可以獲取到每個物體在世界座標系的位置(包括相機),這樣你就可以將這些物體轉化到相機座標系中,思路差不多是這樣,只是精度上存在一定問題。目前給ar下乙個精準的定義還太早,我認為使用者感官上覺得是虛實融合就可以算是ar。
雖然上面提到了很多次pokemon go,但是lbs的ar系統並不是我想研究的重點,畢竟從目前來看vision based的ar系統才是主流。但是侷限於我個人的見識,只使用過vuforia、easyar、artoolkit。大家有興趣的話,可以看一下知乎上的討論 - 有哪些比較優秀的ar開源專案,或者sdk?
所以後期我還是專注於artoolkit的研究上,聽說今年秋天artoolkit6將發布,還是很期待的,artoolkit官網鏈結請戳。
artoolkit系統核心思路是這樣的:
下面以nft(自然追蹤,natural feature tracking)為例,簡述ar實現流程
1. 通過相機校準(標定),獲取到因為相機製造工藝偏差而造成的畸變引數,也就是相機內參(intrinsic matrix),來復原相機模型的3d空間到2d空間的一一對應關係。這對後面的特徵提取步驟有很大作用。
2. 根據相機本身的硬體引數,我們可以計算出相應的投影矩陣(projection matrix)。
3. 對待識別的自然(也就是任意的一張二維)進行特徵提取,獲取到一組特徵點。
4. 實時對相機獲取到的影象進行特徵提取,也是一組特徵點。
5. 使用icp(iterative closest point)演算法來迭代求解這兩組特徵點的rt矩陣(rotation&translation),即pose矩陣,也就是圖形學中常說的模型檢視矩陣(model view matrix)。
6. 有了mvp矩陣(model view projection),就可以進行圖形繪製了。
目前來說,artoolkit支援自然/marker/2d barcode的識別。
這個應用比較廣泛,對使用者的限制也會小很多。不過最好使用一些特徵比較明顯的影象,效果會更好。
這是一種經過特殊處理的影象,需要在邊緣包裹兩層,最外側是包裹了白色/淺色邊緣,內側是包裹了黑色邊緣,大家猜也能猜出來這樣做主要是提高識別度,同時也方便計算pose(因為可以直接提取邊緣來計算pose)。如下圖:
這個沒什麼好說的,最常見的。
另外artoolkit目前支援的渲染引擎是osg(openscenegraph),不過版本比較低。當然,你也可以使用opengl es進行繪製。畢竟我們只需要獲取到了mvp矩陣,理論上繪製部分是可以完全分開的。
華為實驗室
談到華為,大家都不陌生 世界500強 全球第二通訊 商,為全球140多個國家和地區的20多億人提供服務 同時也是全球ict領域的領導者。如此成就和至高無上的榮譽地位,其成功更是與實驗室無數個日夜的技術鑽研有著分不開的關係。關注過華為的朋友想必聽說過 2012實驗室 據稱,該實驗室的名字來自於任正非在...
Unity實驗室之Shader優化
最近有人問到寫shader需要注意哪些地方及如何優化,正好筆者也在研究這方面,這裡主要針對unity來說,其它平台或引擎也可以參考,本文主要分如下幾個方面來說 shader的選擇,屬性和狀態的設定,資料型別選擇,編寫,舉例,除錯 unity中現在可以新建4種shader,分別是standard su...
8 10於實驗室
前幾天忙於保研的事情,沒再繼續做我的專案,結果保研恐怕要黃了,這幾天潛心考研,結果又收到了中行的實習通知,一時兩難。有時候自己寫東西太不自然,感覺寫技術文章很大一部分是為了給別人看,反而不是為了提公升自己,感覺這個心態不好,太虛榮了,現在想寫點自己的東西,輕鬆的,暢所欲言的,沒有文法和壓力的東西,記...