VRM の特徴・内容
VR(Virtual Reality)や VTuber などで 「キャラクターや人型のアバター(の 3D モデル)」 を取り扱おうとした場合、従来はアプリケーションごと、3D モデルデータご とに、 独自のシステムを開発したり細かく調整したりする必要がありました。
- 3D モデルデータを取り扱うフォーマットは、仕様が必要以上に複雑であったり、必要な情報が不足している。
- 何でも格納できるので、ファイル每にどのように入っているかを調べる必要がある。
- 「アバターとして使用する」という観点で見ると、必要な情報が不足している。
- ゲームエンジンはアセットとしてビルドする時に取り込むことが想定されていて、ランタイムにロードすることは想定されていないことが多い。
対応ソフトが多い「FBX ファイル」はファイル毎に読めたり読めなかったりします。そのファイルがどのアプリケーションのどのバージョンで出力した FBX なのか…というのを気にしたかたも多いと思います。
VR でのアバター表現が急速に盛り上がる中でこういった状況が続くと、アプリケーション開発者・3D モデルクリエイターにとって二度手間三度手間になってしまいます。 この状況を改善するために、「人型 のキャラクターやアバター」に対象を絞ってモデルデータの差違を共通化・統一し、 ひとつのファイルでランタイムロードしてすぐに使用できるフォーマットを策定しました。
ポータビリティ
- ❗ テクスチャーやマテリアルが別ファイルになっている。絶対パスが記述されている。
- ❗ zip になっている。文字コード、フォルダ構成。
- ✅ テクスチャやマテリアルを含めたすべてが1ファイルにまとまり 簡単にランタイムロード できます。➡️ glb ベースです。
モデル情報を共通化する
- ✅ タイトル・作者名だけでなく、サムネイルや VR 時代に即した、アバターに特化したライセンス情報 を内包できます。 ➡️ Meta
座標系を共通化する
3D モデルを作成したクリエイターや使用したモデリングツールによって「作法」が違いデータの状況がひとつひとつ異なっている。
- ❗ 座標系 (右手系, 左手系, Z-UP, Y-UP etc)
- ❗ スケール (m, mm, cm, inch etc)
- ✅ 右手系 Y-UP
- ✅ メートル単位
モデル操作を共通化する
ポーズ、表情、目線の3つを操作できます。
➡️ 関連して VRM Animation があります。 ポーズ、表情、目線の3つを格納できます。
モーション操作を共通化する
- ❗ 様々な骨(ボーン)の入れ方(ボーンの識別(命名)方法、親子、リグ)
- ❗ 様々な初期姿勢 (A-Pose 、T-Pose、Z-向き、Z+向き)
- ✅ ヒューマノイドを定義し、モーションキャプチャーなどのモーションを再生できます。
- ✅ T-Pose Z+向き
モーションを共通化するには、骨格もある程度共通化することが必要です。 標準のhumanoid bone の構成と初期姿勢 T-Pose を中心に仕様化しています。
vrm-0.x は 右が +X であるように Z-向き でした。 vrm-1.0 で仕様変更で Z+向き です。
vrm-0.x では T-Pose で正規化されていること が必要でした。 vrm-1.0 では制限が緩和されて T-Pose であること、が必要条件になりました。
表情操作を共通化する
- ❗ 表情の表現方法(Morph, Bone, TextureUV, 識別(命名)方法, 粒度(喜怒哀楽, 顔の部品単位の変形(左口角上)))
- ✅ 「喜怒哀楽」 「瞬き」 「あいうえお」といった標準の顔操作が定義されていて以下のようなことができます。
- ユーザー操作で表情を選択
- 音声からリップシンク
- ランダムで瞬き
- フェイシャルキャプチャーを割り当てる
- ➡️ BlendShape
vrm-1.0 では喜怒哀楽に驚が追加されました。
視線操作を共通化する
- ✅ 3 種類の視線制御に対応しています。
- ➡️ ボーンによる視線
- ➡️ BlendShape による視線
- ➡️ TextureUV による視線
マテリアルを共通化する
ゆれものなどの自動的な要素を共通化する
- ✅ キャラクターの髪の毛などについて、物理エンジンに依存しない「揺れ物」標準実装があります。
- ➡️ SpringBone
vrm-1.0 では constraint が追加されました。
VR設定を共通化する
- ❗ 一人称視点を実現するためのアバター上のHMDの正確な位置はどこか
- ❗ 一人称視点からアバターの頭部を非表示にしたい。具体的にはどこを消すのか
- ✅ VR でのアバター利用のための 「一人称視点再現のための情報」 があります。
- ➡️ FirstPerson
vrm0.x では視線基準位置と、HMDが別れていました。 vrm-1.0 では共用になります(HMDの精確な指定が分らない)