VRChat向けキャラクターをVRMに変換する場合
Tataraでは、VRM形式のファイルを読み込んでキャラクターとして使用できます。
VRChat向けに販売・配布されているアバターや、VRChat向けに改変したアバターをVRMへ変換する方法として、VRoid StudioのXAvatarを経由してVRMへ変換したり、shimapyon様が作成されたNDMF VRM Exporterを利用したりする方法などがあります。
Tataraでは、NDMF VRM Exporterを利用した変換を推奨しています。
このページでは、NDMF VRM Exporterを利用した基本的な変換の流れと、Tataraで使用するために変換する際の注意点を中心に説明します。
NDMF VRM ExporterはUnity上のアバターにコンポーネントを追加することでVRM 1.0形式へ出力できるため、比較的少ない手順で変換できます。また、Modular AvatarやAvatar Optimizerなど、VRChatのアバター改変で広く利用されている非破壊編集ツールと組み合わせやすく、普段使用している改変済みPrefabをベースに変換できる点もメリットとなっています。
NDMF VRM Exporter自体の各機能や詳細な設定については、公式ドキュメントもあわせて参照してください。
本ページでは、変換例としてIKUSIA様より販売されているオリジナル3Dモデル「輝夜 -kaguya-」を使用しています。
- モデル:「九尾オリジナル3Dモデル「輝夜」-kaguya-」
- 製作者:Paryi
- 販売ページ
アバターを利用する場合は、各モデルの利用規約を確認してください。
1. NDMF VRM Exporterを導入する
NDMF VRM ExporterをUnityプロジェクトへ導入します。
VRChat Creator Companion(VCC)またはALCOMからNDMF VRM ExporterのVPMリポジトリを追加し、プロジェクトへインストールしてください。
こちらのリンクをクリックすることでリポジトリを導入できます。
手動で導入する場合、VCCでは次の手順でリポジトリを追加します。
- 「Settings」を開き、「Packages」を選択します。
- 「Add Repository」を選択します。
- 「Repository Listing URL」にNDMF VRM ExporterのリポジトリURLを入力します。
- URLの右側に緑色のチェックが表示されたことを確認し、「Add」を選択します。
![]()
リポジトリを追加したら、対象のUnityプロジェクトへ「NDMF VRM Exporter」をインストールします。ALCOMを使用する場合も、同じリポジトリURLを追加してからパッケージをインストールしてください。
NDMF VRM ExporterはNDMFを利用してVRChat向けアバターをVRM 1.0へ変換します。 Modular Avatarを使用して改変しているアバターについても、基本的にはその状態のまま変換できます。
また、Tataraで使用するアバターを作成する場合は、あわせて以下のツールを導入することをおすすめします。
- lilToon(今回利用を想定しているシェーダー)
- AAO: Avatar Optimizer(アバターの軽量化に利用するツール)
- Modular Avatar(アバターの改変などに使用している場合)
VRChat向けアバターには、多数のBlendShapeやGameObjectなどが含まれていることがあります。
これらを多く含んだままVRMへ変換すると、VRMのファイルサイズが大きくなり、Tataraへの追加や読み込みに非常に時間がかかる場合があります。
Tataraで使用するキャラクターを変換する際は、Avatar Optimizerなどを利用してあらかじめ不要なデータを削減しておくことをおすすめします。
軽量化の方法については後述の「Avatar Optimizerで軽量化する」で説明します。
2. Tataraで不要な機能を整理する
VRMへ変換する前に、Tataraでは使用しないVRChat向けの機能を整理しておくことをおすすめします。
まず、変換したいキャラクターのPrefabをHierarchyへ追加します。アバターに衣装やギミックの有無が異なるPrefabが用意されている場合は、Tataraで使いたい構成に近く、不要な機能が少ないものを選びます。
このページの例では、ギミックなどが入っていない「kaguya none」Prefabを選択しています。
![]()
Tataraで不要になる機能の例として以下が挙げられます。
- AFK用の演出
- ハンドジェスチャーに連動したギミック
- 武器や小物などのギミック
- Particle Systemを利用した演出
- Contactを利用したギミック
- VRChatのExpressions Menuから切り替えるオブジェクト
- 使用しない衣装や髪型
- その他、Tatara上で使用する予定のないオブジェクト
TataraではVRChatのPlayable LayersやExpressions Menuなどの仕組みを使用しないため、これらを残していてもVRChatと同じように動作するとは限りません。
不要なものをあらかじめ削除・無効化しておくことで、VRMの構造を単純にし、変換時の問題を減らすことができます。
この作業を行う際は、普段VRChatで使用しているアバターを直接編集するのではなく、PrefabやSceneを複製してTataraへの変換専用Prefabを作成することをおすすめします。 変換専用Prefabを用意することで、VRChatで使用しているアバター本体へ影響を与えずに作業をすることができます。
3. AAO: Avatar Optimizerで軽量化する
VRChat向けアバターには多数のBlendShapeやGameObject、メッシュなどが含まれていることがあります。 これらをそのままVRMへ変換するとファイルサイズが大きくなり、Tataraへの追加や読み込みに時間がかかる場合があるため、変換前にAvatar Optimizerを利用した軽量化をおすすめします。
Hierarchyでアバターのルートを選択し、InspectorからAAO Trace and Optimizeコンポーネントを追加すると、Avatar Optimizerによる自動的な最適化を行えます。
![]()
特に、不要なBlendShapeやGameObjectの削減、メッシュの統合などによって、VRMのファイルサイズや読み込み時の負荷を大きく減らせる場合があります。
まずはAAO Trace and Optimizeによる自動最適化を使用し、必要に応じてAvatar Optimizerのその他の機能を利用してください。
Avatar Optimizerでは、メッシュの統合やPhysBoneの最適化など、アバターの構造を変更する処理も行われます。 NDMF VRM Exporterとの組み合わせによっては、これらの最適化後に揺れ物やメッシュなどの挙動が変化する場合があります。
VRMへの変換後に問題が発生した場合は、一度AAO Trace and Optimizeを無効にして再度出力し、問題が改善するか確認してください。
AAOを無効にすると正常に動作する場合は、Avatar Optimizerの各最適化項目を個別に無効化し、原因となっている処理を切り分けてください。
Tataraでは、瞬き・リップシンク・表情などにBlendShapeを使用します。 最適化後は、必要な表情が正常に残っていることを確認してください。
実際に出力したVRMをTataraで読み込み、表情に問題がないことを確認することをおすすめします。
4. VRM Export Descriptionを設定する
メタデータを取得するためにVRChatへアップロードする
Retrieve Metadata via VRChat APIを使って作者情報などを取得する場合は、先に変換対象のアバターをVRChatへアップロードします。
VRCSDK Control Panelからアバターをアップロードし、「Upload Succeeded!」と表示されたことを確認してください。メタデータの取得だけが目的の場合は、公開範囲をPrivateに設定できます。
![]()
メタデータを手動で入力する場合は、事前にVRChatへアップロードする必要はありません。
VRM Export Descriptionを追加する
変換するアバターをHierarchy上で選択し、VRC Avatar Descriptorが設定されているGameObjectへVRM Export Descriptionコンポーネントを追加します。
![]()
VRM Export Descriptionでは、VRMに必要な作者情報などを設定します。
先ほどの手順でVRChatへアップロード済みの場合、Retrieve Metadata via VRChat APIから情報を取得することができます。
コンポーネントを追加した直後は「Authors is required」と表示されます。Authorsに作者名を設定し、LicensesでライセンスURLを確認してください。VRChat APIから取得した場合も、作者情報や利用条件が正しいことを確認します。
Expressionsを設定する
ExpressionsではVRMで使用する表情を設定します。PresetにはHappy、Angry、Sad、Relaxed、Surprised、Blinkなどの標準的な表情が設定されています。Customでは、必要に応じて独自の表情を追加できます。
BlendShapeを使用する場合、Base TypeでBlendShapeを選び、使用したいBlendShapleが存在するSkinned Mesh Rendererと使用するBlendShapeを指定します。まばたきとリップシンクはVRC Avatar Descriptorの設定をもとに自動設定されますが、必要な表情が割り当てられていることを確認してください。
FaceEmoなどを使用して表情ごとのAnimationClipを作成している場合は、Base TypeでAnimationClipを選び、それぞれに対応したAnimationClipを指定してください。
![]()
必要に応じてPreview機能を使用し、MToonへ変換した際のマテリアルの見え方を確認します。
なお、Spring Boneなどの揺れ物の挙動はPreviewでは確認できないため、最終的には出力したVRMをTataraへ読み込んで確認してください。
5. VRMを書き出す
設定が完了したら、NDMF ConsoleからVRMを書き出します。
- Hierarchyで対象のアバターを選択します。
VRM Export Descriptionコンポーネント名の左側にあるチェックを外します。- 表示された
Open NDMF Console to export VRM fileを選択します。
![]()
NDMF Consoleが開いたら、次の操作を行います。
Avatar platformからVRM 1.0 (NDMF VRM Exporter)を選択します。Exportを選択します。
![]()
ファイルの保存画面が開いたら、出力先とファイル名を指定します。
出力された.vrmファイルをTataraへ追加してください。
Tataraで使用する際の注意点
シェーダーについて
VRChat向けアバターではさまざまなシェーダーを利用できますが、VRMへ変換した際に同じ見た目を完全に再現できるとは限りません。
NDMF VRM Exporterでは、lilToonをVRM 1.0のMToon互換マテリアルへ変換できます。
そのため、Tataraで使用するアバターではlilToonの使用を推奨します。
lilToon以外のシェーダーを使用している場合、NDMF VRM ExporterではMToonへの変換は行われず、glTFとして最低限のマテリアル情報のみが出力されます。そのため、UnityやVRChat上とは大きく異なる見た目になる場合があります。
また、lilToonを使用している場合でも、すべての表現をMToonへ変換できるわけではありません。
例えば、以下のような表現は正しく再現できない場合があります。
- ラメ
- 宝石
- 屈折
- ファー
- 複雑なMatCapやRim Lightを利用した表現
- 特殊なライティングを前提としたプリセット
特殊なlilToonのプリセットや複雑なライティング設定を使用している場合、VRMへ変換した際に影や明るさの見え方が変化し、Tatara上でモデルが不自然に暗く表示される場合があります。
この場合は、一度マテリアルの設定を通常のlilToonに近いシンプルな状態へ戻し、再度VRMを出力してみてください。
PhysBoneなどの揺れ物について
NDMF VRM Exporterでは、VRChatのVRC PhysBoneをVRMのSpring Boneへ変換できます。
ただし、VRC PhysBoneとVRM Spring Boneでは揺れ物の計算方法や利用できる機能が異なります。 そのため、VRChat上での動作を完全に再現できるわけではありません。
特に以下のような箇所では違いが発生する可能性があります。
- 髪
- スカート
- 胸
- 耳
- 尻尾
- アクセサリー
VRC PhysBoneとVRM Spring Boneでは利用できる機能が異なるため、VRChat上で設定した揺れ物の挙動を完全に再現できるわけではありません。
特に、VRC PhysBoneで設定したLimitによる角度制限は、Tatara上では同じように適用されません。
そのため、VRChatでは一定の範囲までしか動かなかったスカートや髪などが、Tataraでは大きくめくれたり、不自然な方向へ動いたりする場合があります。
揺れ物の挙動がおかしい場合
Tataraへ読み込んだ際に、
- スカートが大きくめくれ上がる
- 髪や尻尾が不自然な方向へ飛ぶ
- 揺れ物が必要以上に動く
- 特定のボーンだけ激しく振動する
といった問題が発生する場合があります。
この場合はUnityの変換元アバターへ戻り、該当するVRC PhysBoneの設定を調整してから、再度VRMを出力してください。
特に、Limit・Immobile・Gravityなどに強く依存した設定では、VRMへの変換後に挙動が変わる可能性があります。
調整しても正常な挙動にならない場合は、以下の方法で問題のある揺れ物をVRMへ変換しないことも検討してください。
VRM Export DescriptionのSpring Bone Options > Excluded Spring Bonesに対象のPhysBoneを登録する- 対象の
VRC PhysBoneコンポーネントを無効化または削除する
Excluded Spring Bonesを利用すれば、アバターのGameObjectやPhysBoneコンポーネント自体を削除せずに、特定の揺れ物だけをVRM Spring Boneへの変換対象から除外できます。
また、このページの手順のようにTataraへの変換専用Prefabを作成している場合は、Tataraでは必要のないPhysBoneコンポーネント自体を無効化・削除してしまう方法でも問題ありません。
Avatar Optimizerを使用している場合は、一度AAO Trace and Optimizeを無効にして出力し、最適化による影響がないか確認することもおすすめします。
VRChat固有のギミックについて
VRChat向けアバターには、AnimatorやExpressions Menu、Contactなどを利用したさまざまなギミックがあります。
これらはVRMそのものの機能ではないため、Tataraへ読み込んでもVRChatと同じようには動作しません。
例えば、
- Expressions Menuによる衣装切り替え
- ハンドジェスチャーによる表情・オブジェクト切り替え
- AFKアニメーション
- Contact Sender / Receiver
- Avatar Dynamicsを利用したギミック
- VRChat専用のParticle System演出
などをTataraで使用することは想定されていません。
Tataraで必要のない機能については、変換前に削除・無効化しておくことをおすすめします。
変換後に確認すること
VRMの出力が完了したら、Tataraへ追加して次の項目を確認してください。
AIキャラクターを作るのモデル選択で「自分のファイル」を選び、出力した.vrmファイルを追加します。「読み込み準備完了」と表示され、モデルが正常に表示されることを確認してください。
![]()
- モデルが正常に表示される
- テクスチャやマテリアルが正常に表示される
- 瞬きが正常に動作する
- リップシンクが正常に動作する
- 表情が正常に切り替わる
- 髪や服などの揺れ物が正常に動作する
- 不要なオブジェクトが残っていない
- ファイルサイズが極端に大きくなっていない
問題がある場合は、出力されたVRMを直接修正するのではなく、可能であればUnity上の変換元アバターを修正してから再度出力することをおすすめします。
よくある問題
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
| モデル全体が暗い | lilToonからMToonへの変換でマテリアルの見え方が変化している | lilToonの設定を単純化し、再度出力する |
| 一部のマテリアルだけ見た目がおかしい | 特殊なシェーダーやlilToonの特殊機能を使用している | 通常のlilToonに変更する |
| スカートや髪が大きく暴れる | PhysBoneとSpring Boneの計算方法の違い | PhysBoneの設定を調整する。改善しない場合は変換対象から除外する |
| 揺れ物のAngle Limitが効かない | TataraではVRC PhysBoneの角度制限を同じように再現できない | PhysBoneの設定を調整するか、対象のPhysBoneを変換対象から除外する |
| VRMのファイルサイズが大きい | 不要なBlendShapeやオブジェクトが大量に残っている | AAO Trace and Optimizeを利用する |
| AAOを使用するとメッシュや揺れ物がおかしくなる | Avatar Optimizerによるメッシュ統合やPhysBone最適化などの影響 | AAO Trace and Optimizeの各項目のチェックを外すなどして原因を調査する |
| VRChatのギミックが動かない | VRChat固有のAnimatorやContactなどを利用している | Tataraでは不要なギミックを変換前に削除する |
| 表情の一部が動かない | 必要なBlendShapeやExpression設定が正しく変換されていない | Export前の設定と最適化後のBlendShapeを確認する |