v0.63.2
glTF拡張の実装
UniVRM-0.63.2
から UniGLTF
の構成が変わって、 extensions
/ extras
の実装方法が変わりました。
GLTF 拡張とは
glTF
は各所に extensions
, extras
が定義してありその中身を拡張できます。
extensions
(またはextras)asset.extensions
(またはextras)meshes[*].extensions
(またはextras)materials[*].extensions
(またはextras)
など。
extensions
はオフィシャルに仕様を策定して JsonSchema
として公開します。
extensions
は、{ベンダー名}_{拡張名}
という命名規則です。
ベンダー名は、 https://github.com/KhronosGroup/glTF に申し込んで登録できます。
extras
は登録せずにアプリケーション独自に拡張する場合に用います。仕組みは同じです。
This enables glTF models to contain application-specific properties without creating a full glTF extension
UniGLTF の extensions
v0.63.0
以前は、GLTF 型
の extensions
フィールドに、GLTFExtensions
型を定義して、VRM
フィールドを定義するという方法をとっていました。
class VRM
{
}
class GLTFExtensions
{
public VRM VRM;
}
class GLTF
{
// すべての拡張の型をコンパイル時に知っている必要がある。動的に拡張できない
public GLTFExtensions extensions;
}
この設計だと GLTF と拡張を別ライブラリとして分離することができませんでした。
v0.63.1
から設計を変更して、すべての extensions/extras
に同じ型の入れ物を使うように変更しました。
UniGLTF は import/export
の具体的な内容を知らずに中間データの入れ物として扱います。
// extensions / extras の入れ物として使う型
// 実行時は、 glTFExtensionImport / glTFExtensionExport を使う
public abstract class glTFExtension
{
}
class GLTF
{
// UniGLTFは具体的な型を知らない。利用側が処理(serialize/deserialize)する
public glTFExtension extensions;
}