摘要:在中,引入一些元數(shù)據(jù)方面的擴展項。不同層級的元數(shù)據(jù)像素級別樣式化渲染不同層級的元數(shù)據(jù)像素級別樣式化渲染配合使用和兩個擴展項,下一代的可以在各個層級存儲元數(shù)據(jù)。例如,水泥地和草地的摩擦系數(shù)可以作為元數(shù)據(jù),影響車輛的行駛速度等。
原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse
原文發(fā)布時間:2021年11月10日
閱讀本文前,需要有足夠的 3D Tiles 1.0 基礎(chǔ)、glTF 規(guī)范基礎(chǔ)、CesiumJS 基礎(chǔ)。
3D Tiles Next 自官方有想法以來,我就一直在跟蹤,無奈年關(guān)將至,業(yè)務(wù)繁忙,現(xiàn)在才著手閱讀和學(xué)習(xí)。
3D Tiles Next 下文會簡稱 Next
,而現(xiàn)行的 3D Tiles 1.0 則簡稱 1.0
,因為官方暫時沒把下一代正式稱為 2.0
.
從組織方式來說,Next 在 Tileset 和 瓦片文件層級均做了優(yōu)化,Tileset 新建了多項擴展,瓦片文件則直接使用 glTF 格式,不再使用舊的 b3dm、i3dm、pnts、cmpt.
從性能考量來說,Next 引入新的空間索引規(guī)則,叫做 Implicit Tilling,即隱式瓦片分割,并介紹了一種空間分割算法:S2。
從領(lǐng)域需求來說,Next 強化了元數(shù)據(jù)、屬性數(shù)據(jù)的組織,創(chuàng)建了 3D Metadata Specification(三維元數(shù)據(jù)規(guī)范)及相關(guān)的擴展。
此次更新不小,除了 Cesium 原班人馬外,還有一個三維大佬 Don McCurdy 在后期添磚加瓦。
除了數(shù)據(jù)規(guī)范本身的更新,前端運行時 CesiumJS 在 1.87.1 版本終于公測了 Next,并提供了新的 glTF 數(shù)據(jù)加載架構(gòu) —— ModelExperimental
,以及更友好的自定義著色器 API —— CustomShader
。
3D Tiles Next
,指的是一組 3D Tiles 擴展項。這些擴展項主要體現(xiàn)在三個方面的增強:
官方關(guān)于元數(shù)據(jù)的限定詞是
semantic
,即語義化的,我覺得“結(jié)構(gòu)化”可能更好一些。
如下圖所示:
鑒于需求的急劇擴張,3D Tiles 擴充了元數(shù)據(jù)方面的功能。在 3D Tiles Next 中,引入一些元數(shù)據(jù)方面的擴展項。主要特點有:
與 1.0 規(guī)范使用 Batchtable(批次表)來存儲元數(shù)據(jù)的目的一致,Next 的元數(shù)據(jù)擴展依舊遵循了性能優(yōu)勢:批量處理。
許多邏輯層面的三維要素(例如某個建筑)及其元數(shù)據(jù),在前端運行時(可以簡單認(rèn)為是 CesiumJS)預(yù)先被成組成批處理,以減小 CPU 的開銷。
元數(shù)據(jù)方面的擴展,分三個方面:
3D 元數(shù)據(jù)規(guī)范 定義了一套類型規(guī)范與數(shù)據(jù)的編碼方式。
3D Tiles 1.0 依賴于 JSON 本身有限制的基礎(chǔ)類型,而 Next 具備更豐富的類型支持,包括類、向量、矩陣等。
元數(shù)據(jù)的編碼方式可以有:
具體細(xì)節(jié)要看規(guī)范。
配合使用 3DTILES_metadata 和 EXT_mesh_features 兩個擴展項,下一代的 3D Tiles 可以在各個層級存儲元數(shù)據(jù)。這些層級可以是:
如下圖所示:
紋素級別是最細(xì)的層級,允許元數(shù)據(jù)在如此細(xì)的粒度上變化。
例如,兩個三角形構(gòu)成一個四邊形,作為一個建筑物的一側(cè)墻面,但是此時它僅僅是“兩個三角形”,在真實世界中墻面還可能會有窗的玻璃、磚的石頭的區(qū)別,在拾取識別時,就可以例用“紋素級別”的元數(shù)據(jù)來辨別什么顏色是什么物體。
下面是一個例子,對傾斜攝影數(shù)據(jù)使用紋素級別的元數(shù)據(jù):
此處有分屏,左側(cè)的顏色就可以很明顯地區(qū)分出墻、窗戶、空調(diào)、屋頂?shù)取皩嶋H物體”,而數(shù)據(jù)的三角面組織卻可以不用在意這些“實際物體”。
在右側(cè),利用紋素級別的元數(shù)據(jù),就可以完成窗戶單體的半透明處理。
除了層次足夠細(xì)致,還要知道數(shù)據(jù)的含義,這就是所謂的“元數(shù)據(jù)的語義”,以便程序代碼知道怎么進行交互編程。
例如,水泥地和草地的摩擦系數(shù)可以作為元數(shù)據(jù),影響車輛的行駛速度等。
各領(lǐng)域的專家可以根據(jù)有關(guān)擴展項來定制自己專業(yè)所需的元數(shù)據(jù),譬如在土方施工中,將材料庫存、各項參數(shù)寫入元數(shù)據(jù),方便代碼計算體積和面積。
3D Tiles Next 在空間分割上做了優(yōu)化,光線追蹤、近鄰搜索這些空間分析、模擬功能從此受益。
在 1.0 中,空間分割體現(xiàn)在 tileset.json 文件中的每個 Tile 的定義,這些定義包括 BoundingVolume(空間范圍體)、瓦片文件的模型以及其下一級的子瓦片等。
據(jù)官方介紹,3D Tiles 1.0 的空間分割方式可以自由搭配選擇,不用局限于傳統(tǒng) 2D 地圖的四叉樹分割。需要注意,子瓦片的空間范圍要小于父瓦片的空間范圍。
下面是 1.0 中介紹的三種空間分割樹結(jié)構(gòu),依次為 KD樹、松散四叉樹、八叉樹:
3D Tiles Next 引入了一個新的擴展:3DTILES_implicit_tiling,它主要的作用是引入一種預(yù)先知曉規(guī)則的空間分割規(guī)則,使得無需顯式記錄瓦片的空間范圍體。這樣,就可以隨機訪問單個或任意多個瓦片了,這樣有益于:
城市級別的流式數(shù)據(jù)、建筑區(qū)域中隨時間更新的數(shù)字孿生變化、飛行器的變化等,這些例子都將受益于上述所說的瓦片隨機訪問機制,而無需走原來的自頂向下的 LOD 層級訪問機制。
上圖表明,城市中的人群大規(guī)模模擬得以實現(xiàn),主要是因為隱式空間索引機制,可以高效率地進行鄰近瓦片的空間查詢。
隱式瓦片分割機制,可以簡潔地呈現(xiàn) Tileset(瓦片集)的空間數(shù)據(jù)結(jié)構(gòu),包括:
上面這張圖,左邊是 tileset.json 的大致示意,右邊則是四級空間分割及其莫頓 Z 序曲線的顯示效果。
與 1.0 中顯式指定空間分割的瓦片相比,隱式分割還可以減小 tileset.json 的體積,降低網(wǎng)絡(luò)壓力。
但是與網(wǎng)絡(luò)壓力相比較,隱式瓦片分割的真正威力在于運行時可以隨機訪問瓦片,而且這些瓦片的空間分割規(guī)則是統(tǒng)一的。
除了空間檢索性能上的考量,隱式瓦片分割還有一個意圖,就是希望與傳統(tǒng) 2D GIS 的 CDB、WMTS、TMS 等規(guī)范集成實現(xiàn)。
3D Tiles Next 引入一項 3DTILES_bounding_volume_S2 擴展,它能與隱式瓦片、顯式瓦片一起使用,定義新的空間范圍體。
S2 分割是一種比四叉樹更好的空間分割,這種分割方式基于一個立方體,它在北極、南極附近的瓦片會比較“薄”,失真較小。同一級別的瓦片的尺寸是接近的。
筆者注:這個算法不太了解,需要閱讀更多資料。
上圖為 WGS84 橢球面上的 S2 Hilbert(希爾伯特)曲線。
傳統(tǒng) 2DGIS 會把同類數(shù)據(jù)放進同一個容器中,這個容器叫做“圖層”,比如高速公路圖層、POI圖層、建筑圖層等,這樣可以統(tǒng)一樣式設(shè)置。
使用 3DTILES_multiple_contents 擴展可以在一組 Tile 中定義“三維圖層元數(shù)據(jù)”,然后將對應(yīng)的三維數(shù)據(jù)綁定至這個組來實現(xiàn)“三維圖層”、“數(shù)據(jù)與元數(shù)據(jù)的連接”。
在 3D Tiles 中使用 3DTILES_content_gltf 擴展,Tile 對象可以直接引用 .gltf
或 .glb
文件,而不是使用舊的 b3dm
、i3dm
瓦片文件。
這樣 3D Tiles 就可以直接利用 glTF 社區(qū)的成果,例如驗證工具、轉(zhuǎn)換工具等。
3D Tiles Next 利用到 glTF 的地方有:
有閱讀 3D Tiles 1.0 規(guī)范的朋友知道,b3dm
和 i3dm
瓦片文件是內(nèi)嵌了 glTF 的二進制格式數(shù)據(jù)的。
上圖展示了 1.0 和 Next 的瓦片文件設(shè)計區(qū)別,1.0 中最具代表性的 b3dm
瓦片文件由頭部元數(shù)據(jù)(b3dm Header)、批次表(BatchTable)和具體模型數(shù)據(jù)(glTF)塊構(gòu)成,而 Next 則直接使用 glb
文件,且使用了 glTF 的 EXT_mesh_features
擴展來替代批次表。
使用 3DTILES_content_gltf 這個 3D Tiles 擴展,瓦片就可以直接引用 gltf 或 glb 文件。如果瓦片中存在邏輯要素信息,則可以在 gltf/glb 中啟用 glTF 的擴展:EXT_mesh_features.
但是如果是 i3dm
,比如一個樹模型要繪制多次(即實例繪制的方式),那么就使用 glTF 擴展 EXT_mesh_gpu_instancing 來實現(xiàn),以替代 i3dm 瓦片。EXT_mesh_features 也可以跟這個擴展一起使用,來記錄每個被繪制后的實例的屬性數(shù)據(jù),如下圖所示:
官方希望直接使用 glTF 的意圖是可以更好地與其他行業(yè)的數(shù)據(jù)進行合作,以提高 3D Tiles 的模型兼容性。
上圖是某個城市的 100 億個點的點云數(shù)據(jù)。
在 1.0 中,點云數(shù)據(jù)是使用 pnts
格式的文件存儲的,包括 FeatureTable(要素表)、Batch Table(批次表),并可以帶 draco 壓縮。
在 Next 中,點云也可以使用 glTF 格式的文件,使用 glTF 中的 EXT_meshopt_compression 擴展即可實現(xiàn)一些運行時(CesiumJS)方面的樣式化、過濾,甚至是點云的元數(shù)據(jù)等??偟膩碚f,Next 對點云這種格式的數(shù)據(jù):
如下圖所示。
在最終敲定 Next 規(guī)范之前,官方還希望使用不同的壓縮方式來補充 EXT_meshopt_compression 這個擴展如何進行點云壓縮,包括 Esri LEPCC 和 Google Draco 等方式。
由于 Next 對瓦片文件的更新替換,不再使用 b3dm、i3dm、pnts 瓦片文件,因此功能上的更新基本上都是 glTF 的擴展。
3D Tiles Next 依舊會使用 glTF 的 KTX 2.0 和 下一代 PBR 材質(zhì)等擴展。
KTX 2.0 是用來支持紋理數(shù)據(jù)的跨 GPU 傳輸、運行時壓縮,減少內(nèi)存、帶寬等,以提升硬件效能,畢竟通過無人機或者衛(wèi)星獲取的圖像的體積可不小。
下一代 PBR 召集了世界 PBR 專家來集思廣益,將 glTF 的材質(zhì)表現(xiàn)提升到一個新的高度。
從發(fā)文時間起,之后的幾個月將完成規(guī)范的設(shè)計。
目前的進度有:
下一代的 3D Tiles 目前沒有定名為 3D Tiles 2.0,而是暫時以擴展項的方式推進。
它解決了一部分 1.0 中的問題,例如把元數(shù)據(jù)從舊的瓦片文件中的 BatchTable、FeatureTable 拆分出來,便于數(shù)據(jù)庫實現(xiàn);拆出來元數(shù)據(jù)后,剩下的三維數(shù)據(jù)可以直接利用 glTF 格式,而 glTF 格式本身又是可以把紋理、幾何分開存儲的。總之,新設(shè)計的靈活性非常強。
除了數(shù)據(jù)方面的問題,還提出了新的空間切分算法 —— 隱式瓦片,這個擴展旨在提高前端瓦片剔除和渲染的性能。
總之,現(xiàn)在的狀態(tài)就是“請灑潘江,各傾陸海云爾”。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/124814.html
摘要:正則表達式一直是里比較難以掌握的點。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標(biāo)志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習(xí)慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學(xué)不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結(jié)下,希望...
摘要:畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是出身,但是也對地圖有些耳濡目染最近在看的東西,就拿做了一個關(guān)于的三維數(shù)據(jù)渲染的練手。 畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是 GIS 出身,但是也對地圖有些耳濡目染;最近在看 WebGl 的東西,就拿 MapboxGL 做了一個關(guān)于 WebGL 的三維數(shù)據(jù)渲染的 DEMO 練手。 首先大致看了一下 MapboxGL 的 GLGS 到圖層...
摘要:畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是出身,但是也對地圖有些耳濡目染最近在看的東西,就拿做了一個關(guān)于的三維數(shù)據(jù)渲染的練手。 畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是 GIS 出身,但是也對地圖有些耳濡目染;最近在看 WebGl 的東西,就拿 MapboxGL 做了一個關(guān)于 WebGL 的三維數(shù)據(jù)渲染的 DEMO 練手。 首先大致看了一下 MapboxGL 的 GLGS 到圖層...
摘要:畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是出身,但是也對地圖有些耳濡目染最近在看的東西,就拿做了一個關(guān)于的三維數(shù)據(jù)渲染的練手。 畢業(yè)兩年,一直在地圖相關(guān)的公司工作,雖然不是 GIS 出身,但是也對地圖有些耳濡目染;最近在看 WebGl 的東西,就拿 MapboxGL 做了一個關(guān)于 WebGL 的三維數(shù)據(jù)渲染的 DEMO 練手。 首先大致看了一下 MapboxGL 的 GLGS 到圖層...
閱讀 2120·2021-11-24 09:39
閱讀 1503·2019-08-30 15:44
閱讀 1954·2019-08-29 17:06
閱讀 3406·2019-08-29 16:32
閱讀 3552·2019-08-29 16:26
閱讀 2662·2019-08-29 15:35
閱讀 3033·2019-08-29 12:50
閱讀 1646·2019-08-29 11:15