原文:https://www.jianshu.com/p/8a59d8efd454
一、單體化的由來
什么是單體化?“單體化”是指每一個我們想要單獨管理的對象,是一個個單獨的、可以被選中的實體(Entity);即用鼠標點擊時可以顯示為不同顏色(稱為“高亮”)顯示,可以附加屬性,可以被查詢統計等等。只有具備了“單體化”的能力,數據才可以被管理,而不僅僅是被用來查看。
對於人工建模而言,單體化是一個不言而喻的事情。即在人工建模的過程中,自然會把需要單獨管理的對象(如建築、路燈、樹木等)制作為單獨的模型,也是和其它對象分離開的。(當然也有一些時候為了其它方面的一些考慮,人工建模時故意把幾棟樓作為一個對象來制作)

對於傾斜攝影自動化建模而言,其建模機制的原因可簡單歸納為如上圖所示。即在空三之后,首先對所拍攝的影像像對生成稠密的點雲,然后對點雲進行抽稀,再構建三角網,最后貼上貼圖。在這個過程中,是沒有人工干預的,當前的建模算法並不會把建築、地面、樹木等地物區分出來,因此構建出來的是一個連續的TIN網。對於這樣的數據, 本身是無法選中單個建築的,需要進行一定的處理才能實現“單體化”。
而對於大多數應用(除樓僅僅用來看效果或進行量算)而言,是需要能對建築物等地物進行單獨的選中、賦予屬性、查詢屬性能最基本的GIS的能力。因此,單體化稱為傾斜攝影模型在GIS中應用所繞不過的一個坎,是必須要解決的問題。

二、單體化的三種解決思路
(1)最直觀的思路,就是用建築物、道路、樹木等對應的矢量面,對傾斜攝影模型進行切割,即把連續的三角面網從物理上分割開,從而實現單體化。稱之為“切割單體化”。效果如下圖所示:

(2)利用三角面片中每個頂點額外的存儲空間,把對應的矢量面的ID值存儲起來;即一個建築物對應的三角面片的所有頂點,都存儲了同一個ID值,從而實現在鼠標選中這個建築物時,該建築物可以呈現出高亮的效果。這個稱之為“ID單體化”。
ID單體化理解起來相對要難一點,最好能懂一點三維開發的知識。其實就是讓同一個建築模型上,都存儲同一個ID值。從而在三維GIS中呈現出現鼠標點擊后,能高亮顯示這個建築物。如下圖所示:

(3)在三維渲染的時候,動態的把對應的矢量面疊加到傾斜攝影模型上,類似於一個保鮮膜從上到下的把對應的建築物等物體的模型包裹起來,從而實現可被單獨選中的效果。這種憂郁時渲染時動態呈現的,可以稱之為“動態單體化”。如下圖所示:

動態單體化咋一看和ID單體化效果非常像,但它們實現的技術原理是有很大區別的。ID單體化濕需要預先處理數據,把建築物所對應的模型上存儲同一個ID值,而動態單體化則是在渲染時動態繪制出來的。
動態單體化的另外一個誤解:是不是就在用一個半透明的方盒子在傾斜攝影模型外面。其實不是這樣,動態單體化類似於半透明的皮膚衣,是從上到下貼合模型表面,並把模型完整全部合在內的效果。如下圖所示:

三、單體化目的回顧及其優缺點分析
咋一看,第一種思路即“切割單體化”在單體化的道路上最為徹底,畢竟只有這樣,才是真正把連片的模型單獨切割出來了,之后的選中高亮、賦予屬性等也就是順理成章的事情了。因此,也有人說:只有“切割單體化”才是真正的單體化,其它都是假的單體化。
但繼續深入研究,就會發現后面兩種單體化在代價更小的情況下,也能實現對應的要求,且效果更佳。也就是說我們需要審視目的,再綜合利弊來考慮和選擇途徑和方法。
那么,再來回顧一下單體化的目的到底是什么?
單體化本質上是為了解決傾斜攝影自動化建模軟件輸出的三維模型是連片的、無法單獨選中要管理的地物;為了能進行查詢和管理,我們需要單獨選中某個地物,能查詢它對應的業務屬性;但並不是“必然”要求把這個地物從物理上把它和周邊的模型分離開。
當然,“單體化”這個名稱容易給人造成一種誤解,似乎必須物理切割了,才是真正的單體化;要是換做“對象化”或“可管理”等名稱,理解起來就順暢多了。
打破了這個心里障礙,那我們就繼續來分析這三種單體化各自存在的優缺點。
首先我們來看,上述三種單體化的方式,其實都能達成最基本的目標,就是能選中該地物,能賦予屬性並進行查詢。我們再看數據制作過程,“切割單體化”必須先進行模型物理上的切割,由於傾斜攝影數據量一般都比較大,因此切割是一件費時費力的事情,再有就是切割后模型的底邊,會帶有非常明顯的鋸齒(三角面片的邊界)。另外由於三維GIS對模型的空間查詢和分析計算能力遠沒有二維GIS對面的能力完善,因此所能進行的下一步分析計算的能力是非常有限的。
而“動態單體化”則是在三維渲染過程中,動態的把對應的矢量底面套合在模型表面之上,因此就無需提前的預處理,只需要三維GIS軟件和所運行的設備上支持該渲染能力即可;套合后的模型底邊的平滑度是和顯示器屏幕的分辨率一致的,效果會好的太多,另外動態單體化由於是把二維矢量面和三維傾斜攝影模型結合起來了,因此可以充分利用二維GIS平台對面數據的查詢計算分析等能力,各類GIS能力都能充分發揮出來,如查詢周邊地物,制作專題圖等等。如下圖所示:

對於以上分析,我們可以歸納總結一下表:
單體化方法 | 技術思路 | 預處理時間 | 模型效果 | 功能 | 小結 |
---|---|---|---|---|---|
切割單體化 | 預先物理切割把地物分離開 | 長 | 差,鋸齒感明顯 | 弱 | 非特殊情況不推薦使用 |
ID單體化 | 給對應地物的模型賦予相同ID | 一般 | 一般 | 一般 | 在不支持動態渲染的環境中使用 |
動態單體化 | 疊加矢量底圖,動態渲染出地物單體化效果 | 無需 | 好,模型邊緣和屏幕分辨率一致 | 強,所有GIS功能都能實現 | 推薦使用 |
“切割單體化”,還有一個非常致命的問題在於:傾斜模型本身是帶有多層LOD的,切割針對最精細層進行,破壞了數據原生的LOD,也就無法直接加載模型,而只能采用導入的方式。再就是切割一般只是把TIN網分割了,而整塊模型所對應的紋理並不會切割開,因此會出現多份紋理,而重復大量的紋理是最耽誤三維渲染性能的。這一切,都會導致數據量較大時三維瀏覽的性能急劇下降。