朱周華,呂志慧,于建強
(江蘇省測繪研究所,江蘇南京 210013)
傾斜攝影技術是國際地理信息領域近年來發(fā)展起來的,它融合傳統(tǒng)航空攝影技術和數(shù)字地面采集等技術,克服了傳統(tǒng)航攝技術只能從垂直角度拍攝的局限,通過在同一飛行平臺上搭載多臺傳感器,同時從1 個垂直角度和4 個傾斜角度采集影像,更加真實地反映地物的實際情況,彌補了正射影像的不足,還能基于影像進行各種測量。傾斜攝影成果已廣泛應用在城市管理、自然資源管理等領域。本文針對傾斜攝影成果的數(shù)據(jù)特點,分析相關實體提取的流程方法,研究基于三維場景的實體動態(tài)表達和空間分析的技術方法[1]。
基于傾斜攝影的三維模型重建是目前攝影測量與遙感、計算機視覺、圖形圖像學等交叉領域的研究熱點,通過多視影像密集匹配生成點云,然后基于高密度點云數(shù)據(jù)構建不規(guī)則三角網(wǎng)模型,最后進行紋理映射,實現(xiàn)道路、建筑物、植被等三維地表形態(tài)重建。目前,基于傾斜攝影的高精度大場景快速建模技術在工程應用已相對成熟。在數(shù)據(jù)采集方面,利用工業(yè)級甚至消費級無人機便可快速批量獲取多種空間尺度的傾斜攝影原始影像數(shù)據(jù)。在數(shù)據(jù)處理方面,以CC為代表的傾斜攝影建模軟件提供了完整的數(shù)據(jù)建模作業(yè)體系,可自動實現(xiàn)較高精度的地理場景建模工作[2]。這些已成為獲取三維地理信息數(shù)據(jù)的重要手段,其真實、高效地對地面人工建筑和自然地表同時獲取與表達的特點,更能準確直觀地表達出復雜山地環(huán)境下的立體地表空間。
傾斜模型是連續(xù)不規(guī)則三角網(wǎng)并貼圖的成果,模型上各地理要素構成一體,無法對各地理對象單獨管理,類似于影像地圖“一張皮”,只能作為底圖提供基本的可視化與量測功能,缺少對象信息查詢分析等功能。因此,數(shù)據(jù)能夠被管理,必須具備可分割、可查詢等能力。
一般認為,基于傾斜模型實現(xiàn)結構化分割是實體三維實現(xiàn)的必要條件之一。目前,主流的結構化分割方法一般以矢量線劃數(shù)據(jù)作為基礎資料,輔助實體構建工作,主要包括ID單體化、切割單體化和動態(tài)單體化等多種單體化方法,這些方法都能達到最基本的使用要求,都可以將模型綁定要素屬性信息以至于能夠查詢地理要素屬性信息,但是它們在后期使用各有優(yōu)劣。ID 單體化不是本質上的單體化,各地物要素模型還是在一張三角網(wǎng)上,并沒有對模型進行分割,ID單體化不支持動態(tài)渲染環(huán)境,對模型后期管理和應用不方便。切割單體化對模型進行分割,可以對單個單體化模型進行管理和操作,是嚴格意義上的單體化,但切割單體化會破壞原有傾斜攝影模型的LOD(多層次細節(jié)模型)結構,并且傾斜攝影模型全要素的切割對成本提出來一定要求,而且各行業(yè)對地理要素分類標準不統(tǒng)一,影響數(shù)據(jù)后期的共享使用,且切割后的模型周圍具有鋸齒邊緣,影響美觀。動態(tài)單體化與ID 單體化一樣,并沒有實現(xiàn)對連續(xù)三角面的實際分割,不是徹底的對象物單體化,對后期的管理應用稍顯欠缺[3]。
傾斜攝影測量的數(shù)據(jù)成果從本質上看就是mesh模型(空間網(wǎng)格面模型),它是點云構成的。基于幾何校正、聯(lián)合平差等處理流程,利用傾斜攝影測量內業(yè)處理軟件可計算出傾斜影像的超高密度點云,對點云進行簡化,然后構建TIN(不規(guī)則三角網(wǎng)),最后經(jīng)過紋理映射構建出真實三維模型。
為了實現(xiàn)3D 場景和模型的高效、可交互操作傳輸,需要將傾斜模型數(shù)據(jù)轉換成面向實時渲染應用的數(shù)據(jù)格式,目前主流主要有glTF(圖形語言交換格式)。glTF是一種3D內容的格式標準,可以直接傳輸給WebGL(Web graphics library)的繪制命令的數(shù)據(jù)形式,不再需要二次轉換,數(shù)據(jù)格式基于JSON,具有更好的Web 友好性。在數(shù)據(jù)轉換過程中,當原始數(shù)據(jù)的LOD 發(fā)生變化,將重新構建LOD。新構建的LOD,無論是效果還是性能,都遠遜于原始LOD,導致性能不佳[4]。鑒于上述兩種情況,3D Tiles 數(shù)據(jù)格式應運而生,3D Tiles 是在 glTF 的基礎上,加入了 LOD 的信息,專門為大數(shù)據(jù)量地理3D 數(shù)據(jù)流式傳輸和海量渲染而設計的一種格式,將三維數(shù)據(jù)以分塊、分層的形式組織起來,可以大量減輕瀏覽器和GPU的負擔,用流式傳輸海量三維數(shù)據(jù),平衡不同三維場景范圍的表達性能和視覺質量。
目前,傾斜模型數(shù)據(jù)主要是以文件集的形式進行存儲,大型場景存在小文件多、拷貝和管理要求高等特點,如果直接使用或調用,易產(chǎn)生磁盤讀寫的性能瓶頸,同時數(shù)據(jù)的安全和權限也需要保障,因此需要對數(shù)據(jù)持久化存儲進行相關研究,提高傾斜模型數(shù)據(jù)的存儲和訪問效率。
三維模型中每個頂點包含頂點坐標、法向量、顏色、紋理坐標等屬性信息。在WebGL中,根據(jù)頂點及其相關的信息進行可視化,由頂點屬性組成的數(shù)據(jù)流首先從Web 應用程序輸入,依次經(jīng)過頂點著色器、片段著色器的處理,最后到達圖形繪制幀緩存,然后在視圖中顯示。對于WebGL 來說,三維數(shù)據(jù)可視化的重點是要將頂點信息以及由頂點構成的面信息顯示出來,確定了頂點和面,再根據(jù)計算機圖形學的相關知識,就能結合模型視圖矩陣和投影矩陣,實現(xiàn)三維繪圖。但要得到一個真實感的3D 場景,僅僅繪制某些位置的對象是不夠的,還需要考慮到燈光的效果,即著色,著色過程分為頂點著色器和片段著色器?;贕PU 并行化多通道渲染技術,通過對圖形數(shù)據(jù)進行解析、組織、圖元裝配后,進入一條效果渲染通道,輸出幀緩存結果,輸出結果進行下一渲染通道,執(zhí)行多通道渲染著色。一條渲染效果包括多個自定義頂點著色器、片段著色器的組合。在Effect(效果)中組織多個自定義Shader(著色通道),形成圖形數(shù)據(jù)發(fā)光、漸變、浮雕、陰影效果,進而實現(xiàn)實體的動態(tài)表達。
針對動態(tài)單體化,通過矢量數(shù)據(jù)與傾斜模型的結合,利用WebGL 技術,將矢量圖形套疊到傾斜模型上,動態(tài)渲染矢量圖形,實現(xiàn)對應的傾斜模型動態(tài)單體化。再掛接矢量數(shù)據(jù)的屬性信息,實現(xiàn)屬性查詢和管理。采用動態(tài)單體化方式,無需對傾斜模型進行修改,僅需相關矢量信息,采用此種方式實現(xiàn)單體化,由于缺乏矢量數(shù)據(jù)的動態(tài)調度機制,矢量數(shù)據(jù)都是一次性讀取加載,大場景批量數(shù)據(jù)的加載功能和渲染效率有待進一步提高。由于單體模型沒有被物理切割,因此無法實現(xiàn)特定區(qū)域的三維信息統(tǒng)計分析功能,如無法實現(xiàn)選定區(qū)域內的最高建筑物、平均樓高等。
為拓展傾斜模型的應用范圍,需要對傾斜攝影成果進行實體提取和動態(tài)表達等方面進行研究。
針對傾斜模型成果單體化和表達的技術瓶頸,采用三維模型自動化編輯技術和在線可視化技術,實現(xiàn)傾斜模型的單體對象化管理和持久化存儲,基于三維場景的實體動態(tài)表達和空間分析等功能,主要技術路線如圖1所示。
(1)數(shù)據(jù)預處理:收集整理若干典型區(qū)域的傾斜模型數(shù)據(jù)、矢量線劃數(shù)據(jù)等,對數(shù)據(jù)的組織結構、坐標投影、拓撲關系等進行整理加工。
(2)實體模型提?。夯趦A斜航空攝影測量技術、三維空間拓撲技術,利用傾斜模型數(shù)據(jù)和矢量線劃數(shù)據(jù),進行傾斜模型數(shù)據(jù)的物理分割,實現(xiàn)實體對象的三維模型自動提取、紋理重映射等技術方法,輸出開放格式的模型文件。
(3)實體模型屬性提取和持久化存儲:利用三維模型凹凸包擬合技術,對實體模型進行綜合檢查處理,實現(xiàn)模型的表面積、體積、高度等幾何屬性的提取和計算。利用開源數(shù)據(jù)庫存儲三維場景和模型,并進行數(shù)據(jù)和接口封裝,發(fā)布RESTful服務。
(4)實體動態(tài)表達:綜合大型場景LOD 優(yōu)化技術、矢量切片調度技術、WebGL的二三維疊加渲染技術等,基于服務接口,開展實體動態(tài)表達研究,實現(xiàn)實體模型的在線可視化、信息查詢、統(tǒng)計輸出等功能。
3.2.1 數(shù)據(jù)預處理
收集相關區(qū)域的矢量線劃數(shù)據(jù)、傾斜模型數(shù)據(jù)等,首先對數(shù)據(jù)進行處理,處理步驟分為:矢量線劃數(shù)據(jù)處理、傾斜模型處理、矢量切片處理等。
圖1 技術路線
(1)矢量線劃數(shù)據(jù)處理:收集整理相關數(shù)據(jù),通過統(tǒng)一數(shù)據(jù)格式,統(tǒng)一坐標體系,對屬性字段進行規(guī)范化處理,形成標準、通用的矢量圖形文件,接著對圖層中的圖形進行拓撲檢查,檢查圖元的重疊、重復、壓蓋、相交、自相交等拓撲問題,進行圖形的拓撲修正,最后讀取矢量圖元的圖形、屬性等信息,輸出JSON文件,文件內包含WKT格式的圖形信息。
(2)傾斜模型數(shù)據(jù)處理:對傾斜模型成果的整個細節(jié)層次樹進行解析和轉換,按照地物模型的多細節(jié)層次組織規(guī)則和3DTiles 規(guī)范構造三維模型瓦片集。針對原始瓦片集頂層細節(jié)層次模型,使用紋理烘焙技術進行紋理壓縮,形成新的頂層模型,迭代生成更粗的細節(jié)層次模型,直至最終頂層模型數(shù)據(jù)量小于閾值,得到簡略細節(jié)層次模型樹,接著將計算得到的簡略細節(jié)層次模型樹和精細細節(jié)層次模型進行合并,最終得到3DTiles格式的模型瓦片集。
(3)矢量切片處理:在GeoServer中使用GeoJSON-vt擴展庫設置GeoJSON的矢量切片方案,實現(xiàn)矢量數(shù)據(jù)GeoJSON 格式的切片服務,通過OGC 標準的wms服務訪問獲取數(shù)據(jù)。
3.2.2 實體模型提取
綜合利用傾斜模型技術、三維空間物理分割技術,研究可適應多細節(jié)層次傾斜模型的實體提取流程,實現(xiàn)實體模型的自動化物理分割和對大型傾斜場景文件的實體模型自動提取,研究傾斜模型數(shù)據(jù)的R叉樹文件的快速識別,傾斜模型與矢量圖元的圖形映射關系建立,基于空間相交算法的布爾裁切,實體三維模型的紋理重映射烘焙等。
(1)OSGB和矢量圖元建立映射關系。
讀取傾斜模型的最低層級數(shù)據(jù)格式文件,并轉換成obj 模型文件。獲取數(shù)據(jù)文件相對空間坐標信息,構建數(shù)據(jù)文件空間坐標格網(wǎng),然后讀取矢量圖元的空間坐標和空間范圍。通過二維空間相交判斷,獲取與矢量圖元空間范圍相交的數(shù)據(jù)最低層次模型的集合,接著對集合內的每一個數(shù)據(jù)最低層次模型,遍歷其模型的金字塔(LOD)層級文件,生成不規(guī)則R 樹,樹中的每一個節(jié)點都是數(shù)據(jù)模型自身關聯(lián)的子節(jié)點數(shù)據(jù)模型信息,遍歷R 樹,進行矢量圖元圖形范圍與R 樹中當前遍歷節(jié)點的空間范圍相交分析處理,通過不斷迭代最終獲取到與矢量圖元相交的全部數(shù)據(jù)葉子節(jié)點文件,獲取與數(shù)據(jù)葉子節(jié)點對應的obj 模型文件集合,形成相關的映射關系。
(2)模型合并和布爾裁切。
讀取映射關系文件,基于blender 的空間縫合方法,對讀取的obj模型文件集合進行合并,將三角網(wǎng)合并融合,生成一個獨立的obj模型文件,接著對矢量圖元的圖形進行適當?shù)木彌_計算,并拉伸成三維柱體,最后通過Difference裁切方法處理,完成布爾裁切。
(3)模型紋理烘焙。
重建UV,重新建立模型幾何與紋理之間的映射,構建新的紋理貼圖,然后重新計算現(xiàn)有模型頂點的紋理坐標,保證其可以在新的紋理上分布均勻,接著從原有的UV 和原有的紋理圖片中讀取像素色彩信息,并依照現(xiàn)有模型的紋理坐標寫到新的紋理貼圖中去,生成完整的紋理圖片文件,最后關聯(lián)新的紋理圖片到現(xiàn)有的模型的材質,輸出新的模型文件。
3.2.3 實體模型屬性提取和持久化存儲
在實體的基礎上,研究實體的幾何屬性提取方法,實現(xiàn)對所有實體高度、表面積、體積等幾何屬性的計算。優(yōu)化模型空洞的自動提取與修補方法,提高實體模型表面積計算和體積計算的準確性、利用開源數(shù)據(jù)庫進行高效存儲。
(1)實體模型屬性提取。
采用基于面法線的方法計算單個四面體的網(wǎng)格體積,依據(jù)三角形的頂點或四面體元素的順序,依次計算體積,進行體積累加迭代,形成綜合的體積信息。
(2)持久化存儲。
數(shù)據(jù)持久化存儲主要包括傾斜模型入庫存儲和實體模型入庫存儲兩部分。
傾斜模型數(shù)據(jù)的主要內容以樹形結構存儲的細節(jié)層次模型以及相關索引文件,要求存儲數(shù)據(jù)庫需具備非關系型文件數(shù)據(jù)存儲能力和高效讀取等性能,可使用MongoDB 數(shù)據(jù)庫作為傾斜模型數(shù)據(jù)的存儲數(shù)據(jù)庫。利用MongoDB 的GridFS 存儲和檢索3D Tiles 數(shù)據(jù)集中各類數(shù)據(jù),并根據(jù)服務接口的調用方法修改相應的Json文件信息,保證三維場景引擎從讀取文件數(shù)據(jù)到讀取數(shù)據(jù)庫信息的無縫切換,從而兼顧訪問效率和數(shù)據(jù)安全。提取的實體模型有三維圖形的obj 文件、紋理文件等,這些信息互相關聯(lián),也需要利用MongoDB 的GridFS存儲和檢索,通過建立key值建立實體的對應關系,支持實體的批量輸出[5-6]。
實體模型的三維空間信息除可滿足數(shù)據(jù)可視化需求外,還可為三維空間查詢分析提供數(shù)據(jù)支持,要求數(shù)據(jù)庫具備完整的三維空間索引存儲和查詢能力,因此可使用關系型數(shù)據(jù)庫PostgreSQL(含空間擴展模塊)作為模型實體庫,以POLYHEDRALSURFACE 為圖形存儲類型,將實體模型的三角網(wǎng)、表面積、體積、高度、長度、寬度等幾何屬性進行存儲,同時建立空間索引[7-8]。
3.2.4 實體動態(tài)表達
利用大型傾斜模型場景多細節(jié)層次優(yōu)化方法、矢量切片調度方法,研究基于WebGL 的二三維疊加渲染方法,實現(xiàn)表里統(tǒng)一的傾斜模型場景在線三維可視化、實體模型查詢、統(tǒng)計和輸出功能。
(1)大型場景LOD優(yōu)化。
多細節(jié)層次優(yōu)化技術,就是為了預先對數(shù)據(jù)模型作不同程度近似的多個逼近模型,以在實時繪制時根據(jù)當前幀的視覺參數(shù)選用相應的逼近模型進行繪制,能夠在整體上優(yōu)化場景中模型間的多邊形分配,從而實現(xiàn)硬件所能達到的最佳仿真效果。當在不同細節(jié)層次模型之間進行切換時,不同細節(jié)層次模型之間的差異會導致仿真畫面的跳躍感。LOD 模型在顯示時需要從簡化序列中選擇合適的模型,如果相鄰層次之間的多邊形數(shù)差異較大,轉化時會引起圖像的跳躍[9]。項目利用WebGL 技術實現(xiàn)大型傾斜模型場景的實時可視化功能、動態(tài)加載數(shù)據(jù)服務接口定義的三維數(shù)據(jù)資源,以及其他3DTiles 在線數(shù)據(jù)文件。利用Cesium 場景容器,調用三維場景服務接口,基于視覺啟發(fā)加載傾斜模型瓦片集,并利用渲染技巧來精確地混合多級層次細節(jié),合理調用細節(jié)層次瓦片的加載順序。在場景的繪制過程中,依據(jù)物體距離視點在屏幕中心的偏離程度排序所需要渲染的模型。可利用緩存設計、異步調用等數(shù)據(jù)調度策略,來緩解大規(guī)模三維場景可視化數(shù)據(jù)傳輸?shù)钠款i問題[10]。
針對服務器端多用戶請求和數(shù)據(jù)庫頻繁查詢的問題,在服務器設計了數(shù)據(jù)緩沖池,對用戶經(jīng)常訪問的數(shù)據(jù)進行緩存。同樣采用金字塔結構的文件系統(tǒng)對緩存數(shù)據(jù)進行管理,對數(shù)據(jù)進行分層分塊管理和存儲。用戶發(fā)送請求時,首先根據(jù)請求數(shù)據(jù)的分辨率,搜索數(shù)據(jù)所在層級。然后再依據(jù)數(shù)據(jù)的范圍,尋找相應的數(shù)據(jù)緩存。如果緩存存在,就直接獲取數(shù)據(jù),如緩存數(shù)據(jù)找到對應,再向數(shù)據(jù)服務器進行數(shù)據(jù)請求,讀取相關后添加到緩存中。
(2)矢量切片調度。
矢量切片以GeoJSON的形式,繼承了矢量數(shù)據(jù)和切片地圖的雙重優(yōu)勢,具有更靈活,更細粒度的數(shù)據(jù)劃分,能返回請求區(qū)域和相應級別的數(shù)據(jù),渲染樣式可改變和定制。項目利用Cesium 場景容器,通過矢量切片調度策略,動態(tài)加載GeoJSON 信息,可將不同層級的矢量瓦片和細節(jié)層次模型進行貼合顯示。
矢量切片調度策略主要是:使用預定的方式,通過接口請求獲取圖層配置信息,主要包括圖層范圍、樣式配置地址、其他信息等。當圖層被勾選時,綁定三維場景的視角移動結束事件,視角移動之后根據(jù)視角范圍,計算出當前視角內的切片編號。為了避免重復加載對切片編號進行篩選,將需要刪除切片和需要添加切片分離出來,在對新添加的對象異步請求的同時,對不需要的切片進行刪除。當添加切片請求完成時,對請求結果進行篩選、設置樣式等操作之后進行創(chuàng)建、存儲。
(3)實體模型動態(tài)表達。
研究基于GLSL 語言(OpenGL 著色器編程語言)GPU 編程技術,頂點著色器和片元著色器編程,定制渲染效果,實現(xiàn)自定義的渲染管線,在GPU繪制階段,通過多次繪制實現(xiàn)矢量和模型數(shù)據(jù)的融合表達,無須改變原始數(shù)據(jù)存儲結構。項目將基于Cesium所內置的Primitive基類,實現(xiàn)了以Shader邏輯為核心的GLSL實時單體化分割渲染機制,渲染效果如圖2所示。
對于數(shù)據(jù)調度獲取到的每塊矢量瓦片單元,先以圖元為單位拆解出內部包含的幾何對象,構建為基礎二維幾何圖元,然后設置三維單體化底面高度屬性字段、頂面高度屬性字段等必要樣式信息,讀取圖元本身的三維空間位置信息,同時結合樣式配置,提取必要的圖元屬性,構建三維幾何圖元,建立自定義Primitive 繪制對象。為確保海量數(shù)據(jù)渲染效率,對圖元進行合并處理,接著構造GLSL Shader 與JavaScript的基于圖元唯一鍵的關聯(lián)關系,支撐對象屬性拾取,進行實例著色屬性賦值,支撐基于屬性的對象單體化著色,基于編寫的自定義GLSL Shader 頂點著色器腳本和片元著色器腳本,實現(xiàn)瀏覽器渲染管線下的動態(tài)單體化效果渲染。
2018 年自然資源部部長陸昊在海南調研期間提出,自然資源相關業(yè)務系統(tǒng)要由二維系統(tǒng)變成三維系統(tǒng),解決自然資源調查、確權和國土空間用途管控等問題。開展基于傾斜模型的實體提取和動態(tài)表達技術研究,可以充分挖掘現(xiàn)有二、三維數(shù)據(jù)價值,實現(xiàn)實體三維單體模型的動態(tài)提取,服務實體三維建設,應用于后續(xù)三維矢量結構線和白模的構建工作,同時研究實體模型的動態(tài)表達,兼顧在線瀏覽高效性、保真性和實體查詢統(tǒng)計準確性,改善實景三維地理場景“一張皮”和“表里不一”的現(xiàn)狀,可充分發(fā)揮三維地理信息技術優(yōu)勢,服務社會經(jīng)濟發(fā)展需要。
圖2 實時單體化效果