11月10日,Cesium的CEO Patrick Cozzi發表了一篇《Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse》的文章,正式向社區介紹即將到來的下一代3D Tiles規范設計思路(文末有獲取“3D Tiles Next Overview”的獲取方式)。
按照官方的規划,3D Tiles Next設計的內容會通過現有3D Tiles 1.0草案擴展的方式體現,同時這些內容未來有可能會被3D Tiles 2.0,主要新增的內容包括如下三個方面:
1、更高效的傳輸語義元數據,其實這個部分簡單點來說就是屬性數據的掛接,這樣一來應用就可以支持根據屬性進行樣式的渲染以及屬性的查詢,與3D Tiles 1.0 使用Batch Table進行元數據的存儲類似,3D Tiles Next仍然利用了具有顯著性能優勢的“批處理”方式,這樣一來就可以保證很多邏輯上獨立的要素,比如建築物以及他們的元數據,在調用圖像渲染API的時候就可以通過“pre-batch”的方式處理成一個mesh以及一個draw call,但是在渲染過程中他們依然可以被獨立的標識出來,這樣就能保證逐瓦片的運行時的處理動作以及CPU的低消耗。
3D Tiles Next在元數據擴展方面的設計主要集中在三個方面:
-
預先定義好的類型系統以及更多的編碼選項,比如二進制或者JSON;3D Tiles依賴於JSON的類型系統,而3D Tiles Next則具有更強的類型,包括classes, vectors, and matrices,元數據的編碼方式包括如下三種方式:
通過二進制方式,這個時候元數會和同一個mesh存儲在一起,主要針pre-vertex的場景;通過JSON方式,這種方式主要應用於pre-tile的場景;通過柵格方式,這種方式主要針對pre-texel的場景
-
更多存儲粒度的選項,比如逐像元和逐瓦片;3D Tiles Next在元數據的掛接顆粒度上自由度更大,通過使用3DTILES_metadata 和EXT_mesh_features (a glTF extension)的方式支持如下幾個級別的元數據存儲:
per tileset/per tile or tile content group(這個content group其實很類似於gis中的圖層概念)/per feature/per GPU instance/per vertex/per texel
-
元數據中增加語義含義,促進特定領域的語義系統的擴展支持;3D Tiles Next 旨在在整個世界的數字表示中實現類似游戲的元宇宙體驗。在那個尺度上,不僅需要標識每個城市、每個建築物、每個房間、每個門把手和每個對象的元數據,我們還需要知道元數據的語義,以便不同的應用程序知道元數據如何影響交互.。例如,混凝土與草地的摩擦系數會影響車輛的速度,並且知道門打開的方向會影響人群模擬。
3D Tiles Next 提供元數據基礎以促進生態系統,其中領域專家可以創建 3D Tiles 擴展來定義特定領域元數據和每個屬性語義的字典。例如,土方工程施工可以為庫存中的材料(例如石頭或粘土)定義語義,並為預先計算的參數定義語義以在運行時加速體積和面積計算。
2、通過空間索引支持大規模的模擬和分析;在 3D Tiles 1.0 中,空間剖分的結構是顯示的在tileset.json 文件中明確定義,即每個瓦片的邊界體積、內容和子瓦片,一直遞歸到葉瓦片,但是這種結構不太適應未來如下三類場景的需求:
-
在大規模的模擬方面,需要能夠在單個服務器或者跨多個計算單元場景下,支持高效的的 k最近鄰和范圍查詢;
-
光線追蹤分析,光線跟蹤和空間查詢在均勻的空間索引下可以取得更高的效率;
-
3D Tileset的一個子集需要被部分更新,比如一個城市模型中的一棟樓需要被更新;
所以在3D Tiles Next中, 就引入了 3DTILES_implicit_tiling 擴展,該結構的設計主要包括如下幾個方面:
-
默認采用四叉樹或者八叉樹規則剖分;
-
為層級結構中的每個瓦片,隱式的瓦片結構在同一個binary buffer存儲兩塊信息:瓦片的可達性和內容可達性,比如下面這個例子,四叉樹的層級+坐標會通過Morton Z碼進行降維處理,這種降維的線性存儲默認具備空間自相關性的特點,空間上相近的內容在物理存儲上也會連續存儲,這樣便於計算機的快速獲取。
-
模板 URI 定義用於隨機訪問瓦片的 URI;
3、與glTF軟件以及衍生生態系統集成;3D Tiles Next使用 3DTILES_content_gltf來進行glTF的集成,通過這個配置項瓦片的內容就可以直接引用一個.gltf或者是.glb的文件,而不是引用一個嵌入了glTF的.b3dm或者是.i3dm。通過這種方式,說白了3D Tiles就可以直接使用glTF的一些成果,這樣自己就專注做好核心的內容就好了,畢竟之前獨立推進的b3dm或者i3dm的設計思路和glTF都是類似的,而且也是在嵌入了glTF的基礎上實現的,Cesium也給出了集成模式下,3D Tiles Next和之前實現的差別:
針對以前b3dm的使用場景,3D Tiles Next中的屬性直接存儲在了EXT_mesh_features擴展中,而不是Batch Table
針對以前i3dm這個使用場景場景,3D Tiles Next 直接使用 glTF 引用,使用 EXT_mesh_gpu_instancing 進行實例化,並使用 EXT_mesh_features 替換BatchTable以存儲元數據。
另外一個變化就是,3D Tiles 1.0中對點雲的支持方案是:點雲數據存儲在一個.pnts二進制文件,一個feature table用於存儲點的幾何屬性,一個Batch Table存儲元數據,使用Draco進行壓縮。而3D Tiles Next 中的點雲會利用帶有EXT_meshopt_compression壓縮的glTF來支持,點的幾何數據存儲在glTF中,元數據存儲在EXT_mesh_features中;頂點和法線的壓縮可以利用EXT_meshopt_compression。
在Cesium的藍圖規划中,未來元宇宙會有很大的機會,3D Tiles Next擴展還需要能夠跨設備的支持將這種類似於游戲的地理空間體驗帶到開放的元宇宙領域,包括當下和未來出現的VR和AR穿戴設備。在3D Tiles Next標准的開發過程中,Cesium和Maxar公司保持了緊密的合作,以保證3D Tiles Next能夠滿足建模和模擬領域中在訓練、仿真和操作過程中對高效實時的地形數據的需求。
關於3D Tiles Next更多的介紹請訪問github的地址:
https://github.com/CesiumGS/3d-tiles/tree/main/next