安 宇,聶 蕓,王國偉
(華北計(jì)算技術(shù)研究所,北京 100083)
隨著計(jì)算機(jī)圖形學(xué)及相關(guān)技術(shù)的發(fā)展,增強(qiáng)現(xiàn)實(shí)技術(shù)正在數(shù)據(jù)可視化領(lǐng)域中扮演越來越重要的角色。增強(qiáng)現(xiàn)實(shí)(Augmented Reality, AR)技術(shù)是一種基于環(huán)境感知物理設(shè)備,利用三維建模技術(shù),通過多種交互手段來把虛擬的場景疊加到真實(shí)的世界并且進(jìn)行實(shí)時交互的技術(shù)[1-3]。
態(tài)勢呈現(xiàn)廣義上是指對指定信息的二維或三維展現(xiàn),作為本文研究重點(diǎn)的地理信息(包括地形、符號、紋理)呈現(xiàn)問題,是一種典型的態(tài)勢數(shù)據(jù)呈現(xiàn)問題[4-6]。傳統(tǒng)的地理信息態(tài)勢(簡稱態(tài)勢)呈現(xiàn)被要求精細(xì)地展現(xiàn)在AR的設(shè)備中。由于AR設(shè)備存在視野狹窄、計(jì)算和圖形處理能力不足的固有問題,將傳統(tǒng)的數(shù)字沙盤應(yīng)用到AR場景中會產(chǎn)生可視范圍內(nèi)地形增強(qiáng)邊界明顯、生成及更新過程緩慢、分辨率低的結(jié)果。
本文針對在AR場景中的三維地形生成過程效率低、可視化效果差的問題,通過動態(tài)地形剖分技術(shù),結(jié)合自然人機(jī)交互控制,提出一種高效的三維地形生成呈現(xiàn)算法,實(shí)現(xiàn)在AR場景中的三維地形高效生成,提高可視化效果。
增強(qiáng)現(xiàn)實(shí)概念由波音公司于1992年提出,隨后確立了AR的3個主要特征:虛實(shí)融合、實(shí)時交互和三維注冊[7-8]。1999年在AR Toolkit項(xiàng)目中,初步實(shí)現(xiàn)了計(jì)算機(jī)跟蹤功能,之后應(yīng)用在塞班操作系統(tǒng)上,實(shí)現(xiàn)了移動端的跟蹤注冊,由此擴(kuò)展了AR應(yīng)用的使用范圍[9-10]。在移動平臺下應(yīng)用的SLAM算法,使得AR的三維空間定位能力進(jìn)一步增強(qiáng),標(biāo)志著AR技術(shù)的進(jìn)一步成熟[11-13]。2012年谷歌的增強(qiáng)現(xiàn)實(shí)眼鏡Google Glass是移動穿戴式AR設(shè)備的一個里程碑,其在用戶眼前展示實(shí)時信息的功能,受到了大眾的追捧,將穿戴式AR設(shè)備的發(fā)展推上了高潮,使得增強(qiáng)現(xiàn)實(shí)技術(shù)備受關(guān)注[14]。近年來又誕生了功能更強(qiáng)的微軟的增強(qiáng)現(xiàn)實(shí)眼鏡Hololens,其有著手動追蹤、眼動追蹤和語音交互的能力,相機(jī)具有顯示8百萬像素靜止圖像和1080P30的高清展現(xiàn)能力,進(jìn)一步地提高了用戶體驗(yàn)[15]。至此AR設(shè)備的應(yīng)用領(lǐng)域已經(jīng)十分廣泛[16-18]。
傳統(tǒng)態(tài)勢呈現(xiàn)的形式是地圖和沙盤。地圖是一個二維的展現(xiàn)方式,可以展現(xiàn)地理信息所處的平面坐標(biāo)系統(tǒng)位置。實(shí)物沙盤則是在地圖基礎(chǔ)上的進(jìn)一步發(fā)展,增加了態(tài)勢展現(xiàn)的維度,能概略地展現(xiàn)三維的地理信息,豐富了展現(xiàn)的內(nèi)容,可以模擬各種數(shù)據(jù)在三維空間中的位置[19-21]。隨著計(jì)算機(jī)技術(shù)的發(fā)展,又有了數(shù)字態(tài)勢展現(xiàn)的手段,可以在計(jì)算機(jī)中模擬真實(shí)的地理環(huán)境,使得態(tài)勢呈現(xiàn)的細(xì)節(jié)變得更加清晰[22-24]。隨著可穿戴的AR設(shè)備的發(fā)展,態(tài)勢呈現(xiàn)可以應(yīng)用在AR設(shè)備中,并且?guī)Ыo用戶豐富的視覺感知和聽覺感知體驗(yàn),實(shí)現(xiàn)了用戶與態(tài)勢在真實(shí)場景下實(shí)時交互的功能。
增強(qiáng)態(tài)勢是為了滿足地理信息的三維化、高精度、全方位、全息展現(xiàn)和實(shí)時多交互手段的需求而提出的一種概念。它既具備三維數(shù)字態(tài)勢高清晰度、高分辨率的能力,又結(jié)合了增強(qiáng)現(xiàn)實(shí)的虛實(shí)融合、三維注冊、實(shí)時交互的功能來實(shí)現(xiàn)全息現(xiàn)實(shí)的任意角度展現(xiàn),并進(jìn)一步通過物理設(shè)備的視線追蹤、手勢識別、語音識別完成了多感知手段和多控制手段的實(shí)時交互能力。
1)軟硬件一致性。
相對于傳統(tǒng)設(shè)備,AR設(shè)備存在視野狹窄的問題,導(dǎo)致了數(shù)據(jù)富集程度高、增強(qiáng)邊界明顯等問題。因此在設(shè)計(jì)增強(qiáng)態(tài)勢的算法中要考慮在軟件中的顯示效果能否高效準(zhǔn)確地在硬件中顯示出來,確保在硬件上的顯示效果,從而實(shí)現(xiàn)軟件與硬件的一致性。
2)運(yùn)行魯棒性。
面對開發(fā)環(huán)境和運(yùn)行環(huán)境的顯示能力、計(jì)算能力、渲染能力不匹配的固有問題,研究軟件在硬件運(yùn)行環(huán)境下的魯棒性就要著重考慮設(shè)計(jì)增強(qiáng)現(xiàn)實(shí)算法中的性能優(yōu)化問題,通過減少軟件的運(yùn)行開銷來實(shí)現(xiàn)運(yùn)行環(huán)境的魯棒性。
3)人機(jī)交互的自適性。
由于地形往往都是很大的,而用戶所關(guān)注的地形位置與大小一直都在發(fā)生變化?;谶@樣的用戶需求,本文在增強(qiáng)態(tài)勢中定義了關(guān)鍵區(qū)域。關(guān)鍵區(qū)域是指,隨著用戶的視線距地形的距離以及投射到地形上的位置變化而自動發(fā)生大小、位移變化的地形區(qū)域。這就要求在設(shè)計(jì)增強(qiáng)態(tài)勢的工作中,地形要有自適應(yīng)性。
本文的開發(fā)引擎選用的是Unity,基于其3D開發(fā)的專業(yè)性和多平臺發(fā)布的包容性,可以滿足本文三維地形開發(fā)并且發(fā)布到AR設(shè)備上的需求。本文提出的區(qū)域化算法是一種通用算法,可以在所有的AR平臺下使用。本文的頭戴式AR設(shè)備選用的是Hololens,基于其1080P30的高清展現(xiàn)能力和手動追蹤、眼動追蹤、語音交互的多種實(shí)時交互手段,可以滿足本文的高精度、高分辨率以及地形交互自適應(yīng)的要求。軟件架構(gòu)如圖1所示。
圖1 軟件架構(gòu)
本文方案的核心由3個部分組成:地形生成、分塊算法和區(qū)域化算法。通過對地理信息的輸入和處理,本文利用地形生成算法來進(jìn)行地形的生成。分塊算法是在地形生成的基礎(chǔ)上提出的一種算法,對地形進(jìn)行剖分,從而提高生成地形的清晰度。區(qū)域化算法是在分塊算法的基礎(chǔ)上進(jìn)行優(yōu)化的一種算法,對分塊算法在性能上進(jìn)行了優(yōu)化,并且可以在AR場景中與用戶進(jìn)行實(shí)時交互,從而精細(xì)、高效地生成用戶可視范圍內(nèi)的地形。
Unity中通常采用Terrain組件來表達(dá)地形信息,但是Terrain組件存在更新成本高、細(xì)節(jié)呈現(xiàn)能力弱等問題,因此不能滿足本文的表達(dá)要求。為了能夠便捷地進(jìn)行網(wǎng)格重構(gòu)以及接入業(yè)務(wù)控制邏輯,本文直接選用了Mesh組件作為地形表達(dá)的載體。Mesh模塊保存了構(gòu)成3D模型表面的多個順序相連的三角形面的點(diǎn)集、邊集等信息。Mesh模塊中有3個關(guān)鍵的數(shù)組,分別是頂點(diǎn)數(shù)組、三角形數(shù)組以及UV數(shù)組。頂點(diǎn)數(shù)組給出了Mesh網(wǎng)格中的每個點(diǎn)的三維坐標(biāo),記錄了生成地形的每個點(diǎn)的位置信息。三角形數(shù)組給出了Mesh網(wǎng)格渲染的方式。UV數(shù)組是指紋理貼圖的坐標(biāo),記錄了圖上點(diǎn)集的位置信息,同時給出了紋理貼圖的位置信息,將點(diǎn)集中的每一個點(diǎn)都映射到了3D模型的表面。Mesh模塊要求輸入一個高度圖Height Map來獲取每個地形的每個點(diǎn)對應(yīng)的高度信息,以及一個貼圖Diffuse Map,來給Mesh網(wǎng)格進(jìn)行貼圖渲染。獲取高度信息的時候,先對高度圖中的像素點(diǎn)進(jìn)行等間距采樣,然后獲取采樣得到的每個像素點(diǎn)的Red、Green、Blue顏色值,再通過公式(1)中的色彩心理學(xué)公式[25]將像素點(diǎn)的彩色值轉(zhuǎn)化為灰度值,從而計(jì)算出像素點(diǎn)的高度。
gray=0.3×r+0.59×g+0.11×b
(1)
其中g(shù)ray是像素點(diǎn)的灰度值,r、g、b是像素點(diǎn)的對應(yīng)的Red、Green、Blue顏色值。
通過以上步驟,該算法可以生成地形,是只生成一塊Mesh的單Mesh算法。但是該算法存在缺點(diǎn):傳統(tǒng)意義下的Mesh生成的精度十分有限,因?yàn)槊恳粔KMesh都最多只有65,535個繪制的點(diǎn),因此當(dāng)?shù)匦魏艽蟮臅r候,傳統(tǒng)Mesh生成的顯示效果將特別差,完全看不出任何細(xì)節(jié),因此需要提出一種新型的Mesh拼接方案。
基于高分辨率、高清晰度的需求,本文提出Mesh分塊化算法作為一種新型的Mesh拼接方案來對Mesh的生成進(jìn)行優(yōu)化。一個大的地形由一塊塊小Mesh拼接而成。其中每一塊小Mesh都有65,535個繪制點(diǎn),從而保證每個Mesh的清晰度。
Mesh分塊化算法的第一步是確立分塊數(shù)目N以及對高度圖Height Map和貼圖Diffuse Map進(jìn)行圖像切割。每個塊的編號記作λ(λ= 1,2,…,N),該塊的起始點(diǎn)記為Ps,坐標(biāo)為(Xs,Ys),終止點(diǎn)記為Pe,坐標(biāo)為(Xe,Ye)。
Xs=Ys=λmod sqrt(N)-1
(2)
Xe=Ye=λmod sqrt(N)
(3)
通過式(2)、式(3)的計(jì)算,可以根據(jù)每個分塊的編號計(jì)算出每個分塊的起始點(diǎn)坐標(biāo),依次把大圖的像素點(diǎn)賦值給小圖從而完成圖像切割。
Mesh分塊化算法的第二步是進(jìn)行N塊小Mesh的生成,基于第一步得到的坐標(biāo)信息和對應(yīng)的2個小圖信息來給小Mesh的3個基礎(chǔ)數(shù)組進(jìn)行賦值,從而實(shí)現(xiàn)了N塊小Mesh的生成。
Mesh分塊化算法的第三步是對N塊小Mesh進(jìn)行拼接,從而得到一塊完整的大地形。由于生成的Mesh直接拼接邊緣會存在縫隙,因此需要對每個生成的小Mesh的坐標(biāo)進(jìn)行整體平移。設(shè)第λ個分塊的父節(jié)點(diǎn)為Pλ,坐標(biāo)為(Xλ,Yλ)。
Xλ=Xλ-λmod sqrt(N)+1
(4)
Yλ=Yλ-λmod sqrt(N)+1
(5)
通過式(4)、式(5)的計(jì)算,本文將每個小Mesh依據(jù)其對應(yīng)的編號λ,對整體進(jìn)行相應(yīng)的平移變換,從而完成了Mesh拼接。
分塊Mesh算法解決了生成的地形精度不足的問題,但是存在系統(tǒng)開銷大的問題。由于目前AR設(shè)備計(jì)算能力和圖形能力的不足,因此無法直接采用此算法進(jìn)行地形的生成。
區(qū)域化算法是基于分塊算法,為了降低系統(tǒng)開銷并且進(jìn)一步增強(qiáng)關(guān)鍵區(qū)域的顯示效果而實(shí)現(xiàn)的一種智能化分塊算法。由于AR設(shè)備存在視野狹窄的問題,本文需要對可視區(qū)域內(nèi)的地形進(jìn)行高效的精細(xì)化生成,并將人眼實(shí)際可視區(qū)域稱為關(guān)鍵區(qū)域。因此智能化分塊算法要先把一個大地形劃分為5塊區(qū)域,如圖2所示,分別為Top區(qū)域、Down區(qū)域、Left區(qū)域、Right區(qū)域和關(guān)鍵區(qū)域Key區(qū)域。然后對5個區(qū)域分別進(jìn)行Mesh生成,最后拼接成一塊大地形。
圖2 Mesh區(qū)域化示意圖
圖2中所示Key點(diǎn)所處的區(qū)域即為關(guān)鍵區(qū)域,Key點(diǎn)為關(guān)鍵點(diǎn),是Hololens中的虛擬光標(biāo)與Mesh平面的交點(diǎn),坐標(biāo)記為(Xkey,Ykey),記關(guān)鍵區(qū)域面積為S。如圖3所示,人眼觀測Mesh區(qū)域時,視線交Mesh平面于點(diǎn)Key,距離為d。
圖3 人眼觀測Mesh區(qū)域示意圖
本實(shí)驗(yàn)的Mesh面積為100個單位。關(guān)鍵區(qū)域是在Hololens中的一個正方形可視范圍,其面積隨著人眼距Mesh平面距離的平方成正比。當(dāng)關(guān)鍵區(qū)域的面積不超過Mesh最大面積時,關(guān)鍵區(qū)域的面積正比于距離的平方。經(jīng)實(shí)驗(yàn)測得,當(dāng)d的值為10.1612、Key點(diǎn)設(shè)置為Mesh的中心點(diǎn)時,在Hololens中可以觀察到關(guān)鍵區(qū)域與Mesh區(qū)域恰好重疊。其中d的值可通過圖3的方法求出,故而,可以推導(dǎo)出一個實(shí)驗(yàn)公式(6)來計(jì)算關(guān)鍵區(qū)域的面積S:
(6)
從而可以進(jìn)一步通過公式(7)計(jì)算出第一行R1的y坐標(biāo)YR1,第二行R2的y坐標(biāo)YR2,第一列C1的x坐標(biāo)XC1,第二列C2的x坐標(biāo)XC2,從而確定了圖2中所有點(diǎn)的坐標(biāo)。然后根據(jù)Mesh分塊化算法完成Mesh的生成與拼接。
(7)
該算法通過自適應(yīng)關(guān)鍵區(qū)域的選擇,保證了可視范圍內(nèi)地形的精度,并且相比于分塊化算法大大減少了Mesh生成的數(shù)量,從而降低了系統(tǒng)開銷。
本文實(shí)驗(yàn)的Unity的版本為2017.4.18f1 (64-bit),所處的電腦關(guān)鍵配置如表1所示,使用的Hololens的關(guān)鍵參數(shù)如表2所示。
表1 開發(fā)環(huán)境配置清單
表2 運(yùn)行環(huán)境配置清單
單Mesh算法、分塊化算法、區(qū)域化算法下的同區(qū)域顯示結(jié)果,如圖4所示。
(a) 單Mesh算法 (b) 分塊化算法 (c) 區(qū)域化算法圖4 3種算法下的顯示結(jié)果
本文的分塊化算法生成了100個Mesh,然后進(jìn)行拼接。如圖4所示,通過對比可以看出,單Mesh的顯示效果較差,紋理不清晰,分塊化算法下的顯示效果明顯優(yōu)于單Mesh的顯示效果,區(qū)域化算法下的顯示效果與分塊化算法下的顯示效果相比差異不大。
圖5~圖7的橫坐標(biāo)都是每個Mesh中點(diǎn)的個數(shù),單位是個。本實(shí)驗(yàn)通過控制Mesh中點(diǎn)的數(shù)量不同,產(chǎn)生了3種算法多組數(shù)據(jù)下的結(jié)果性能對比趨勢圖。圖5中的縱坐標(biāo)是GFX驅(qū)動開銷,單位是MB。圖6中的縱坐標(biāo)是幀率,單位是fps。圖7中的縱坐標(biāo)是內(nèi)存消耗,單位是MB。通過對比分析,可以得出結(jié)論:區(qū)域化算法下新的地形與分塊化算法下的地形相比,大大降低了系統(tǒng)的開銷,并且相比于單Mesh的地形系統(tǒng)開銷差距不大。綜上所述,區(qū)域化算法在保障了顯示效果的同時,也降低了硬件設(shè)備的消耗。
圖5 3種算法下的GFX驅(qū)動開銷
圖6 3種算法下的幀率
圖7 3種算法下的內(nèi)存開銷
本文介紹了一個新的概念——增強(qiáng)態(tài)勢,并且給出了增強(qiáng)態(tài)勢的實(shí)現(xiàn)方法與優(yōu)化方法。首先通過對3種算法生成結(jié)果的展示對比,得出區(qū)域化算法的顯示效果最優(yōu)。又通過改變每個小Mesh上的點(diǎn)的個數(shù),生成了10組數(shù)據(jù)來對每種算法的性能消耗進(jìn)行對比分析。實(shí)驗(yàn)結(jié)果表明,優(yōu)化后的區(qū)域化算法產(chǎn)生的結(jié)果在性能開銷上比分塊化算法有了顯著的降低,并且相比于單Mesh算法產(chǎn)生的結(jié)果在性能開銷上差距不大。因此,區(qū)域化算法是一種既可以保證增強(qiáng)態(tài)勢的顯示效果,又可以維持一個較小的硬件開銷的算法。本文的增強(qiáng)態(tài)勢為將來在真實(shí)空間中與態(tài)勢交互的研究打下了基礎(chǔ),并且進(jìn)一步拓展了增強(qiáng)現(xiàn)實(shí)應(yīng)用的多樣性。