曾紅梅,劉子桓
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
隨著城市信息化應(yīng)用水平不斷提升,智慧城市建設(shè)應(yīng)運(yùn)而生[1]。以O(shè)penSceneGraph(OSG)三維渲染引擎為代表的場景可視化系統(tǒng),為實(shí)時(shí)顯示大規(guī)模城市場景提供了巨大支持[2]。然而,近幾年CPU和GPU發(fā)展迅速,內(nèi)存和硬盤的發(fā)展較為緩慢,數(shù)據(jù)訪問速度成為大規(guī)模場景可視化的主要瓶頸[3]。并且,大規(guī)模場景的LOD模型數(shù)據(jù)量通常十分龐大[4],不能常駐內(nèi)存和顯存,可視化系統(tǒng)需要利用out-of-core技術(shù)完成場景LOD模型內(nèi)外存調(diào)度工作。因此,研究大規(guī)模場景LOD模型out-of-core調(diào)度機(jī)制,對(duì)推動(dòng)智慧城市建設(shè)具有重要意義。
目前,主要通過基于幾何的建模和基于圖像的建模兩種方式獲取場景模型[5]。隨著無人機(jī)的飛速發(fā)展,通常利用無人機(jī)傾斜攝影的方法,高效地采集到真實(shí)度高的場景數(shù)據(jù),然后通過幾何校正、影像匹配和空中三角測量技術(shù)處理測量得到的數(shù)據(jù),最終基于圖像建模大規(guī)模場景[6]。其中傾斜攝影測量技術(shù)[7]是近年的一種新興測量技術(shù),從垂直、傾斜等不同角度采集影像,以獲得地面物體更為完整準(zhǔn)確的信息[8]。
同時(shí)對(duì)于大規(guī)模場景內(nèi)外存調(diào)度問題,主要通過改變場景數(shù)據(jù)內(nèi)外存組織形式和改進(jìn)場景數(shù)據(jù)調(diào)度機(jī)制兩種方式解決。Da Silva等[9]將大型點(diǎn)云數(shù)據(jù)組織成動(dòng)態(tài)八叉樹結(jié)構(gòu),設(shè)計(jì)了一種基于部分排序的Morton碼,提高外存數(shù)據(jù)查詢效率。Gong等[10]結(jié)合八叉樹和R樹葉子節(jié)點(diǎn),提出3DORTree概念和一種基于深度遍歷與廣度遍歷的混合遍歷方法,對(duì)場景數(shù)據(jù)組成的3DORTree進(jìn)行遍歷。Lindstorm等[11]解決地形可視化問題時(shí),讓操作系統(tǒng)控制內(nèi)外存數(shù)據(jù)分頁工作,提出使用內(nèi)存映射技術(shù)加快內(nèi)外存數(shù)據(jù)調(diào)度效率。高宇等[12]利用最近最少使用策略(least recently used,LRU)釋放內(nèi)存,對(duì)可能用到的內(nèi)存數(shù)據(jù)進(jìn)行加鎖處理,減少內(nèi)外存數(shù)據(jù)訪問次數(shù)。Xue等[13]提出一種高效的可交互CAD模型的GPU內(nèi)外存調(diào)度渲染框架,將LOD模型壓縮成高度緊湊的格式,最小化存儲(chǔ)成本。Jia等[14]針對(duì)大規(guī)模地址學(xué)模型場景可視化系統(tǒng),在外存中根據(jù)模型的特點(diǎn)構(gòu)造多分辨率簡化模型。Deibe等[15]開發(fā)了VILMA可視化軟件用于大規(guī)模LiDAR點(diǎn)云數(shù)據(jù)渲染,并且提出Hierarchically Layered Tiles和Tile Grid Partitioning Tree兩種數(shù)據(jù)組織方式減少內(nèi)外存占用率。OSG三維渲染引擎通過DatabasePager實(shí)現(xiàn)場景LOD模型動(dòng)態(tài)out-of-core調(diào)度機(jī)制[16]。
OSG調(diào)度機(jī)制采用逐層次方式加載LOD模型,LOD節(jié)點(diǎn)樹在加載過程中才被建立,導(dǎo)致OSG無法跨層次加載LOD節(jié)點(diǎn)。即使預(yù)先保存LOD節(jié)點(diǎn)樹,然后載入使用,OSG卻不知道是否在一幀內(nèi)能完成目標(biāo)LOD節(jié)點(diǎn)的加載。從而,OSG為了保證系統(tǒng)幀率,采用了最保守的逐層次加載方法。
但是,OSG逐層次加載的方式導(dǎo)致如下兩個(gè)問題:①加載數(shù)據(jù)量大。因?yàn)樵诩虞d到目標(biāo)LOD節(jié)點(diǎn)之前,需要加載所有中間層次節(jié)點(diǎn)。②未考慮外存設(shè)備讀取能力。即使外存設(shè)備讀取能力強(qiáng),OSG仍然在每幀中,將加載和渲染的LOD層次,向精細(xì)化方向只推進(jìn)一層。從而導(dǎo)致限制時(shí)間內(nèi),OSG無法加載到用戶期望的LOD層次,最終渲染效果達(dá)不到用戶的期望。
針對(duì)上述OSG調(diào)度機(jī)制的缺陷,本文提出跨越式的LOD模型out-of-core調(diào)度機(jī)制。為了使系統(tǒng)可以跨層次加載LOD節(jié)點(diǎn),本文預(yù)計(jì)算生成場景LOD節(jié)點(diǎn)樹保存在外存。并且,在限制時(shí)間內(nèi)不能完全加載用戶期望的LOD節(jié)點(diǎn)時(shí),為了找到替代效果最佳的LOD節(jié)點(diǎn)集合,本文利用多選擇背包問題[17]方法,求解得到最優(yōu)的節(jié)點(diǎn)集合。對(duì)比OSG,本文大量減少LOD節(jié)點(diǎn)數(shù)據(jù)量和數(shù)據(jù)總加載量,并且提升場景渲染效果。
當(dāng)不能完全加載用戶期望的節(jié)點(diǎn)時(shí),為了找到替代效果最優(yōu)的節(jié)點(diǎn)集合,本文利用多選擇背包問題(multiple-choice knapsack problem,MCKP)[17]方法求取最優(yōu)解。由于每組物品數(shù)量巨大,導(dǎo)致求解多選擇背包問題時(shí)間復(fù)雜度極高。因此,本文提出物品模板的概念,通過物品模板實(shí)時(shí)生成少量物品,降低求解時(shí)間復(fù)雜度。
將如何找到替代效果最優(yōu)的節(jié)點(diǎn)集合的問題抽象為多選擇背包問題,再利用動(dòng)態(tài)規(guī)劃算法求解多選擇背包問題[18]。
首先明確合法調(diào)度節(jié)點(diǎn)集合和期望節(jié)點(diǎn)集合的概念,當(dāng)合法調(diào)度節(jié)點(diǎn)集合L包含某個(gè)節(jié)點(diǎn)Nnode時(shí),則此節(jié)點(diǎn)的所有兄弟節(jié)點(diǎn)Nbrother∈L,所有子孫節(jié)點(diǎn)Nchild?L。將場景被化分為n個(gè)塊(Tile),根據(jù)當(dāng)前視點(diǎn)信息進(jìn)行可見性計(jì)算和LOD計(jì)算后,由各個(gè)Tile中符合計(jì)算結(jié)果的LOD節(jié)點(diǎn)組合成的集合Hi,所組成的集合H={H1,H2,H3,…,Hn}成為期望節(jié)點(diǎn)集合。
已知外存設(shè)備讀取速度,在限制加載時(shí)間內(nèi),將每幀節(jié)點(diǎn)調(diào)度中允許的LOD節(jié)點(diǎn)最大加載量Wtotal視為背包重量。將每個(gè)Tile視為一組物品集合,假設(shè)第i個(gè)Tile的LOD節(jié)點(diǎn)樹有mi個(gè)LOD節(jié)點(diǎn),有ki種合法調(diào)度節(jié)點(diǎn)集合,將每種合法調(diào)度節(jié)點(diǎn)集合視為一個(gè)物品,物品重量Wki為集合中所有節(jié)點(diǎn)加載量之和,物品收益Vki為結(jié)合種所有節(jié)點(diǎn)三角形面片數(shù)量之和。在每幀LOD節(jié)點(diǎn)調(diào)度中,當(dāng)期望節(jié)點(diǎn)集合加載量WH>Wtotal,導(dǎo)致無法完全加載期望節(jié)點(diǎn)集合時(shí)。如公式(1),從每個(gè)可見Tile的ki種合法調(diào)度節(jié)點(diǎn)集合Li中選擇一種即從每組中選擇一個(gè)物品,使得加載所有已選擇物品產(chǎn)生的總收益Vactual最大。如公式(2)保證所有被選擇物品的總加載量Wactual≤Wtotal。如公式(3)表示最多只從每個(gè)可見Tile中選擇一種合法調(diào)度節(jié)點(diǎn)集合即物品,如公式(4)表示物品是否被選擇。
其中v表示當(dāng)前可見Tile數(shù)量。Vij表示第i個(gè)可見Tile的第j種合法調(diào)度節(jié)點(diǎn)集合收益,同理Wij表示其加載量。yij=0表示這種合法調(diào)度節(jié)點(diǎn)集合不被選擇,yij=1表示被選擇。
如圖1,使用一個(gè)例子說明本文利用多選擇背包問題求解的思想。假設(shè)場景中經(jīng)過可見性計(jì)算后,只有Tile1和Tile2,并且期望節(jié)點(diǎn)集合分別為A={6 ,7,8,5},B={6,7,4}。在一幀節(jié)點(diǎn)調(diào)度中,最大加載量Wtotal=15,期望節(jié)點(diǎn)集合加載量WH=32。因此,需要從每個(gè)可見Tile的所有合法調(diào)度節(jié)點(diǎn)集合中最多選擇一種加載,使得節(jié)點(diǎn)加載總量Wactual≤Wtotal的前提下,加載總收益Vactual最大。Tile1和Tile2分別有6種、4種合法調(diào)度節(jié)點(diǎn)集合,在24種組合中,Tile1選擇C={6,7,4,5},Tile2選擇D={1}加載后產(chǎn)生最大收益為15。最終,此次節(jié)點(diǎn)調(diào)度應(yīng)該選擇集合C和D進(jìn)行加載顯示。
圖1加載LOD節(jié)點(diǎn)過程
但是,多選擇背包問題被證明是NPC問題[19],求解時(shí)間復(fù)雜度與每組物品數(shù)量呈指數(shù)級(jí)相關(guān)。根據(jù)公式(5)計(jì)算根節(jié)點(diǎn)的組合代表一個(gè)Tile中的合法調(diào)度節(jié)點(diǎn)集合數(shù)量即物品數(shù)量。如表1所示,在四川大學(xué)場景中,計(jì)算得到部分Tile的合法調(diào)度節(jié)點(diǎn)集合數(shù)量。每個(gè)Tile的合法調(diào)度節(jié)點(diǎn)集合數(shù)量巨大,導(dǎo)致求解十分困難,無法保證系統(tǒng)的實(shí)時(shí)性。
其中c表示節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量,kj表示子節(jié)點(diǎn)的組合數(shù),k表示節(jié)點(diǎn)的組合數(shù)。葉子節(jié)點(diǎn)沒有子節(jié)點(diǎn),則kleaf=1。
表1合法調(diào)度節(jié)點(diǎn)集合數(shù)量
因此,本文提出通過物品模板實(shí)時(shí)生成少量物品,降低時(shí)間復(fù)雜度。
本文提出物品模板的概念。首先,通過離線處理方式,預(yù)計(jì)算生成少量合法調(diào)度節(jié)點(diǎn)集合作為物品模板集合。然后,在系統(tǒng)運(yùn)行時(shí),根據(jù)可見性計(jì)算與LOD計(jì)算生成期望節(jié)點(diǎn)集合,結(jié)合保存節(jié)點(diǎn)加載量、三角面數(shù)量和節(jié)點(diǎn)文件是否在內(nèi)存等信息的節(jié)點(diǎn)狀態(tài)表,實(shí)時(shí)地從各個(gè)物品模板中生成物品。最后,每個(gè)Tile中的物品數(shù)量大量減少,使得求解節(jié)點(diǎn)調(diào)度最優(yōu)化問題容易。本文提出BaseN節(jié)點(diǎn)集合作為物品模板,其定義如下:
定義BaseN節(jié)點(diǎn)集合:每個(gè)Tile的LOD節(jié)點(diǎn)樹中,以深度為N的全部節(jié)點(diǎn)以及深度小于N的所有葉子節(jié)點(diǎn)組成的集合,稱之為BaseN節(jié)點(diǎn)集合。
本文使用如圖2的一個(gè)例子說明BaseN節(jié)點(diǎn)集合。其中,基于深度4的Base4集合,由深度為4的節(jié)點(diǎn){10,11,12,13,14,15,16}和小于深度的全部葉子節(jié)點(diǎn){5,8}組合而成。
圖2 Tile中BaseN節(jié)點(diǎn)集合
本文將BaseN節(jié)點(diǎn)集合為物品模板的理由如下:
(1)是合法調(diào)度節(jié)點(diǎn)集合。當(dāng)物品模板自身不是合法調(diào)度節(jié)點(diǎn)集合時(shí),必須花費(fèi)時(shí)間令其轉(zhuǎn)變?yōu)楹戏ǖ摹?/p>
(2)覆蓋LOD節(jié)點(diǎn)樹的各個(gè)層級(jí)。當(dāng)物品模板未覆蓋到某些層級(jí)時(shí),將會(huì)影響最終節(jié)點(diǎn)調(diào)度最優(yōu)化問題的求解。
(3)能快速生成物品。當(dāng)面臨不符合LOD計(jì)算以及剔除計(jì)算結(jié)果的節(jié)點(diǎn),可以快速將節(jié)點(diǎn)從BaseN節(jié)點(diǎn)集合中刪除或者替換,然后生成物品。
最后,預(yù)計(jì)算為場景中每個(gè)Tile生成BaseN節(jié)點(diǎn)集合保存在外存,當(dāng)系統(tǒng)運(yùn)行時(shí),實(shí)時(shí)根據(jù)可見性計(jì)算和LOD計(jì)算生成物品。
本文為場景中所有Tile生成BaseN節(jié)點(diǎn)集合時(shí),默認(rèn)所有Tile的所有節(jié)點(diǎn)可見。但是在系統(tǒng)運(yùn)行時(shí),用戶的視點(diǎn)位置變換,將會(huì)出現(xiàn)部分Tile不可見和部分節(jié)點(diǎn)不可見的情況。因此,在每次節(jié)點(diǎn)調(diào)度時(shí),需要根據(jù)視點(diǎn)信息,將物品模板轉(zhuǎn)化為真正的物品,才能作為多選擇背包問題的輸入。本文算法結(jié)合期望節(jié)點(diǎn)集合以及節(jié)點(diǎn)狀態(tài)表,從物品模板中生成物品,具體生成步驟如下:
(1)復(fù)制所有BaseN節(jié)點(diǎn)集合作為待處理的物品模板集合。
(2)進(jìn)行可見性計(jì)算,刪除不可見Tile的物品模板集合,以及可見Tile物品模板中的不可見節(jié)點(diǎn)。
(3)根據(jù)期望節(jié)點(diǎn)集合,得到每個(gè)Tile對(duì)應(yīng)期望節(jié)點(diǎn)集合中的最大節(jié)點(diǎn)深度Ni。刪除Tile中最大節(jié)點(diǎn)深度大于Ni的物品模板。
(4)將物品模板中,不符合LOD計(jì)算結(jié)果的節(jié)點(diǎn),替換為符合LOD計(jì)算的祖先節(jié)點(diǎn)。并且根據(jù)節(jié)點(diǎn)狀態(tài)表,標(biāo)記物品模板中已經(jīng)存在于內(nèi)存中的節(jié)點(diǎn),表示該節(jié)點(diǎn)的加載量為0。最終每個(gè)物品模板中,剩余的節(jié)點(diǎn)組合成物品,即每個(gè)Tile中實(shí)際可選擇的合法調(diào)度節(jié)點(diǎn)集合。
最后,將生成的物品作為多選擇背包問題的輸入,求解得到替代效果最佳的節(jié)點(diǎn)集合,作為系統(tǒng)此次調(diào)度的實(shí)際節(jié)點(diǎn)集合。即每個(gè)可見Tile中僅有少量的物品,從每個(gè)Tile中最多選擇一個(gè)物品,組成的物品集合加載量不超過限制加載量,并且使得系統(tǒng)渲染效果最好。
本文實(shí)驗(yàn)環(huán)境如表2所示。
表2實(shí)驗(yàn)環(huán)境
通過精靈Phantom 4 RTK型無人機(jī)在成都市青羊?qū)m和四川大學(xué)周邊進(jìn)行傾斜攝影采集到的兩套數(shù)據(jù),詳細(xì)信息如表3所示。
表3無人機(jī)采集數(shù)據(jù)
使用Bentley System公司的ContextCapture軟件[20]對(duì)采集到的數(shù)據(jù)處理,自動(dòng)建模三維場景。然后,僅保留模型文件OpenSceneGraph Binary(OSGB)中關(guān)于LOD節(jié)點(diǎn)調(diào)度的相關(guān)信息。最終,生成本文用于場景LOD模型調(diào)度機(jī)制研究的數(shù)據(jù)格式,包含bin、bint、lodtree這3種格式文件。二進(jìn)制幾何數(shù)據(jù)文件(.bin)保存LOD節(jié)點(diǎn)的幾何數(shù)據(jù),二進(jìn)制紋理數(shù)據(jù)文件(.bint)保存LOD節(jié)點(diǎn)的紋理數(shù)據(jù),LOD節(jié)點(diǎn)樹文件(.lodtree)保存多個(gè)LOD節(jié)點(diǎn)的信息以及節(jié)點(diǎn)間的關(guān)系。調(diào)度文件相關(guān)信息如表4所示。
表4調(diào)度文件相關(guān)信息
本實(shí)驗(yàn)對(duì)比本文算法和OSG逐層次調(diào)度機(jī)制的LOD節(jié)點(diǎn)數(shù)量與數(shù)據(jù)總加載量,證明本文算法在每次調(diào)度時(shí),能夠大量減少需要加載的LOD節(jié)點(diǎn)數(shù)量和數(shù)據(jù)總加載量。
實(shí)驗(yàn)中記錄了在同一場景的同一視點(diǎn)位置處,調(diào)度相同的期望LOD節(jié)點(diǎn)集合時(shí),OSG逐層次調(diào)度機(jī)制和本文算法加載的LOD節(jié)點(diǎn)數(shù)量與節(jié)點(diǎn)數(shù)據(jù)總加載量。分別在成都市青羊?qū)m和四川大學(xué)場景下進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表5和表6所示。
表5成都市青羊?qū)m場景加載信息記錄
表6四川大學(xué)場景加載信息記錄
由表5和表6實(shí)驗(yàn)結(jié)果可以看出,在相同場景和外存設(shè)備的條件下,本文算法的數(shù)據(jù)總加載量為OSG的50%左右,加載的LOD節(jié)點(diǎn)數(shù)量為OSG的30%左右。例如在成都市青羊?qū)m場景,固態(tài)硬盤的條件下,OSG需要加載897個(gè)節(jié)點(diǎn)才能顯示用戶期望的效果,數(shù)據(jù)總加載量為140.273 MB,然而,本文算法只需要加載284個(gè)LOD節(jié)點(diǎn),數(shù)據(jù)總加載量為僅為74.988 MB。
同時(shí),OSG對(duì)于具有不同讀取能力的外存設(shè)備,調(diào)度的總節(jié)點(diǎn)數(shù)量不變。但是本文算法在不同的外存讀取能力下,調(diào)度的總節(jié)點(diǎn)數(shù)量不同。例如四川大學(xué)場景中,OSG在固態(tài)硬盤和機(jī)械硬盤上調(diào)度的節(jié)點(diǎn)數(shù)量都是380個(gè),本文算法在固態(tài)硬盤上調(diào)度的節(jié)點(diǎn)數(shù)量為95個(gè),在機(jī)械硬盤上調(diào)度的節(jié)點(diǎn)數(shù)量為114個(gè),因?yàn)楸疚氖窃谕獯嬖O(shè)備讀取范圍能力內(nèi),求解多選擇背包問題得到的替代節(jié)點(diǎn)集合,所以不同的外存設(shè)備下,求解結(jié)果不同,最終總共需要加載的LOD節(jié)點(diǎn)數(shù)量也不同。
OSG為了保證系統(tǒng)幀率,將數(shù)據(jù)加載壓力分?jǐn)偟搅硕鄠€(gè)渲染循環(huán)中,逐層次的加載節(jié)點(diǎn)。從而必須加載所有中間層次節(jié)點(diǎn),導(dǎo)致加載的LOD節(jié)點(diǎn)數(shù)量更多。相比之下,本文算法不需要加載中間層次節(jié)點(diǎn),當(dāng)加載能力足夠時(shí),則直接加載期望的LOD節(jié)點(diǎn),當(dāng)加載能力不足時(shí),在限制時(shí)間內(nèi),求解多選擇背包問題,完成節(jié)點(diǎn)加載工作。
本實(shí)驗(yàn)在四川大學(xué)場景的同一視點(diǎn)位置下,對(duì)比本文算法與OSG逐層次調(diào)度機(jī)制加載顯示LOD節(jié)點(diǎn)的渲染效果。
本文算法使用加載的LOD節(jié)點(diǎn)集合擁有的三角形面片數(shù)量衡量渲染效果,在不同的限制時(shí)間條件下進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表7所示。
表7節(jié)點(diǎn)加載效果表
由表7可知,在不同限制時(shí)間條件下,本文算法最終渲染的LOD節(jié)點(diǎn)集合擁有的三角形面片數(shù)量是OSG的140%左右。在限制加載時(shí)間為500 ms時(shí),圖3為OSG的渲染效果,圖4為本文算法渲染效果,圖5為用戶期望的節(jié)點(diǎn)渲染效果。對(duì)比圖3和圖4可以從看出本文算法的渲染效果比OSG更加清晰。分別對(duì)比圖3與圖5、圖4與圖5,可以看出本文算法效果更加接近用戶期望顯示的效果。
圖3 OSG渲染效果
圖4本文算法渲染效果
圖5期望渲染效果
實(shí)驗(yàn)結(jié)果表明,OSG渲染效果不如本文算法。分別求取本文渲染效果圖4與期望渲染效果圖5和OSG渲染效果圖4與期望渲染效果圖5的結(jié)構(gòu)相似性SSIM、峰值信噪比PSNR和均方誤差MSE,結(jié)果如表8所示,可知本文方法的渲染效果更好,結(jié)構(gòu)相似度更高,均方誤差更小,峰值信噪比更高。由于不能完全加載到用戶期望的LOD節(jié)點(diǎn),OSG最終加載顯示某個(gè)中間層次的LOD節(jié)點(diǎn)集合。而本文算法求解多選擇背包問題,最終加載顯示的渲染效果最優(yōu)的中間層次LOD節(jié)點(diǎn)集合。
表8渲染效果比較
本文使用多選擇背包問題求解出替代效果最優(yōu)的LOD節(jié)點(diǎn)集合進(jìn)行加載顯示,并且提出物品模板與物品的概念降低求解時(shí)間復(fù)雜度,最終實(shí)現(xiàn)了面向傾斜攝影測量數(shù)據(jù)的跨越式LOD模型out-of-core調(diào)度機(jī)制。實(shí)驗(yàn)結(jié)果表明,對(duì)比OSG,本文算法在每幀調(diào)度中,大量減少了需要加載的節(jié)點(diǎn)數(shù)據(jù)總加載量和節(jié)點(diǎn)數(shù)量,并且渲染效果比OSG更精細(xì)。本文算法對(duì)于大規(guī)模城市場景的可視化具有一定的價(jià)值和參考。不足的是本文假設(shè)讀取不同數(shù)量、不同大小的文件耗時(shí)相同,視外存設(shè)備讀取速度為常數(shù),導(dǎo)致對(duì)調(diào)度最優(yōu)化問題的求解有一定影響,后續(xù)考慮利用回歸森林方法預(yù)測出外存設(shè)備的讀取速度。并且,本文求解調(diào)度最優(yōu)化問題時(shí),為了降低求解時(shí)間復(fù)雜度,進(jìn)而求取次優(yōu)解作為最終結(jié)果。因此,找到降低時(shí)間復(fù)雜度的,且渲染效果比本文算法更好的方法是本文未來繼續(xù)的研究方向。