PITM数据格式

PITM 是 glTF-2.0 和独特扩展及附加功能的组合。PITM 以 GLB 容器格式序列化。扩展的规范在 Protocol Buffers 中进行了描述。

Python 示例代码包括一个实用程序类,用于使用某些 PITM 规范导出工艺品和配件。请参阅下面的文件。

https://github.com/ClusterVR/PITMSample/blob/main/python/pitm.py

glTF结构

PITM 必须是有效的 glTF。

PITM 只包含一个场景。此外,不可引用外部资源(例如缓冲区 URI)。所有纹理、网格等数据必须包含在 GLB 文件内。

glTF 顶层需要一个 ClusterItem extension,每个节点需要一个 ClusterItemNode extension

PITM 的基本结构对于工艺品和配件来说是相同的,但各自可用的功能不同。

工艺品

请遵循 工艺品限制。可以使用 glTF 标准材质,例如 pbrMetallicRoughness。

配件

请遵循 配件限制

Item 仅有 Item.metaItem.accessory_item 可用,并且这两个字段是必填字段。
ItemNode 中的字段不可用于配件,但需要一个空的 ItemNode。

材质只能使用 MToon。MToon 参数在 glTF 材料的 ClusterVRM0MToon extra 中进行了描述。

ClusterItem extension 和 ClusterItemNode extension

顶层需要 ClusterItem extension。

"extensions": [
    "ClusterItem": {
      {"item": "URL-safe base64 编码的 message Item"}
    }
]

每个节点都需要 ClusterItemNode extension。

"extensions": [
    "ClusterItemNode": {
      {"itemNode": "URL-safe base64 编码的 message ItemNode"}
    }
]

Item 和 ItemNode 的规范在 proto3 中描述。请参阅下面的文件。

https://github.com/ClusterVR/PITMSample/blob/main/pitm.proto

对于 URL 安全的 Base64 编码,请使用 RFC 4648 的 Base 64 编码(URL 和文件名安全字母表) 的变种。

  • 后面没有 =
  • 使用 -_ 代替 +/

示例:URL 安全的 base64 编码的 ItemNode “OiQKIgogCg4KDAAAAAAAAAAAmpmZPRIOCgwAAAA_AAAAP5qZGT4”

ClusterVRM0MToon extra

在 PITM 中,MToon 存储在 glTF 材料的 extras 中,作为 ClusterVRM0MToon

MToonMat 中的数据遵循与 VRM-0.x 中 materialProperties 的每个元素相同的格式。

{
  ..., // material 的其他内容
  "extras": {
    "ClusterVRM0MToon": {
      "MToonMat": {
        "shader": "VRM/MToon",
        "renderQueue": {...},
        "keywordMap": {...},
        "tagMap": {...},
        "floatProperties": {...},
        "textureProperties": {...},
        "vectorProperties": {...}
      }
    }
  }
}