下書きのまましばらく放置されたのでインターネットの海に放流
目標
hikaliumのアバターをコードで定義して、GUIを用いることなく服を着せ替えたりパラメーターを操作するなどできるようにしたい
先行研究
背景情報
VRM形式
人型アバターで最近主流になりつつあるファイルフォーマット。glTF形式をベースにしている。
glTF形式
- 仕様書: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
- fadisさんによる解説: https://fadis.booth.pm/items/2366496
調査
VRM/glTFを理解する
bin領域のデータのエンディアン
Little Endianにしなければならない(MUST)
- https://github.com/KhronosGroup/glTF/commit/5673994f6f7254a11938ba13eff52667c7a4f3f4
- https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#buffers-and-buffer-views-overview
All buffer data defined in this specification (i.e., geometry attributes, geometry indices, sparse accessor data, animation inputs and outputs, inverse bind matrices) MUST use little endian byte order.
UV map
https://docs.blender.org/manual/ja/dev/addons/import_export/scene_gltf2.html#uv-mapping
KHR_texture_transform
Animation
three-vrm example の humanoidAnimation のデモがデバッグに使えそう
実装
ああああああああ動いたあああ!!!!(primitiveのattributeにTexCoords(0)を追加し忘れるというただの凡ミスだった…最小ケースのデバッグ大事) pic.twitter.com/eINOocaSVU
— hikalium (@hikalium) 2023年1月4日
とりあえずVRMをglTFとして読み込んだら、テクスチャ付きでprimitive単位に分割して再出力することはできた。
また気力が湧いたら続きをやろう。