下一代 3DTiles(Next)詳解 [2] 瓦片資料內容擴充套件之 3DTILES_content_gltf

SukiLuga發表於2022-01-22

依賴於

3D Tiles 1.0

可選與必需

如果用到了 glTF 作為瓦片內容檔案,那麼它必須同時出現在 extensionsUsedextensionsRequired 陣列中,即“必需的”。

1. 簡介

image-20211125030956707.png

上圖中有一個瓦片引用了 house.glb,而這個 house.glb 的模型就是一個房子,可以直接被 3D Tiles 的瓦片引用。此處 "content": "house.glb" 是簡略寫法。

這個擴充套件允許 3D Tiles 在瓦片檔案上直接使用 glTF 2.0 模型檔案。同時支援 JSON 格式的 gltf 檔案和二進位制的 glb 檔案。

使用這個擴充套件可以簡化資料的生產,主要就是利用好 glTF 的工具鏈。大多數時候,1.0 的瓦片資料可以輕易地轉為 glTF 格式。

參考 遷移指南

2. 示例 JSON

具體的 JSON 模式定義在文末。

執行時引擎(通常是 CesiumJS)必須在載入瓦片內容之前,確定相容性問題。

比如,某些 glTF 模型檔案用到了一些 glTF 擴充套件,那麼這些額外的 glTF 擴充套件就必須寫在 Tileset 的頂級屬性 extensions 中的 3DTILES_content_gltf 物件中。

舉例:

{
  "asset": {
    "version": "1.0"
  },
  "extensionsUsed": ["3DTILES_content_gltf"],
  "extensionsRequired": ["3DTILES_content_gltf"],
  "extensions": {
    "3DTILES_content_gltf": {
      "extensionsUsed": ["EXT_mesh_gpu_instancing"],
      "extensionsRequired": ["EXT_mesh_gpu_instancing"]
    }
  },
  "geometricError": 240,
  "root": {
    "boundingVolume": {
      "region": [
        -1.3197209591796106,
        0.6988424218,
        -1.3196390408203893,
        0.6989055782,
        0,
        88
      ]
    },
    "geometricError": 0,
    "refine": "ADD",
    "content": {
      "uri": "trees.gltf"
    }
  }
}

可以看到,這份入口檔案的 extensions 屬性,下有一個 3DTILES_content_gltf 物件,其下又有兩個與 Tileset 類似的 extensionsUsedextensionsRequired 陣列。

含義是類似的,extensionsUsed 陣列表示 glTF 用到了哪些擴充套件,extensionsRequired 陣列表示必需有這些擴充套件才可以正常使用。

上面這份資料就表示,root 瓦片的內容檔案 trees.gltf 模型,用到了 glTF 規範中的 EXT_mesh_gpu_instancing 擴充套件,而且必需要用到這個擴充套件。

附 3DTILES_content_gltf 模式定義

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "tileset.3DTILES_content_gltf.schema.json",
  "title": "3DTILES_content_gltf extension",
  "type": "object",
  "description": "3D Tiles extension that allows a tileset to use glTF models directly as tile content.",
  "allOf": [
    {
      "$ref": "tilesetProperty.schema.json"
    }
  ],
  "properties": {
    "extensionsUsed": {
      "type": "array",
      "description": "An array of glTF extensions used by glTF content in the tileset.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "extensionsRequired": {
      "type": "array",
      "description": "An array of glTF extensions required by glTF content in the tileset.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "extensions": {},
    "extras": {}
  }
}

相關文章