高亦遠(yuǎn),李 豪,葛榮存,李佳祺,李 創(chuàng),佘江峰
(南京大學(xué) 地理與海洋科學(xué)學(xué)院 江蘇省地理信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,南京 210023)
自然景觀是虛擬三維地理場(chǎng)景的重要組成部分,景觀要素的相關(guān)渲染技術(shù)被廣泛應(yīng)用于地理信息系統(tǒng)、游戲、虛擬現(xiàn)實(shí)、動(dòng)畫(huà)等領(lǐng)域[1–3].作為自然景觀中的常見(jiàn)要素,樹(shù)木的表達(dá)一直是研究的熱點(diǎn)和難點(diǎn)[4].由于樹(shù)木形態(tài)自身的復(fù)雜性,樹(shù)木的真實(shí)感表達(dá)與場(chǎng)景的渲染效率之間存在著矛盾[5,6]:由大量三角面片構(gòu)成的模型雖然可以有效表達(dá)樹(shù)木形態(tài),但渲染效率較低,而使用較少幾何面片構(gòu)成的模型則真實(shí)感不足,二者都會(huì)影響用戶(hù)體驗(yàn).目前三維場(chǎng)景中樹(shù)木的表達(dá)方法大致分為兩類(lèi)[6],一類(lèi)是基于幾何模型的繪制方法,另一類(lèi)是基于紋理圖像的繪制方法.
基于幾何模型的方法通過(guò)算法簡(jiǎn)化樹(shù)木模型,從而解決樹(shù)木結(jié)構(gòu)過(guò)于復(fù)雜導(dǎo)致的渲染耗時(shí)問(wèn)題.例如:Remolar 等提出了樹(shù)葉合并簡(jiǎn)化算法[7],將相似的樹(shù)葉進(jìn)行合并;郭星辰等提出了一種參數(shù)化的方式對(duì)植物形態(tài)特征予以集成和組織,滿(mǎn)足了樹(shù)木的共性特征[8];Lluch 等提出了多層次模型表示法[9],實(shí)現(xiàn)模型的簡(jiǎn)化;Zhang 等提出了基于植物器官的層次合并算法[10],引入了葉序、花序等概念來(lái)進(jìn)行層次合并.以上方法雖能在單株樹(shù)木上達(dá)到簡(jiǎn)化效果,但在渲染大規(guī)模森林場(chǎng)景時(shí)總體的渲染負(fù)擔(dān)依舊繁重.在大規(guī)模植被的可視化表達(dá)方面,Li 等提出了一種基于圖的中性景觀模型,能快速生成具有真實(shí)感的森林景觀格局,但在渲染性能方面還需要深入研究[11].
基于紋理圖像的繪制方法將樹(shù)木的幾何模型用簡(jiǎn)單面片表示,其繪制工作量基本與樹(shù)木的形態(tài)復(fù)雜度無(wú)關(guān).布告板是這類(lèi)方法的一種簡(jiǎn)單而典型的實(shí)現(xiàn),其基本思想是將幾何模型替換為始終朝向觀察者的平面布告板,通過(guò)將物體某個(gè)角度觀察的快照作為紋理貼到布告板上,從而減少動(dòng)態(tài)渲染時(shí)的計(jì)算量[12].但是傳統(tǒng)布告板的缺點(diǎn)也很明顯,當(dāng)視點(diǎn)變化時(shí)布告板上的紋理貼圖不會(huì)發(fā)生變化,真實(shí)感比較缺乏.在布告板方法的基礎(chǔ)上,相關(guān)學(xué)者提出了布告板云方法[13,14],該方法將樹(shù)木拆解為多個(gè)布告板進(jìn)行表達(dá),在每個(gè)布告板貼上相應(yīng)的紋理圖片.這在一定程度上解決了單布告板缺少三維立體感的問(wèn)題,但在表達(dá)精細(xì)的樹(shù)木模型時(shí)需要大量的布告板面片,使得渲染時(shí)的計(jì)算量大為增加.Maciel 等提出了Impostor 方法[15],在預(yù)計(jì)算階段將樹(shù)木模型渲染到一個(gè)面,減少了幾何復(fù)雜度.在此基礎(chǔ)上孫雪波等又提出了基于動(dòng)態(tài)Impostor 技術(shù)的樹(shù)木快速繪制方法[16],可以實(shí)現(xiàn)樹(shù)木的多角度表達(dá),但視角變化時(shí)紋理仍需實(shí)時(shí)生成,實(shí)時(shí)計(jì)算量仍然很大.She 等提出了球面布告板的概念,使用不規(guī)則球面模擬樹(shù)冠,與傳統(tǒng)布告板相比,其幾何復(fù)雜度和紋理復(fù)雜度略有提高,但對(duì)于特定樹(shù)木可以取得較好的表達(dá)效果[17].
本文提出了一種新的布告板方法,使用單個(gè)平面布告板作為樹(shù)木模型的幾何替代物,根據(jù)視點(diǎn)位置動(dòng)態(tài)切換與觀察方向及距離最相適應(yīng)的紋理貼圖,所取得的樹(shù)木三維表達(dá)效果與觀察方位具有更好的一致關(guān)系.
自適應(yīng)布告板方法首先需要獲取多個(gè)觀察方向以及視距上的樹(shù)木紋理圖片集合,可用于后期場(chǎng)景渲染時(shí)的動(dòng)態(tài)選取.對(duì)于比較重要的樹(shù)木(如古樹(shù)名木),如需要還原樹(shù)木的原貌,可以采用人工或無(wú)人機(jī)實(shí)地拍攝的方法,獲得樹(shù)木在不同距離或方位上的高清照片;對(duì)于數(shù)量龐大的普通樹(shù)木,可以采用計(jì)算機(jī)模擬的方法分類(lèi)獲得多方位觀察效果圖.無(wú)論采用哪種方法,對(duì)于每一張圖片,都要記錄下該樹(shù)木圖片所對(duì)應(yīng)的觀察方位以及視距.以計(jì)算機(jī)模擬方法為例,有關(guān)過(guò)程如下:
在具有樹(shù)木高精細(xì)模型的前提下,通過(guò)設(shè)置相機(jī)位置、光照、分辨率等渲染參數(shù),利用三維軟件獲得同一樹(shù)木在不同觀察方位和視距下的渲染圖像.具體步驟如下(圖1):
1)將樹(shù)木模型(高為h)置于原點(diǎn),將模型高度的1/2 處設(shè)為樹(shù)木的中心;
2)設(shè)定相機(jī)位置到樹(shù)木中心距離r,保證渲染的樹(shù)木完整,并設(shè)置水平及垂直方向的采樣間隔角度;
3)根據(jù)水平和垂直方向間隔角,以及相機(jī)到樹(shù)木的距離,確定相機(jī)的位置,渲染對(duì)應(yīng)位置的紋理圖片.垂直角θ、水平角σ與相機(jī)位置(X,Y,Z)間的公式如式(1)~式(3),渲染效果如圖2所示.
在此過(guò)程中,應(yīng)對(duì)生成的圖片標(biāo)注方位和視距等信息,以便于在漫游過(guò)程中,根據(jù)視點(diǎn)與樹(shù)木的相對(duì)空間關(guān)系方便地選取最合適的圖片作為紋理.
圖1 樹(shù)木的多方位視覺(jué)效果的生成示例
圖2 同一樹(shù)木的多方位渲染效果
與傳統(tǒng)布告板相比,自適應(yīng)布告板可以解決特定視角下的渲染缺陷,但也存在一些新的困難.傳統(tǒng)布告板只需要將樹(shù)木紋理圖片的樹(shù)根部位與地面相接就可將樹(shù)木固定在場(chǎng)景中.使用自適應(yīng)布告板時(shí),樹(shù)木根部會(huì)隨著紋理圖片的觀察角度變化而發(fā)生渲染位置的變化.如圖3所示,3 棵樹(shù)木垂直觀察角度分別為:0 度、50 度、90 度.當(dāng)觀察的垂直角由0 逐漸增加時(shí),樹(shù)根位置將由圖像底部上移至圖像中部.在場(chǎng)景中若根部定位不恰當(dāng)就會(huì)出現(xiàn)圖4所示錯(cuò)誤.
為確保樹(shù)木表達(dá)的準(zhǔn)確性,需要在每次切換紋理圖片時(shí)動(dòng)態(tài)調(diào)整布告板的位置,使得樹(shù)木根部定位點(diǎn)與地形高度一致,形成樹(shù)木“長(zhǎng)”在地上的效果.這需要對(duì)每張圖片額外標(biāo)注根部定位信息.本文采用的方法為固定樹(shù)木中心點(diǎn)的位置,使樹(shù)根在不同視角上都與地面相接.
具體步驟為:先測(cè)量一張水平角度生成的紋理貼圖中樹(shù)木根部距離圖片底部的距離d1 及紋理圖片的高度d2;然后,將布告板置于場(chǎng)景中,令其中心位置距離地形該點(diǎn)高度d2–d1 處.在調(diào)整后的場(chǎng)景中,無(wú)論從什么位置觀察樹(shù)木圖片都可以保證樹(shù)木根部與地形固定點(diǎn)相接.
圖3 樹(shù)根位置變動(dòng)示意圖
圖4 樹(shù)根定位的錯(cuò)誤效果與正確效果比較
傳統(tǒng)布告板使用一張紋理圖片表示物體,減少幾何復(fù)雜度,提高渲染性能.當(dāng)視點(diǎn)發(fā)生變化時(shí),旋轉(zhuǎn)布告板,使其始終面向相機(jī)位置.但觀察角度發(fā)生變化時(shí),紋理圖片并不會(huì)發(fā)生改變,影響真實(shí)感.
自適應(yīng)布告板的主要思想是,生成目標(biāo)物體的多視角紋理圖片集,根據(jù)布告板與視點(diǎn)的相對(duì)方位關(guān)系,從多視點(diǎn)紋理圖片集中選擇與觀察角度最契合的紋理圖片在布告板上顯示.
當(dāng)視點(diǎn)位置發(fā)生變化時(shí),則自動(dòng)切換布告板上的紋理圖片,使之與視角同步變化,實(shí)現(xiàn)觀察效果與觀察角度的一致.這樣,可以使布告板展現(xiàn)出近似真實(shí)模型的效果.
自適應(yīng)布告板方法具體包括以下幾個(gè)步驟:
1)預(yù)先生成(或拍攝)樹(shù)木在各個(gè)相對(duì)方位與距離上的樹(shù)木紋理圖片;
2)根據(jù)視點(diǎn)和布告板的相對(duì)位置關(guān)系得到觀察方向和距離;
3)根據(jù)觀察方向計(jì)算旋轉(zhuǎn)矩陣,調(diào)整布告板位置,使其朝向相機(jī)位置;
4)尋找與觀察方向和視距最匹配的圖片,并將圖片用作為紋理更新到布告板上;
5)當(dāng)視點(diǎn)移動(dòng)時(shí),從第2 步開(kāi)始新的紋理選擇過(guò)程.
根據(jù)視點(diǎn)P1(x1,y1,z1)布告板中心P0(x0,y0,z0)計(jì)算水平角θ與垂直角σ的公式為:
根據(jù)計(jì)算得到的水平角和垂直角,查詢(xún)距離該點(diǎn)位置最近的紋理圖片.依據(jù)由水平角θ與垂直角σ推算出的旋轉(zhuǎn)矩陣來(lái)調(diào)整布告板的方向,使其始終朝向相機(jī).
紋理查詢(xún)的直接方法是遍歷已有圖片對(duì)應(yīng)的拍攝控制點(diǎn),分別計(jì)算控制點(diǎn)到觀察點(diǎn)的相對(duì)方位和距離,并選擇最接近的控制點(diǎn)所對(duì)應(yīng)的紋理圖片.但是當(dāng)紋理圖片集合較大時(shí),遍歷全部拍攝控制點(diǎn)代價(jià)過(guò)大.改進(jìn)辦法是:基于觀察點(diǎn)位置查詢(xún)其周?chē)囟ǚ秶鷥?nèi)的拍攝控制點(diǎn),以減少比較次數(shù).
根據(jù)紋理圖片的獲取方式及其方位信息,可將紋理圖片查詢(xún)分為規(guī)則和不規(guī)則兩種方式.三維軟件渲染生成的紋理圖片相機(jī)位置精確可控,相鄰控制點(diǎn)間水平角或垂直角間隔一致,根據(jù)觀察點(diǎn)位置以及水平與垂直間隔角可以快速確定周?chē)? 個(gè)拍攝點(diǎn),從中選擇最近拍攝點(diǎn)的紋理圖片.但真實(shí)拍攝的影像紋理圖片難以精確控制其拍攝方位,拍攝位置分布也具有不規(guī)則性等特點(diǎn),在這樣的拍攝圖片集中尋找合適的紋理面臨較大的困難,需要利用已有的拍攝控制點(diǎn)生成空間 Delaunay 三角網(wǎng),再確定觀察方位點(diǎn)所在三角形,最后尋找與視點(diǎn)最近的點(diǎn)所對(duì)應(yīng)的紋理圖片(圖5).
基于自適應(yīng)布告板的樹(shù)木表達(dá)方法有效減少了場(chǎng)景交互過(guò)程中的樹(shù)木渲染計(jì)算負(fù)荷,能夠在計(jì)算能力較弱的平臺(tái)上更流暢地渲染三維樹(shù)木.但在圖片較多的情況下,紋理讀取和加載的壓力也會(huì)變大,需要一種合適的紋理加載方法以提高效率.本文采用異步加載以及緩存相結(jié)合的方法,算法過(guò)程如圖6所示.
一般來(lái)說(shuō),從硬盤(pán)或網(wǎng)絡(luò)中加載紋理圖片耗時(shí)長(zhǎng),如果減少紋理圖片的加載次數(shù)將會(huì)有效減少系統(tǒng)的IO 壓力.利用紋理圖片緩存技術(shù),可以減少加載重復(fù)紋理的時(shí)間消耗[15,18].但紋理圖片緩存也有弊端:緩存過(guò)多紋理圖片會(huì)占用大量的內(nèi)存,這會(huì)導(dǎo)致計(jì)算機(jī)性能的嚴(yán)重下降.可設(shè)置一個(gè)定長(zhǎng)的圖片緩存隊(duì)列,當(dāng)緩存圖片數(shù)量超過(guò)隊(duì)列長(zhǎng)度時(shí),主動(dòng)釋放哪些早先加載但使用頻率較低的紋理圖片.
圖5 紋理圖片規(guī)則(左)與不規(guī)則(右)尋址示例,紅色圓點(diǎn)為觀察點(diǎn),黑色圓點(diǎn)為拍攝控制點(diǎn)
圖6 紋理圖片加載流程圖
本方法總體的流程如圖7所示.
基于瀏覽器的三維場(chǎng)景渲染是三維應(yīng)用的一個(gè)熱點(diǎn),和桌面應(yīng)用軟件相比,Web 應(yīng)用最大的優(yōu)勢(shì)是客戶(hù)端免安裝,但瀏覽器又是一個(gè)典型的渲染計(jì)算能力比較弱的環(huán)境,能否在瀏覽器環(huán)境提供可接受的渲染性能是本文方法是否可用的一個(gè)重要驗(yàn)證.本文基于WebGL 技術(shù)檢測(cè)瀏覽器端的樹(shù)木渲染效果.軟件環(huán)境為Chrome 63,WebGL 1.0.硬件環(huán)境為:CPU Intel Core i7 2.6 GHz,內(nèi)存8 GB,GPU 為NVIDIA GeForce GTX1060,顯存3 GB.
實(shí)驗(yàn)中使用3DS 格式樹(shù)木模型,來(lái)源于archibase.net 網(wǎng)站,選用了6 種樹(shù)木模型,頂點(diǎn)數(shù)84 441 至1 516 168不等,模型數(shù)據(jù)量大小為2.25~38.5 MB 不等.使用Blender 軟件將樹(shù)木模型渲染生成紋理圖像集合,采用的水平角間隔和垂直角間隔均為2 度,對(duì)每種樹(shù)木各渲染了8280 張圖片,構(gòu)成了樹(shù)木的紋理圖片集.
圖7 自適應(yīng)布告板法總體流程圖
相較于傳統(tǒng)布告板方法,自適應(yīng)布告板樹(shù)木表達(dá)方法有效改進(jìn)了非水平方向觀察時(shí)存在的真實(shí)感不足問(wèn)題(圖8).在表達(dá)大規(guī)模樹(shù)木時(shí),為了避免樹(shù)木在觀感上過(guò)于整齊一致,為樹(shù)木增加一個(gè)隨機(jī)的水平擾動(dòng)角度,使得從同一方向觀察的不同個(gè)體樹(shù)木的效果有所差異,增加了場(chǎng)景的總體真實(shí)感(圖9).
圖8 傳統(tǒng)布告板與自適應(yīng)布告板對(duì)比
圖9 三維場(chǎng)景中樹(shù)林的表達(dá)
在表達(dá)樹(shù)林場(chǎng)景時(shí),如果使用常規(guī)的幾何模型方法,每增加一棵樹(shù)木都會(huì)增加大量的幾何面片,消耗大量的計(jì)算資源.使用紋理貼圖替代幾何模型表達(dá)樹(shù)木后,增加一棵樹(shù)木只會(huì)增加渲染紋理圖片的存儲(chǔ)空間,不會(huì)顯著增加更大的計(jì)算壓力.此外,由于同類(lèi)樹(shù)木可以共享紋理圖片庫(kù),對(duì)于這種情況,紋理圖片的存儲(chǔ)和管理事實(shí)上不會(huì)增加過(guò)多的額外負(fù)擔(dān).
試驗(yàn)表明,在包含100 棵樹(shù)木的三維場(chǎng)景中動(dòng)態(tài)漫游時(shí),瀏覽器渲染幀率可達(dá)到60 fps;在由500 棵樹(shù)木構(gòu)成的場(chǎng)景中,紋理圖片加載完成后,仍能以50 fps以上的幀率運(yùn)行.
若直接使用高精度的樹(shù)木三維模型,受瀏覽器性能的限制,僅包含100 棵樹(shù)木的三維場(chǎng)景就已經(jīng)卡頓嚴(yán)重,甚至難以運(yùn)行,十分影響用戶(hù)體驗(yàn);若使用傳統(tǒng)的布告板方法,雖然渲染幀數(shù)得到了保障,但有明顯的“紙片感”,這種問(wèn)題在俯視的情況下尤甚.
自適應(yīng)布告板樹(shù)木表達(dá)方法使得渲染效率顯著提高,場(chǎng)景交互更為流暢,在真實(shí)感表達(dá)方面也顯著優(yōu)于傳統(tǒng)的布告板技術(shù).
本文提出自適應(yīng)布告板的樹(shù)木表達(dá)方法,在預(yù)先生成的樹(shù)木的多方位圖像中,根據(jù)視點(diǎn)變化動(dòng)態(tài)檢取最匹配的圖像作為紋理,在布告板上實(shí)時(shí)動(dòng)態(tài)切換紋理,在有效減少場(chǎng)景中樹(shù)木的幾何復(fù)雜度的同時(shí),提高了樹(shù)木的真實(shí)感效果,取得了渲染效率與渲染效果的較好平衡,對(duì)于渲染計(jì)算能力較弱的環(huán)境(如Web 瀏覽器)也具有很好的適用性.
進(jìn)一步研究可考慮繼續(xù)優(yōu)化樹(shù)木的紋理圖片獲取方法和紋理加載算法,進(jìn)一步降低紋理圖片加載的負(fù)擔(dān);同時(shí)考慮為樹(shù)木添加陰影效果,增強(qiáng)三維場(chǎng)景的真實(shí)感.在此基礎(chǔ)上,還可以考慮為常見(jiàn)樹(shù)木種類(lèi)建立紋理圖片庫(kù),以滿(mǎn)足更為廣泛的應(yīng)用需求.