BlenderからUnity経由でVRMを出力する際の罠と解決法(完全版)

BlenderからUnity経由でVRMを出力する際の罠と解決法(完全版)

はじめに

3Dモデルのフォーマット変換パイプラインは、論理というより「各ツールの固有仕様と罠をいかに避けるか」というゲームに近い。数日触らないだけで確実に手順を忘れるため、BlenderからFBXを経由し、Unity(UniVRM)でVRM化してWeb(Three.js)に持ち込むまでの工程と、今回ハマったポイントを詳細な備忘録として残しておく。

1. BlenderからのFBXエクスポート(骨とメッシュが揃わない罠)

最初の罠はBlenderからの書き出し設定にある。初期設定のままFBXをエクスポートしてUnityに読み込むと、メッシュだけ、あるいは骨格(アーマチュア)だけしか出力されていない事態が起こる。

 1. BlenderからのFBXエクスポート(骨とメッシュが揃わない罠)

これを防ぐためには、エクスポート画面右側の「内容(Include)」パネルで以下の設定を確実に行う必要がある。

 1. BlenderからのFBXエクスポート(骨とメッシュが揃わない罠)
  • オブジェクトタイプ: Shift キーを押しながら 「アーマチュア」と「メッシュ」の両方を選択(青くハイライトさせる)。
  • アーマチュア設定: 「リーフボーン追加」のチェックを外す。これが入っているとUnity側で余計な末端ボーンが生成され、HumanoidのRig設定時にエラーの原因になる。
  • 選択したオブジェクト: チェックを入れるなら、3Dビュー上で対象を全選択(Aキー)してからエクスポートすること。

これでUnityのHierarchy上に、正しくメッシュと骨(Bip001_0など)が取り込まれる。

 1. BlenderからのFBXエクスポート(骨とメッシュが揃わない罠)

2. Unityでの軸ズレ問題(Tポーズで寝そべる罠)

UniVRMのエクスポート窓(VRM0 -> Export VRM file...)を開き、不足しているメタ情報(Title, Version, Author)を埋めていく。

2. Unityでの軸ズレ問題(Tポーズで寝そべる罠)

ここで「T-Poseにする」を実行すると、モデルがうつ伏せに寝そべってしまう現象が発生した。

2. Unityでの軸ズレ問題(Tポーズで寝そべる罠)

これはBlender(Z-up)とUnity(Y-up)の座標軸の違いが原因で、Tポーズの正規化処理によって元の軸向きに戻されてしまうためだ。これを解決するには、FBXのインポート設定で軸変換を焼き付ける必要がある。

  1. ProjectウィンドウでFBXアセットを選択。
  2. Inspectorの Model タブを開く。
  3. Bake Axis Conversion にチェックを入れて Apply を押す。

これでRotationのXが「0」の状態で正しく直立するようになる。

2. Unityでの軸ズレ問題(Tポーズで寝そべる罠)

3. スケール調整と「ちびキャラ化」の回避

Web(Three.js)側にVRMを読み込んだ際、想定よりスケールが小さかった。

3. スケール調整と「ちびキャラ化」の回避

Unity上で単純にInspectorの Model タブにある Scale Factor を上げると、身長と一緒に横幅も広がってしまい、不格好な「ちびキャラ(太った状態)」になってしまう。

3. スケール調整と「ちびキャラ化」の回避

これをUnity内で修正するには、全体のスケールをいじるのではなく、Hierarchy上で対象のボーン(腰や脚など)を直接選択し、Transform の Scale で XとZ(横幅・奥行き)だけを縮小 することで、相対的に細身の高身長モデルへ補正できる。(※Three.js側で vrm.scene.scale.setScalar() を使ってプログラム制御する方が簡単な場合もある)

3. スケール調整と「ちびキャラ化」の回避

4. 目のボーン設定(Eyeボーンが無い場合)

視線追従などをさせるためのEyeボーン設定だが、RigのConfigure画面に入っても該当するボーンが見当たらないことがある。

連番ボーン(Bone001〜など)になっていて眼球用の骨が独立していないモデルの場合、目はシェイプキー(BlendShape)で制御する仕様になっている。 この場合、UnityのHumanoid設定で Left Eye / Right Eye空欄(None)のままで問題ない。Three.js側で vrm.expressionManager を使ってモーフを操作すれば目は動かせる。

5. 最後の罠:PrefabロックによるTポーズエラー

設定も終わり、いざVRMを出力しようとすると T-Poseにしてください という赤エラーが出たまま、自動Tポーズ化のボタンが押せない事態に陥った。

原因は、Hierarchyに配置したモデルがPrefab(プレハブ)状態になっているため。 UniVRMはPrefabの姿勢データを直接書き換えられない仕様になっている。

【解決法】

  1. Hierarchyのモデルオブジェクトを右クリック。
  2. Prefab -> Unpack Completely(完全解体) を選択。

これでPrefabのロックが外れ(アイコンが青からグレーに変わる)、「T-Poseにする」ボタンが押せるようになり、無事にエクスポートが可能になる。

完了:Web環境(Three.js)への統合

出力したVRMをAstro + Three.js環境(PROTOCOL.LAIN)へ読み込み。

完了:Web環境(Three.js)への統合 完了:Web環境(Three.js)への統合

サイバーテイストなUI空間と見事にマッチングし、スケール感・立ち姿ともに完璧に収まった。 骨抜け、回転軸のズレ、前傾姿勢、Prefabのロックと、3Dモデル移植における「ハマりどころフルコース」だったが、一つずつ潰せば確実に出力できる。次回同じ作業をする時は、この記事を見返してショートカットしたい。

 ほしのゆめみ(壁紙)