Skip to content

Instantly share code, notes, and snippets.

@hkrn
Last active June 19, 2024 17:06
Show Gist options
  • Save hkrn/d977095004c923ea60412161989fc1e5 to your computer and use it in GitHub Desktop.
Save hkrn/d977095004c923ea60412161989fc1e5 to your computer and use it in GitHub Desktop.
PMD/PMX と glTF/VRM の機能比較

PMD/PMX と glTF/VRM の機能比較

VRM の基本情報

VRM はどうやって作るのか?

公式サイト にあるように UnityUniVRM を入れて出力する。VRM は以下の 厳密な定義 があるため、 最終出力 は Unity + UniVRM を使うことになる。

  • モデルは原点に位置する
  • モデルは-Z向き
  • モデルのヒエラルキーは Y-UP
  • モデルのメッシュは Y-UP
  • モデルのヒエラルキーは T-Pose
  • モデルのメッシュは T-Pose
  • ボーンに回転を入れない
  • ボーンにスケールを入れない
  • ヘッドボーンは真正面を向いている

glTF (glb) ファイルの拡張子を VRM にリネームして読み込むことも一応可能だが、上記の定義を全て満たす必要があるため正しく表示されなくなる可能性が高い。

VRM を読み込むには?

VRM そのものに対応したモデリングソフトは 2018/7/15 時点で存在しない。

中身は glTF のバイナリ形式である glb に VRM の拡張情報を付加したものなので glTF に対応するモデリングソフトであれば読み込み自体はそれで可能。ただし、VRM の拡張情報は失われる。

  • Blender
  • Metasequoia
  • Xismo
    • glTF 読み込みに対応していないため、未対応

VRM を再編集する際は VRM を glb に拡張子を変更し一回 FBX で出力し、それを Unity + UniVRM に流し込むフローが基本となる。MeshSync 使ってやる方法が効率的かもしれない。

PMX/PMD と glTF/VRM の機能比較

要約すると glTF/VRM は PMD/PMX と比較してかなり制約が多く、MMD 特有の機能はほとんど使えないとみてよい。

頂点

  • 頂点、法線、テクスチャ座標はある
  • ボーンマッピングはBDEF1/2/4 のみ
    • SDEF や QDEF は利用不可
  • エッジは MToon シェーダを利用すれば利用可能
    • 頂点単位のエッジ幅の設定は不可能
  • 追加 UV は利用不可

材質

  • VRM の仕様として事前に用意されたシェーダで調整する
    • Unlit または MToon
    • Unlit はテクスチャをそのまま表示する
      • 環境光/拡散色/反射色は存在せず、テクスチャで全て表現する
      • 関連でトゥーンとスフィアマップは利用不可
    • 独自シェーダは利用不可

  • 三角形で扱う
  • ポリゴン数制約は VRM に対応するアプリケーションに依存する
    • 表記が明記されてなければ基本的には制限なしとみてよい

ボーン

  • 純粋な変形のみ
    • PMD/PMX にあるボーンの機能は IK を含めて利用不可
    • 全て自前で相当する機能を実装しなければならない
  • glTF ではジョイントと呼ばれる

モーフ

  • ブレンドシェイプという名前で存在するが、頂点モーフのみ
    • グループ、ボーン、材質、追加UV のモーフは利用不可
  • モーフの種類及びパネルは存在しない
  • 以下の事前定義されたブレンドシェイプがある
    • A
    • I
    • U
    • E
    • O
    • Blink
      • まばたき
    • Blink_L
      • ウィンク
    • Blink_R
      • ウィンク右
    • Fun
      • 笑い
    • Angry
      • 怒り
    • Sorrow
      • 困る
    • Joy
      • にこり

表示枠

  • glTF/VRM では存在しない

剛体

  • 揺れモノとして存在するが、全く別物
    • Bullet Physics ではなく VRM 独自の実装のため
    • 詳細は 揺れモノ設定 参照
  • 衝突判定基準となる物体は球体のみ
    • ボックスやカプセルは利用不可
  • 衝突グループは存在しない

ジョイント

  • glTF/VRM では存在しない
    • glTF では PMD/PMX でいうボーンにあたるため、混乱を引き起こしやすい
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment