柚子快報邀請碼778899分享:3DTiles生產(chǎn)流程與規(guī)范
柚子快報邀請碼778899分享:3DTiles生產(chǎn)流程與規(guī)范
一篇19年整理的比較老的筆記了。更多精彩內(nèi)容盡在數(shù)字孿生平臺,關(guān)注公眾號:sky的數(shù)孿技術(shù),技術(shù)交流、源碼下載請?zhí)砑覸X:digital_twin123
瓦片切分
標(biāo)準(zhǔn)的四叉樹切分對于均勻分布的地理數(shù)據(jù)切片非常有效,但是這樣均等的切分不適用于隨機分布、不均勻分布的地理數(shù)據(jù),當(dāng)?shù)乩頂?shù)據(jù)稀疏分布的時候,均等的四叉樹就不再高效,此時可以考慮用緊湊的包圍盒代替均等的包圍盒。
此外,對于上述稀疏不均勻分布的地理數(shù)據(jù),還可以用KD樹的切分方法。KD樹的方法需要設(shè)置最大深度d。具體切分步驟如下: (1)選擇一個坐標(biāo)軸,作為本次切分的基礎(chǔ)坐標(biāo)軸,計算所有幾何體在該坐標(biāo)軸上的中心值。 (2)以該中心值為界限將整個區(qū)域分為兩塊子瓦片,同時幾何體也分為兩組,分別劃入子瓦片中。 (3)針對子瓦片重復(fù)上述操作,每次切分時旋轉(zhuǎn)一次坐標(biāo)軸作為新的基礎(chǔ)坐標(biāo)軸,每次切分相當(dāng)于樹結(jié)構(gòu)的深度增加一層,當(dāng)樹的深度大于d時停止切分。
KD樹會將區(qū)域中的幾何體分為兩部分,所以這種方法生成的樹結(jié)構(gòu)具有較好的均衡性,也就是子瓦片中的幾何復(fù)雜度都相對均勻。但是因為切分的的子瓦片只有兩份,所以會產(chǎn)生相對較深的樹結(jié)構(gòu),不適合大型數(shù)據(jù)集的切分。
傾斜攝影或點云建模
一切工作的開始是確定采集范圍,根據(jù)采集范圍創(chuàng)建索引并分割采集區(qū)域,創(chuàng)建索引得到索引樹,分割區(qū)域得到瓦片包圍盒的經(jīng)緯度范圍,同時根據(jù)既定的文件組織結(jié)構(gòu)對保存各區(qū)域數(shù)據(jù)的瓦片文件命名。 接下來按照采集區(qū)域進(jìn)行采集,在采集過程中,可以一次性采集區(qū)域中多個建筑,或者使用設(shè)備逐個采集,這樣得到的可能是包含多要素或單要素的格網(wǎng)模型。因為三維格網(wǎng)是有環(huán)境噪聲的,所以需要用去噪方法將其中表示為建筑物的部分提取為要素化的三維模型。如果前面的采集對象為單體建筑物,則需要通過模型合并集中單體模型到一起,即合并成包含多個建筑物要素的模型文件。 多要素模型向下要得出多個參數(shù):一是根據(jù)多要素模型文件中的高度范圍補充之前瓦片包圍盒缺少的高度信息,二是將多要素模型通過地理坐標(biāo)轉(zhuǎn)換得到瓦片內(nèi)數(shù)據(jù)的包圍盒(進(jìn)一步得到整個瓦片數(shù)據(jù)的地理坐標(biāo)),并根據(jù)空間一致性檢查修正瓦片包圍盒,對模型超出的邊界進(jìn)行擴張,進(jìn)而擴張父節(jié)點包圍盒邊界。三是根據(jù)對幾何體誤差的規(guī)定計算當(dāng)前模型文件的幾何體誤差。四是將多要素模型轉(zhuǎn)換為gltf格式,根據(jù)既定的局部框架,可以將局部矩陣集成到gltf中或者放到瓦片元數(shù)據(jù)中。 最后進(jìn)行數(shù)據(jù)裝配:一是要把多要素gltf結(jié)合屬性數(shù)據(jù)組裝為瓦片數(shù)據(jù)文件b3dm,二是把瓦片文件url、包圍盒、數(shù)據(jù)包圍盒、幾何體誤差以及可能作為參數(shù)的瓦片地理位置轉(zhuǎn)換的局部框架矩陣組裝成瓦片元數(shù)據(jù)。三是把瓦片元數(shù)據(jù)與索引樹構(gòu)造為對應(yīng)的JSON樹,用來構(gòu)建tileset.json文件。最后完成構(gòu)造3DTiles的所有工作。
地理要素數(shù)據(jù)集建模
首先數(shù)據(jù)源為地理要素數(shù)據(jù)集,坐標(biāo)為WGS84坐標(biāo)系,然后通過投影轉(zhuǎn)換工具得到投影坐標(biāo)系下的要素數(shù)據(jù)集。地理坐標(biāo)系統(tǒng)下的要素數(shù)據(jù)集用來構(gòu)建瓦片索引和分割區(qū)域,可以得到索引樹、瓦片url、瓦片包圍盒、數(shù)據(jù)包圍盒。投影坐標(biāo)系下的要素數(shù)據(jù)集用于接下來的要素化建模,在區(qū)域分割的同時對投影坐標(biāo)系下的要素按照區(qū)域分組,獲得與區(qū)域?qū)?yīng)的要素組,對每一組要素集計算幾何體誤差。 將要素組導(dǎo)入到建模軟件中,根據(jù)建筑物的高度以及紋理圖片進(jìn)行建模。可以構(gòu)建多要素的模型或者單要素的模型,若進(jìn)行單要素建模則需要再進(jìn)行模型的合并。 然后將多要素模型通過格式轉(zhuǎn)換成多要素gltf,再將其和要素組中的屬性數(shù)據(jù)一起組裝成瓦片文件b3dm。同時,瓦片url、瓦片包圍盒、數(shù)據(jù)包圍盒、幾何體誤差構(gòu)成瓦片元數(shù)據(jù),與索引樹一起構(gòu)成JSON樹,并寫入tileset.json文件中,最后形成完成的3DTiles。
地理要素數(shù)據(jù)的3DTiles生產(chǎn)
3.1 下載shp數(shù)據(jù),對屬性數(shù)據(jù)進(jìn)行補齊,增加建筑物高度字段。 3.2 利用ArcGIS對shp數(shù)據(jù)進(jìn)行投影變換。 3.3 將整個區(qū)域根據(jù)LOD準(zhǔn)則進(jìn)行劃分(一般選取四叉樹分割),選取一些大型或標(biāo)志性建筑作為根節(jié)點,然后根據(jù)四叉樹分割的四塊區(qū)域作為根節(jié)點的子節(jié)點進(jìn)行存儲。這樣就相當(dāng)于生成了5個shp文件,然后進(jìn)一步得到tileset.json文件。 3.4 將包含部分地理要素的shp文件導(dǎo)入到建模軟件中建模。首先將劃分后的shp文件導(dǎo)出為CAD文件,然后將CAD文件在3ds MAX中加載。因為加載到3ds MAX中的CAD是以線的形式存儲的,所以需要將線轉(zhuǎn)換為可編輯多邊形。之后通過編組、平移、解組的方式將所有數(shù)據(jù)移動到坐標(biāo)原點附近,這樣操作的目的是使瓦片模型數(shù)據(jù)采用局部空間直角坐標(biāo)框架。對模型的構(gòu)建主要使用面的擠出功能,同時使用高清照片進(jìn)行貼圖。建模完成后還要將要素的id編輯到場景下對應(yīng)的根節(jié)點名稱中,用于后面的_BATCHID的添加與屬性數(shù)據(jù)的 3.5 接下來是進(jìn)行b3dm瓦片的轉(zhuǎn)換。首先將3ds Max建模后的模型數(shù)據(jù)導(dǎo)出成obj文件,然后將obj文件轉(zhuǎn)換成glb文件,再將glb與屬性數(shù)據(jù)根據(jù)場景根節(jié)點預(yù)先記錄的id號進(jìn)行映射,構(gòu)造b3dm。最后,將b3dm按照tileset.json中的url放置到指定文件位置,至此3DTiles構(gòu)建完成。
柚子快報邀請碼778899分享:3DTiles生產(chǎn)流程與規(guī)范
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。