業務數據輸出爲3DTiles模型

最近的公司項目要求實現一個將業務數據轉3DTiles模型文件的功能。這裏記錄一下實現要點。
由於業務數據本身可能是多種多樣的,雖然我接的需求是對應的帶有具體業務數據的GIS數據。但總之這裏就認爲業務數據本身是可以直接轉換成頂點,索引等圖形數據。
另外這項業務需求中輸出的可渲染內容格式爲B3DM,所以主要以此出發來考慮實現。
總的來說,該過程的主要要點如下:
1、3DTiles文件的生成。
2、B3DM的生成。
3、binary gltf的生成。
相關文檔:
3DTiles文件格式glTF2.0文件格式B3DM文件格式
其實上述3個文檔看完基本就已經明白了整個輸出流程了。
下面是流程記錄。

1、3DTiles文件的生成

簡單的說,一個3DTiles文件由主json和若干可渲染內容的文件組成。其中主json描述了3DTiles瓦片的組織形式、每個瓦片的變換、瓦片間細化規則、每個瓦片的實際可渲染內容路徑等信息。
所以針對3DTiles的主json輸出,主要需要考慮的就是:
1、將業務數據合理劃分爲瓦片。確保根據geometric error和refine屬性,生成的瓦片,能夠合理的進行LOD。
geometric error的計算,官方並沒有給出確定的公式或建議,只能根據經驗和業務邏輯自己調整。
2、對於座標變換,glTF默認的座標系如下:
在這裏插入圖片描述
而以具體的顯示端的圖形庫爲例,例如cesium,它用於具體的圖形顯示時的座標系是地心地固座標系(Cesium.Cartesian3中xyz的具體意義),如下:
在這裏插入圖片描述
因此,3DTiles主json中節點的transform在計算時,需要將這些問題考慮進去。另外計算transform需要一定的線代知識,主要是平移、旋轉和縮放。

2、B3DM文件的生成

B3DM文件的組成格式在相關文檔中有詳細敘述,大致可以劃分如下:
在這裏插入圖片描述
可以捨棄掉一些對於業務需求不適用的字段。例如batch table,在本次做的業務中完全不需要,這些字段直接不輸入即可。
此外B3DM以及binary glTF由於是二進制文件,需要按照文檔要求的字節對齊和字節序輸出。

3、binary glTF的生成

在2中的結構圖可以看到,binary glTF除header外主要包含chunk[0]和chunk[1]兩個部分,其中chunk[0]是Structured JSON content。chunk[1]對應是一個binary buffer數組,其中的每一個buffer可能是頂點,索引,材質等的二進制數據之一。總之文檔中寫的很詳細,按照文檔輸出即可。這一步涉及的就是將具體的數據轉換爲可渲染內容。理論上來說,這一步生成的binary glTF直接輸出爲文件後,是可以改後綴爲.glb,然後在任意支持glb格式的3D模型查看器中看到的文件。
大概的流程就是這樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章