2019-09-24 (火)
VRMファイルを読んでWebGLでレンダリングしてみる.といっても,THREE.jsのGLTFLoaderに突っ込んで終わりだった.物によってはマテリアル周りの対応が必要っぽいけど,とりあえず表示は一瞬.
アニメーションさせるためにボーンの情報を取得する必要があるのだけど,UnityのHumanoid互換のボーンのリストがuserData.gltfExtensions.VRM.humanoid.humanBones に入ってる.ただ,GLTFLoaderで読み込んだ後のオブジェクトからはノードIDの情報が失われてるので困る.glTFのjsonデータの中を見ればIDからオブジェクト名がわかるので,さらに名前から探し出すようにする.
アニメーションは一旦BVH形式のデータを読み込んでみる.BVHは右手座標系なのでOpenGLでそのまま使えると思ったけど,多くのデータが+Xが左で+Zが前になっていた.あと単位もメートルじゃないことが多い.この辺はファイルフォーマットでは規定されてないみたいだった.ボーン名の作法は何通りかあるっぽいけど,とりあえず大雑把に変換テーブル用意.
とりあえず,公式のモデルのニコニ立体ちゃんを読み込んでみた.
BVHはもともとモーションキャプチャ用に作られたものだけあって,各ボーンのパラメータを毎フレーム並べただけの単純なデータなので,扱いは楽だけど拡張性はあまり無さそう.使わないCHANNELにデータ入れて無理やり何かすることはできそうだけど.