?

大規模城市場景數據在Unity 3D 中加載及渲染技術的應用

2023-07-13 05:19王志科黃長偉
電力與能源 2023年2期
關鍵詞:圖層輪廓投影

王志科,黃長偉

(上海欣能信息科技發展有限公司,上海 200030)

三維可視化系統的研究一直以來是虛擬現實、地理信息系統(GIS)等領域的研究重點。三維場景中大規模數據的展示已經成為三維應用開發中必須要解決的問題。對于三維場景中的大規模數據,不可能一次性將所有的場景數據都加載到內存中。雖然可以通過設置攝像機遠裁剪面的距離來對場景的加載進行一些優化,但是在大場景的飛行模擬中,場景視角會比較大,加載到三維場景中的數據量很大,渲染效率會下降。

在基于WebGL 的三維可視化系統中,可用3D Tiles、I3S 等數據規范來實現三維場景中大規模模型數據的渲染。3D Tiles 和I3S 規范均是將三維模型通過樹結構空間索引類型對原始模型在空間上分割、轉換等細碎化處理,使得場景中局部的加載壓力降低,提高渲染性能。這種處理方式雖然能夠提升大規模場景展示的效率,但是仍存在一些問題,例如:生成后的模型再次編輯處理比較困難;在三維場景中展示時對象單體化實現也比較困難;對WebGL 的支持較好,目前在Unity 3D 中沒有可用的方案。

在Unity 3D 中,處理大規模建筑場景的解決方案主要有Auto LOD,Amplify Impostors 等。

(1)Auto LOD 使用LOD 算法。但是Auto LOD 要求在建模時就要創建出不同精細程度的模型,在三維場景中再配置模型的展示。目前大規模的建筑場景都是通過GIS 數據生成得到的,生成的只有一級精簡模型,這種方法對小場景的精細模型效果較好,但對大規模城市場景并不適用。

(2)Amplify Impostors 是把場景中的物體通過不同的角度去渲染,生成圖片之后保存下來使用,在場景渲染時,根據位置直接渲染生成圖片,提高渲染性能。然而這種方法會導致程序占用的內存增大,而且對程序中模型拆分比較細的場景渲染效果比較好,但對大規模建筑場景的渲染提升效果不大。因此,需要研究一種大規模城市建筑數據的處理方法來提升數據的加載和渲染效率。

1 城市建筑GIS 數據分析與處理

1.1 城市建筑輪廓概述

城市建筑輪廓,指的是一個城市的建筑平面輪廓圖。城市建筑輪廓數據包含城市范圍內的所有建筑輪廓,輪廓可以是一個簡單的矩形,或者是多邊形的封閉區域,表示這個區域內有棟建筑。通過城市建模輪廓進行三維建筑模型的生成,需要城市建筑輪廓數據中包含樓層的高度信息。

建筑輪廓數據存儲方式主要為Shapefile 格式。Shapefile 是美國環境系統研究所(ESRI)開發的一種空間數據的開放格式,已經成為地理信息軟件界的一個開放標準。Shapefile 是一種用于存儲地理要素幾何位置和屬性信息的非拓撲簡單格式。Shapefile 中的地理要素可表示為點、線或面(區域)。Shapefile 的工作空間可以包含dBase表,用于存儲可連接到Shapefile 要素的附加屬性。

本次選取的基礎數據為Shapefile 格式的上海建筑輪廓數據,數據中包含建筑樓層數量信息。在城市建筑數據處理部分,首先從城市的Shapefile 數據中提取出城市建筑輪廓的幾何數據和屬性數據,然后對數據進行預處理,根據建筑形狀及樓層數量等信息,處理生成建筑的白模模型,再根據白模進行貼圖,生成模型的側面紋理和頂面紋理,最后對生成的城市建筑模型進行切片處理,導出特定格式的模型文件。

1.2 城市建筑輪廓數據處理

在城市建筑輪廓數據中會出現坐標系不匹配、樓層面被錯誤分割等情況,因此在生成城市建筑輪廓數據之前,需要對數據進行預處理,數據預處理主要包含:建筑輪廓數據坐標系處理、城市建筑面融合與分離、建筑輪廓數據邊界處理。

1.2.1 建筑輪廓數據坐標系處理

坐標系參考系統(CRS)定義了GIS 中的二維投影地圖與地球上真實地址的映射關系。一般可將CRS 分為投影坐標參考系統(笛卡爾或直角坐標參考系)和地理坐標參考系統。

地理坐標參考系統,也被稱為WGS84, 它使用經度、緯度和高度值來描述地球表面上的位置信息。

投影坐標參考系統,使用基于X,Y,Z值的坐標系統來描述地球上某個點所處的位置,這個坐標系是從地球的近似橢球體投影得到的,它對應于某個地理坐標系。投影有很多方式,不同的投影構成了不同的投影坐標系,常見的投影坐標系包括:高斯-克呂格投影坐標系統、Albers 投影坐標系統、Web 墨卡托投影坐標系統。

目前常用坐標系對應的歐洲石油調查組織(EPSG)編碼為EPSG:4326(WGS84)、EPSG:3857(墨卡托投影)、EPSG:4490(CGCS2000)。本次獲取到的上海城市建筑輪廓Shapefile 文件使用的坐標系為EPSG:4236(WGS84),在數據處理時所需的坐標系為EPSG:3857(墨卡托投影),因此在生成建筑白模前需要對數據的坐標系進行處理。

城市建筑輪廓數據坐標系處理比較簡單,可使用ArcGIS 或QGIS 軟件進行處理。本文使用QGIS 軟件處理,處理前需要將Shapefile 文件導入QGIS 圖層中,然后使用圖層導出功能,將圖層要素另存,在另存窗口中填寫保存路徑,并選擇CRS 為EPSG:3857 后點擊確定,即可完成建筑數據坐標系統的轉換。

1.2.2 城市建筑面融合與分離

城市建筑輪廓基礎數據中會出現建筑面被錯誤切分的情況,若不對數據進行處理,則會出現生成模型后一棟樓被拆分為多個的情況。這樣不僅不符合實際情況,而且會增加生成建筑模型的三角形頂點數和面數,增大了三維場景渲染的壓力,因此在生成建筑模型之前需要先將出現問題的數據進行處理。處理方法為將具有相同樓層數并相交的建筑面融合,并將不相交的建筑面分離開。因此,需要對建筑輪廓數據進行融合與分離的操作。

ArcGIS 或QGIS 軟件提供了矢量數據融合處理的工具,數據融合算法采用的是矢量圖層,并將其要素組合成新的要素??梢灾付ㄒ粋€或多個屬性融合于同一類的要素,也可以將所有的要素融合為單個要素。融合過程中所輸出的幾何圖形都將轉換為多個幾何圖形,如果輸入的是多邊形圖層,將擦除被融合的鄰接多邊形的公共邊界。融合過程中,啟用“將不可相交的要素分開”,可在融合后將不相交的建筑面進行分離[1]。

1.2.3 建筑輪廓數據邊界處理

將建筑輪廓數據融合、分離處理完成后,需要進行數據渲染將數據拆分處理。本次數據處理中可以根據行政邊界將建筑輪廓數據進行分割處理。數據邊界處理方法為相交處理,相交算法是提取輸入圖層和疊加圖層中矢量要素的重疊部分,輸出相交圖層中的要素及屬性信息[1]。

將城市建筑輪廓數據導入QGIS 軟件中,并將上海各個區縣行政邊界也同時導入其中。選取地理處理工具中的相交功能,在相交功能里選擇建筑輪廓數據圖層為輸入圖層,選擇行政邊界圖層作為疊加圖層,選取需要保留的屬性字段后,點擊運行,執行完成后即可將建筑輪廓和區域邊界融合。

使用分割矢量圖層的功能,選取上一步處理過的模型,通過區域邊界中的區縣字段進行分割,分割完成后,輸出各個區段的Shapefile 文件,隨后可以進行城市建筑模型的構建。

1.3 城市建筑白模生成

通過三維建模工具,可以生成城市建筑模型,再使用Blender GIS 插件完成城市建筑白模的快速生成。Blender 是一款免費開源的三維圖形圖像處理軟件,提供了從建模、動畫、材質、渲染到音頻處理、視頻裁剪等一系列的數據處理解決方案。Blender GIS 是Blender 中的一款插件,提供了GIS數據文件的導入,支持大多數公共GIS 數據格式,如:Shapefile 矢量數據、光柵圖像、GeoTiff DEM、OpenStreetMap xml 等。

使用Blende GIS 導入工具中的Shapefile 導入功能,選擇處理后的Shapefile 文件,導入數據類型選擇幾何數據,擴展字段選擇基面(向下取整),其他保持默認,點擊確定,等待處理完成即可。導入的一個Shapefile 文件,會生成一個對象節點的城市建筑模型,若要將城市建筑單體分開,需要在導入時勾選分割對象。

城市建筑模型導入后,默認的樓層高度是1 m,故需要對建筑的高度進行調整,通過模型對象變換中的縮放,調整Z軸縮放為單層樓房的高度即可。

1.4 城市建筑模型處理

城市建筑白模生成后,還需要對樓的模型進行側面貼材質和頂面貼材質處理,由于生成模型時整個城市為單獨的一個對象,因此在模型處理時需要將模型進行拆分處理,將建筑模型的樓頂面和樓體側面分離,然后再在分離后的模型上進行貼紋理等操作。

1.4.1 城市建筑模型面分離

由于生成的城市建筑白模屬于同一個對象,在三維建模軟件中不能單獨選取進行操作,需要將建筑模型的頂面與側面進行分離。通過分析,只需要將建筑模型的頂面單獨提取拆分出來,即可以實現頂面與側面的分離工作,在Blender 工具中,可在編輯模式下選取一個面或多個面,但如果操作方法不當,會導致選取的頂面不全或者選取的側面不對。研究發現,所有的頂面都擁有相同的法向量,通過在場景中選取一個建筑的頂面,然后使用相似選取功能中的法向相似,即可達到選取所有頂面的目的,并且不會出現錯誤或者遺漏的情況[2],選取結果如圖1 所示。

圖1 城市建筑模型面分離選取結果

完成頂面的選取后,可通過面的拆分或分離功能,實現對建筑模型頂面和側面的拆分或分離工作。

1.4.2 城市建筑模型材質貼圖

建筑模型頂面與側面分離完成后,需要對模型進行材質貼圖。模型貼圖需要對頂面和側面分別進行UV 貼圖操作。

樓體側面貼圖處理流程如下。

(1)新建一個名稱為側面的材質;

(2)進入編輯模式,通過特征選取工具,按照側面特征選取場景中所有建筑的側面;

(3)通過柱面投影,進行所有建筑側面的UV映射;

(4)通過樓層高度和貼圖的大小,計算UV 位置及縮放比例;

(5)給選中的建筑側面指定側面材質。

樓體頂面貼圖處理流程如下:

(1)新建一個名稱為頂面的材質;

(2)進入編輯模式,通過相似選取工具,按照法向量相同特征選取場景中所有建筑的頂面;

(3)通過視角投影,進行所有建筑頂面的UV映射;

(4)調整UV 位置及縮放比例;

(5)給選中的建筑頂面指定頂面材質。

2 海量城市場景數據渲染技術實現

2.1 Unity 3D 引擎及VRS 平臺介紹

Unity 3D 是由Unity Technologies 公司開發的一個讓玩家輕松創建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內容的多平臺綜合型游戲開發工具。

Unity 3D 可以運行在Windows 和MacOS下,可將程序打包發布至Windows,Mac,iPhone,Android,Web GL 等平臺,是一個全面整合的專業的游戲引擎。

VRS 平臺是基于Unity 3D 打造的一個虛擬現實電網生產管理平臺,平臺在Unity 3D 的基礎上引入了數字地球、衛星影像、地理高程等三維GIS 平臺的基礎支撐應用,還增加了針對變電站、架空線路、地下電纜等業務應用的實用化功能。

城市建筑數據在三維場景中展示,能夠使三維場景內容更豐富,更能夠真實還原出周圍環境的真實情況。然而在三維場景中渲染海量城市模型,會導致需要渲染的三角面數增加,增加系統渲染的壓力,因此需要有對應的算法優化渲染過程,解決海量數據加載可能導致的卡頓問題。

2.2 三維場景渲染技術分析

渲染是由一個三維場景出發,生成一張二維圖像的過程,計算機需要從一系列的頂點數據、紋理數據等開始,把這些信息最終轉換成一張人眼可以看到的圖像,這個工作通常是由CPU 和GPU 共同完成的??梢园延嬎銠C的渲染過程分為3 個階段:應用階段、幾何階段、光柵化階段[3]。

應用階段由應用程序主導,由CPU 負責實現,此階段需要準備好場景數據,如攝像機位置、場景中包含哪些模型、使用的光源特效等,為了提升渲染性能,還需要進行一個粗粒度的剔除工作,將場景中不可見的物體剔除出去,從而減少渲染的數據量。此階段完成后,輸出的結果為包含點、線、三角面等數據的渲染圖元[3]。

幾何階段由GPU 負責,處理所有和需要繪制的幾何相關的內容,會對渲染圖元進行逐點、逐多邊形的操作,將頂點坐標變換到屏幕空間中,輸出屏幕空間的二維頂點坐標、每個頂點對應的深度值、著色等相關信息,并傳遞到下一階段。

光柵化階段是根據屏幕上的像素渲染出最終的圖像。此階段需要對上一階段得到的逐點數據進行插值,然后再進行逐像素處理,最終決定每個渲染圖元中的哪些像素應該被繪制在屏幕上[3]。

在三維場景的渲染流程中,CPU 與GPU 間的通信會使用一個命令緩沖區,Draw Call 就是其中命令的一種,提交大量很小的Draw Call,會造成CPU 的性能瓶頸。因此,在三維場景渲染時,需要減少Draw Call 的開銷,避免使用大量很小的網格,同時避免使用過多的材質,進而提升渲染效率[4]。

3 海量城市模型三維場景數據管理方法

要在三維場景中實現高效、穩定地渲染大量的城市建筑、地形地貌等地理信息系統數據,需研究一套有效的三維場景數據管理方法。

在三維場景中渲染大批量數據時,如果只是用List 將渲染對象存儲,然后送入GPU 進行渲染,這種方式雖然簡單,但渲染效率很低。目前比較好的方法是使用具有層次結構的空間數據結構存儲待渲染的物體,如包圍體層次結構(BVH)、二叉空間分割(BSP)樹、四叉樹、八叉樹和模糊K-D 樹等,在進行空間查找時將時間復雜度從O(n)降低到O(lgn)[5]。

3.1 包圍體層次結構

BVH 是包含一組物體的空間體,它要比所包含的幾何物體形狀簡單得多,所以在使用包圍體進行碰撞檢測等操作時比使用物體本身更快。常見的包圍體有軸對齊包圍盒(AABB),有向包圍盒(OBB),以及離散定向多面體(k-DOP)。

對于三維場景的實時渲染來說,BVH 是最常使用的數據結構,例如BVH 經常用于視椎體裁剪。場景以層次樹形結構進行組織,包含一個根節點、內部節點和葉子節點。最高節點是根,沒有父節點;葉子節點保存著需要繪制的實際幾何體(BVH 只能存儲幾何體,實際渲染的物體除了幾何屬性還有其他屬性,一般使用場景圖表示)。樹中的每個節點,包括葉子節點,都有一個包圍體,可以將其子樹的所有幾何體包圍起來。

在場景中的物體移動時,需要對BVH 進行更新。如果物體移動以后仍然在原先的包圍體內,則不需要更新;若不在原先的包圍體內,則需要刪除這個物體所在節點,并重新計算其父節點的包圍體,然后從根節點開始,以遞歸形式將這個節點插入這棵樹中。另一種方法則是以遞歸形式增大父節點的包圍體,直到這個包圍體可以包含這個子節點為止。無論使用哪種方法,隨著編輯操作的增多,這棵樹會變得越來越不平衡,效率也會越來越低。

3.2 二叉空間分割樹

在計算機圖形學中,BSP 樹有兩種不同的形式:軸對齊(axis-aligned)和多邊形對齊(polygonaligned)。要創建BSP 樹,首先用一個平面將空間一分為二,然后將幾何體按類別劃分到這兩個空間中,隨后以遞歸形式反復進行這個過程。這種樹有一個非常有趣的特性,如果按照一定的方式對樹進行遍歷,那么會從某個視點將這棵樹包含的幾何體進行排序(對于軸對齊的方式來說,它是粗略的排序;對于多邊形對齊方式來說,它是準確的排序)。

3.3 八叉樹

八叉樹類似軸對齊BSP 樹。沿著軸對齊包圍盒的3 條軸對其進行分割,分割點必須位于包圍盒的中心點,以這種方式生成8 個新的包圍盒。八叉樹通過將整個場景包含在一個最小的軸對齊包圍盒中進行構造,遞歸分割,直到達到最大遞歸層次或包圍盒中包含的圖元小于某個閾值。八叉樹的使用方式與軸對齊BSP 樹一樣,可以處理同類型的查詢,也可以用于遮擋裁剪算法中。八叉樹具有規則的結構,有些查詢會比BSP 樹更高效。

在八叉樹結構中,通常將物體保存在葉子節點中,其中有些物體必須保存在多個葉子節點中。這種做法的一個最大弊端就是數據量增大,而如果使用指針,則會導致八叉樹的編輯變得更加困難?!八缮⒌陌瞬鏄洹彼惴▽@個問題進行了改進。

海量的城市模型場景,屬于大規模的室外場景,場景中的物體比較分散,而且沒有出現太多遮擋的情況,由于不用存儲分割平面位置,使用八叉樹這種規則的空間結構能夠提高效率,因此在進行城市場景管理時經常使用八叉樹結構進行數據管理。

4 系統關鍵算法與功能實現

對于海量城市模型的渲染,根據對三維渲染過程的分析,設計城市模型數據存儲結構,對數據進行拆分處理,同時根據數據分頁技術,提高對模型渲染狀態的管理效率,實現動態加載、卸載模型,進而實現大規模城市建筑模型的渲染。

遮擋剔除算法,是預先計算出一組潛在的可見候選多邊形,然后在運行時編制索引,以便快速獲得可見幾何體的估計值。具體實現步驟如下。

(1)將地圖場景切割成Tile,再將Tile 切割成Portal(視口)和Cell(大物件、中物件、小物件)。

(2)檢測場景物件所屬Cell,一個物件可以屬于多個Cell。

(3)利用蒙特卡洛方法Portal 隨機一些起點,Cell 隨機一些終點(根據大、中、小隨機不同數量的點)。

(4)雙層遍歷每個Portal 和Cell,射線檢測是否阻擋,如果阻擋,判斷阻擋物是否在當前檢測Cell內,如果是,Cell可見;如果不是,Cell不可見。

(5)保存檢測數據,運行時加載解析,根據位置檢測當前Portal,然后遍歷場景所有Cell 內Item,判斷顯示和隱藏。

這種方式進行裁剪,更適合大地圖場景操作,能夠支持動態加載,占用內存也可忽略不計,同時消耗的CPU 也比較少。

在城市三維場景中,可以采用數據分頁的方式進行三維場景的動態調度。數據分頁是指隨著窗口視角范圍的不斷變化,場景中只加載和渲染當前視角窗口范圍內的數據,并將離開視角范圍內的數據進行清理或者設置其他的數據卸載策略,使得這部分數據不再渲染。這樣能夠保證內存中只有有限的數據量,場景中的每一幀也只有有限的數據被送到圖形渲染管道,從而提升渲染性能。

數據分頁算法設計如下。

(1)服務端設定一個分頁參數,將場景數據按照經緯度位置進行數據分頁加載配置,并將場景數據按照分頁配置,加載到Redis 內存庫中保存。

(2)客戶端通過攝像機當前所處的經緯度位置進行分頁數據計算,根據視野的最遠裁剪面和當前位置,計算出在攝像機可視范圍內的分頁。

(3)客戶端向服務端請求相關的分頁數據,并將分頁場景數據保存至客戶端內存中。

(4)客戶端根據內存中的分頁場景數據進行判斷,卸載掉不在視野范圍內的數據,并裝載新增加在視野范圍內的數據。

(5)客戶端將變化后的內存分頁數據進行處理并在三維場景中渲染。

5 結語

本文主要研究了如何通過城市的GIS 數據,生成大規模的城市建筑模型,并提出了一種海量城市模型三維場景的管理方法,實現了大規模城市建筑模型數據的可視化渲染,并提高了場景渲染效率,具有一定的實用價值。

在以后的研究中將繼續對數據處理方法進行精簡,編寫數據處理插件,完善城市模型快速構建的方法。

猜你喜歡
圖層輪廓投影
解變分不等式的一種二次投影算法
OPENCV輪廓識別研究與實踐
基于最大相關熵的簇稀疏仿射投影算法
基于實時輪廓誤差估算的數控系統輪廓控制
找投影
找投影
巧用混合圖層 制作抽象動感森林
圖層法在地理區域圖讀圖中的應用
跟我學添加真實的光照效果
在線學習機制下的Snake輪廓跟蹤
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合