logoRemuria

NDMF VRM Exporter

1.2.4 Public

NDMF VRM Exporter

VRChat のアバターを VRM 1.0 形式で変換し出力する Modular Avatar で使われている基盤フレームワークである NDMF に基づくプラグインです。

[!IMPORTANT] NDMF VRM Exporter は Modular AvatarlilToon の組み合わせが最も効果的になるように設計されています。また VRChat アバターにおけるブレンドシェイプの多さが VRM に変換して利用する時に処理負荷の悪影響を受けやすいので Avatar Optimizer と併用する形での最適化を強く推奨します

NDMF VRM Exporter には以下の特徴を持っています。

導入方法

まず VRChat Creator Companion または ALCOM を事前にインストールします。その後 レポジトリ追加のリンク をクリックしてレポジトリを導入します。手動で登録する場合は https://hkrn.github.io/vpm.json を指定します。

レポジトリ導入後は NDMF VRM Exporter を検索してインストールすることで利用可能になります。

使い方その1

Unity を再生あるいは VRChat にアップロードする際にビルドと共に書き出す方法です。

  1. インスペクタ画面から VRC Avatar Descriptor があるところで Add Component から VRM Export Description コンポーネントを検索し設定
  2. VRM Export Description コンポーネント内にある Retrieve Metadata via VRChat API で自動設定
  • アバターが未アップロードなどの理由で手動設定する場合は Authors の左横の ▶️ をクリックして 🔽 にしたのち、➕ ボタンで作者名を設定
  1. 再生開始
  2. Assets/NDMF VRM Exporter/${シーン名} 内にアバター名のついた VRM ファイルが出力されていることを確認
  • シーンが未保存の状態で実行した場合はシーン名が Untitled になります

NDMF VRM Exporter は出力した VRM ファイルを閲覧する機能を持っていません。そのため出力された VRM ファイルを手元環境で確認する場合は VRoid Playground(要 Pixiv アカウント)を利用するか、VRMファイルが使えるアプリケーションは? から「ビューワー」を選択して適宜アプリケーションを導入して読み込んでください。その際は必ず VRM 1.0 対応のものを利用してください(VRM 0.x のみ対応の場合は読み込めません)。

アップロードして確認する場合は VRoid Hub の利用を推奨します。

使い方その2

[!IMPORTANT] NDMF 1.8 以上 (Modular Avatar では 1.13 以上が対応) が導入されている必要があります

NDMF に組み込まれているアバタープラットフォーム機能を利用する方法です。

  1. インスペクタ画面から VRC Avatar Descriptor があるところで Add Component から VRM Export Description コンポーネントを検索し設定
  2. VRM Export Description コンポーネント内にある Retrieve Metadata via VRChat API で自動設定
  • アバターが未アップロードなどの理由で手動設定する場合は Authors の左横の ▶️ をクリックして 🔽 にしたのち、➕ ボタンで作者名を設定
  1. VRM Export Description 左横のチェックボタンを外して無効化
  • 有効化したままの場合はメニューの Tools > NDM Framework > Show NDMF Console でウィンドウを開く必要があります
  1. 無効にした際に現れる Open NDMF Console to export VRM file ボタンを押す
  2. Avatar platform から VRM 1.0 (NDMF VRM Exporter) を選択
  3. Avatar platform の項目のすぐ下に出てくる Export ボタンを押す
  4. ファイルダイアログが開くので出力先を指定

こちらの方法を利用する際に「使い方その1」にないメリットとして以下が挙げられます

  • コンポーネントを無効にしても機能するため「その1」と比較してビルド時間を短縮できる
  • 必要なタイミングで任意の場所に対して VRM ファイルの出力が可能
  • Modular Avatar を利用している場合は プラットフォームフィルター コンポーネントによる表示の切り替えが利用可能

コンポーネントの説明

NDMF VRM Exporter が提供するコンポーネントは VRM Export Description のひとつのみです。

  • コンポーネントを有効にした状態(コンポーネント名の横にチェックボックス ✅ がついてる状態)で再生
  • コンポーネントの有効無効にかかわらず NDMF Console からプラットフォーム選択で NDMF VRM Exporter を選び Export した場合

上記のいずれかによって VRM ファイルが生成される仕組みとなっています。

[!TIP] 処理の性質上 VRM ファイルの生成は最低でも数秒、場合によっては数分と時間がかかるため、時間がかかる場合はコンポーネントを無効化して NDMF Console 経由でファイル書き出しをしてください

Metadata

VRM のメタデータに直接対応しています。詳細な情報は モデル情報 および VRoid Hubの利用条件とVRMライセンスについて を参照してください。

Metadata のうち Authors と License URL が必須項目となっています。また Author は最初の要素が空文字のみで構成されないように、License URL は URL として正しい形式で設定する必要があります。

Information

メタデータのうち基本情報を設定します。

[!WARNING] アバターのサムネイルが正方形でない場合はサムネイル画像が入りません(VRM の出力自体は可能です)

名前説明必須備考
Avatar Thumbnailアバターのサムネイル画像仕様上 正方形であることが必須で、大きさが 1024x1024 であることを推奨 している
Authors作者名共同制作を想定して複数指定可能
Versionアバターのバージョン記法として特に定まったものはないが、自動入力では セマンティックバージョニング をベースにした擬似 カレンダーバージョニング を採用している
Copyright Information著作権表示著作権表示 を想定
Contact Information連絡先情報問い合わせ先もしくはそれが容易に確認できる URL が望ましい。なおメールアドレスは個人情報であるとともに悪用リスクがあるので使用は極力避けるべき1
References参照元情報例えば Booth で購入した商品を利用しているならその商品 URL の列挙が望ましい

[!WARNING] Retrieve Metadata via VRChat API はアバターをアップロードしないと表示されません。2 使用時に値が設定されていた場合は一部を除いて上書きされるのでご注意ください

Retrieve Metadata via VRChat API は VRChat SDK 経由で VRChat API を利用してアップロード済みのアバターの情報からメタデータの基本情報を自動的に設定します。実行時に以下の設定を行います。

  • Avatar Thumbnail は VRChat のアバターのサムネイルを中央揃えで切り取り 1024x1024 にリサイズして設定
    • NDMF VRM Exporter/VRChatSDKAvatarThumbnails にオリジナル版と加工版のふたつが保存されます
    • サムネイル加工の過程は変更することができません
  • Authors はユーザ名を設定
    • すでに設定済みの場合は最初の要素のみ上書き
  • Version{YYYY}.{MM}.{DD}+{version} 形式
    • {YYYY}.{MM}.{DD} は VRChat にアバターを更新した日付が入る
    • {version} は VRChat 側のアバターの現在のバージョンを設定
  • Copyright InformationCopyright ©️ {最初にアバターをアップロードした年} {ユーザ名} を設定
  • Contact Information はユーザ名に対応する VRChat のリンク
    • Enable VRChat User Link as Contact Information のチェックを外すと自動入力されなくなります(その場合は上書きもしません)

処理の取り消しが可能でその場合は設定されません。また処理の過程でエラーが発生した場合も同様に設定されません。エラーが発生した場合はコンソールに詳細なエラーメッセージが表示されます。ただし VRChat の認証失敗のみボタンの下にメッセージが表示されます。

Licenses

メタデータのうちアバターに対するライセンス部分を設定します。

[!NOTE] 初期設定として VRM Public License 1.0 が適用されます。独自のライセンスを使用したいケース 3 を除いて設定する必要はありません

名前説明必須備考
License URLライセンスのURL初期値は https://vrm.dev/licenses/1.0/
ThirdParty Licenses第三者のライセンス情報
Other License URLその他のライセンスのURL

Uses VRM Public License ボタンを押すと License URL を初期設定である VRM Public License 1.0 の URL に戻すことができます。それ以外の値は変更されません。

Permissions

メタデータのうちアバターに対する利用許諾の部分を設定します。

[!WARNING] 初期設定として最も厳格な設定になっているため原則として設定を変更する必要はありません。これらの項目をひとつでも変更する場合は想定外のリスクが発生する可能性があります

名前説明必須
Avatar Permissionアバター使用の許諾設定
Commercial Usage商用利用の許可設定
Credit Notationクレジット表記の必須設定
Modification改変の許可設定
Allow Redistribution再配布の許可設定
Allow Excessively Violent Usage過度な暴力表現の許可設定
Allow Excessively Sexual Usage過度な性的表現の許可設定
Allow Political or Religious Usage政治または宗教用途に対する利用の許可設定
Allow Antisocial or Hate Usage反社会もしくはヘイトに対する利用の許可設定

Expressions

VRM の表情設定を行います。

[!IMPORTANT] 表情はブレンドシェイプと機能的によく似ていますが、同一ではありません 4

[!NOTE] まばたきとリップシンクの表情は VRC Avatar Descriptor コンポーネントから情報を取得して自動的に設定されます。また Avatar Optimizer を利用している場合は表情に指定されたブレンドシェイプが最適化対象から外す処理を行う関係で除去されずに残ります

Preset

VRM のプリセットである以下の項目を設定することが可能です。

  • Happy
  • Angry
  • Sad
  • Relaxed
  • Surprised

表情設定については以下の二種類が選択可能です。

  • ブレンドシェイプ (BlendShape)
    • アバターにあるブレンドシェイプ名を指定します
    • ウェイトは 100% 固定になります
  • アニメーションクリップ (AnimationClip)
    • アニメーションクリップを用いて最初 (0秒) のキーフレームに存在するブレンドシェイプ名とウェイト値を利用します
    • 存在しないブレンドシェイプ名を指定あるいは最初以外のキーフレームの情報は単に無視されます

[!TIP] Avatar Optimizer を利用する場合は可能な限りアニメーションクリップよりブレンドシェイプを利用するようにしてください。アニメーションクリップを用いる場合 Avatar Optimizer のブレンドシェイプに対する最適化がしにくくなります 5

表情の組み合わせおよび自動的に設定されることも相まって意図せずメッシュの破綻を起こす可能性があるため、その対策として VRM では表情の制御方法を提供しています。詳しい仕様については プロシージャルのオーバーライド を確認してください。

NDMF VRM Exporter では VRM の仕様と直接対応する形で以下の表情の制御方法を提供しています。設定可能な値は None/Block/Blend の3つで、いずれも初期値は None です。

  • まばたき (Blink)
  • 視線 (LookAt)
  • リップシンク (Mouth)

MMD 互換のブレンドシェイプが存在する場合は Set Preset Expression from MMD Compatible を利用して設定することが可能です。その場合は以下の表に基づいて設定されます。加えて表情の制御方法が全て Block に設定されます。

表情名設定先ブレンドシェイプ名
Happy笑い
Angry怒り
Sad困る
Relaxedなごみ
Surprisedびっくり

プリセット表情の設定を全てリセットする場合は Reset All Preset Expressions でリセットすることができます。

Custom

ユーザ独自の表情を設定します。

[!WARNING] 表情名に非 ASCII 文字を使うと出力時に文字化けする既知の問題があるため ASCII 文字のみを使うようにしてください

[!NOTE] VRM の仕様では Custom の表情数に制限はありませんが、VRM アニメーションを使う場合は UniVRM の実装制約 により 100 個の上限があります

複数個指定可能なため追加削除と表情名の指定を行う必要はありますが、基本的な設定方法はプリセット表情と同じです。表情名をプリセット名と同じ名前で定義することも可能ですが仕様上許容されておらず、実装依存ではあるものの原則としてプリセット表情が優先されます。

MToon Options

以下の設定が可能です。lilToon シェーダからの変換時に利用されます。

  • Enable RimLight
  • Enable MatCap
  • Enable Outline
  • Enable Baking Alpha Mask Texture

[!WARNING] TexTransTool (TTT) の AtlasTexture コンポーネント 使用時にマテリアルの組み合わせ次第では Enable Baking Alpha Mask Texture と TTT のプロパティベイクの二重焼き込みの影響で表示上の問題が発生する場合があります。その場合は Enable Baking Alpha Mask Texture か TTT のプロパティベイクのどちらかを無効にしてください

リムライト、マットキャップ、アウトラインのうち表示上の互換性の問題からアウトラインのみ有効となっています。

表示上の互換性の問題の背景として MToon においてリムライトのブレンドモードが乗算のみ、マットキャップのブレンドモードが加算のみしか利用できない制約によるものです。後者については以下で起票されています。

[!TIP] NDMF VRM Exporter においてリムライトを無効にしていることが条件ですが、マットキャップのマスクテクスチャを使う形でマットキャップの乗算モードを擬似的に実現可能です

ただしマットキャップが「有効」かつリムライトが「無効」の場合は MToon の実装の関係でリムライトのパラメータを上書きします。詳細は「出力互換性の情報」の「材質(マテリアル)の変換」を確認してください。

Spring Bone Options

ビルド時にのみ除外する VRC PhysBone Collider コンポーネント及び VRC PhysBone コンポーネントを設定します。

  • Excluded Spring Bone Colliders
  • Excluded Spring Bones

ビルド時に非表示のゲームオブジェクトがある場合は出力から除外しますが、この項目を使うことによってゲームオブジェクトを非表示に設定しなくても出力を除外することが可能になります。

Constraint Options

ビルド時にのみ除外する VRC PhysBone Constraint コンポーネントを設定します。

  • Excluded Constraints

利用目的は Spring Bone OptionsExcluded Spring Bone Colliders および Excluded Spring Bones と同じです。

glTF Extension Options

以下の設定が可能です。設定自体は 1.1.0 から導入されました。

  • Enable KHR_materials_variants
    • マテリアルを動的に切り替えられるようにする公式の拡張である KHR_materials_variants 拡張を有効にするかどうかを設定します
    • 詳細は「材質(マテリアル)の切り替え」の章を確認してください

Debug Options

以下の設定が可能です。

  • Make All Node Names Unique
    • ノード名が一意になるように名前を設定するかを指定します 6
  • Enable Vertex Color Output
    • メッシュに頂点色を出力するかを設定します
    • 利用元のシェーダによっては頂点色を本来の目的とは異なる形で利用する場合があり、それが原因で意図しない色になってしまうことがあるためその場合は無効にします
  • Disable Vertex Color on lilToon
    • lilToon からの変換時に頂点色を無効(頂点色を白色に設定)にするかを設定します 7
    • 頂点色が存在しない、Enable Vertex Color Output が無効、シェーダが lilToon ではないのいずれかに該当する場合は何もしません
  • Enable Generating glTF JSON File
    • デバッグ目的で VRM ファイルと同じフォルダに JSON ファイルを出力するかを設定します
  • Delete Temporary Object Files
    • 一時ファイルを出力した後に削除するかを設定します
  • KTX Tool Path
    • テクスチャ圧縮を利用できるようにするための拡張である KHR_texture_basisu に対応したテクスチャへ変換のために使用する KTX 変換ツール のパスを指定します 8
    • 指定して変換に成功した場合は KHR_texture_basisu が付与されます

出力互換性の情報

名前はビルド対象のアバター(ゲームオブジェクト)につけられた名前がそのまま利用されます。

ビルド時に非表示のゲームオブジェクトが存在する場合はそのノードがなかったものとして扱われます。またそのノードの子孫が存在する場合も同様に扱われます。

Spring Bone の変換

[!NOTE] VRC PhysBone が登場する前に使われていた Dynamic Bone からの変換には対応していません

VRC PhysBone については VRM Spring Bone のジョイントに変換されます。ただし Immobile および Limit については VRM Spring Bone に対応する仕様が存在しないため、「動きにくくする措置」として以下で計算されます。

  • Limit の場合は角度を 180 で割り、その係数を以って乗算
    • 0 の場合は Stiffness と DragForce を無効化
  • Immobile の場合は Stiffness と DragForce に 1:1 の割合で加算
    • Limit がある場合は先の係数を以って乗算

VRM Spring Bone と VRC PhysBone は計算方法が異なるため結果は同一になりません。また VRM Spring Bone の仕様に存在しない以下の項目には変換に対応していません。

  • Ignore Transforms
  • Endpoint Position
  • Grab & Pose

[!TIP] 枝分かれが生成される場合スプリングボーン名に .${番号} が末尾に付与されます。番号は 1 からはじまり、たとえばスプリングボーン名が SB で 2 つ存在する場合は SB.1SB.2 になります。

VRC PhysBone の子孫に枝分かれが存在する場合は Multi-Child Type に基づき以下の対応が行われます。

  • Ignore
    • 分岐元が含まれないそれぞれ独立した VRM Spring Bone のジョイント集合が作られます 9
  • First
    • 分岐元が含まれる VRM Spring Bone のジョイント集合として作られます
    • VRM の仕様では分岐が含まれる Spring Bone の動作は 未定義で実装依存 のため動作の一貫性が取れない可能性があります
  • Average
    • 同等の実装ができないため First と同じ扱いで処理します

VRC PhysBone のコライダーは以下の三種類に対応しています。

  • Capsule (カプセル)
  • Plain (平面)
  • Sphere (球)

Inside Bounds が有効もしくは Plain の場合は VRMC_springBone_extended_collider 拡張に対応しているアプリケーションが必要となります。対応していないアプリケーションを利用した場合は前者が存在しないものとして、後者の場合は半径 10km の巨大スフィアコライダーを設定する形でそれぞれ処理されます。

Constraint の変換

Constraint または VRC Constraint が使われている場合は VRM Constraint に変換されます。またその場合は以下の三種類に対応しています。10 変換元に複数の Constraint または VRC Constraint が存在する場合は最初のひとつのみが変換されます。11

  • AimConstraint
    • VRM の仕様上 X/Y/Z の単一方向ベクトルのみに制約されるため、例えば斜め方向の場合変換できません
    • またアップベクトル設定の変換に対応していません
  • RotationConstraint
  • ParentConstraint
    • ソースノードが存在しない場合のみ
    • VRM Constraint の仕様の整合性のため専用のノードが追加され、それを参照先として利用します。

いずれも複数ソースノードを持つものについては VRM Constraint の仕様上対応できないため、最初のソースノードのみ利用されます。

RotationConstraintFreeze Rotation Axes の結果によって変換先が変わります。

X軸Y軸Z軸変換先
RotationConstraint
RollConstraint (X軸)
RollConstraint (Y軸)
RollConstraint (Z軸)
(変換しない)
(変換しない)
(変換しない)

Unity Constraint での Constraint Settings および VRC Constraint での Freeze Rotation Axes 以外の Constraint SettingsAdvanced Settings の設定の変換は VRM に仕様に対応する機能が存在しないため対応していません。

スプリングボーンと同様に VRM Constraint と Unity/VRC Constraint は計算方法が異なるため結果は同一になりません。

材質(マテリアル)の変換

lilToon シェーダが使われている場合は MToon 互換設定に変換します(MToon 未対応の環境のために KHR_materials_unlit も付与します)。その場合は以下の処理を行います。

  • lilToon の MToon 変換と基本的に同じ方法で再設定
  • 以下のテクスチャがある場合は焼き込みした上で再設定
    • メイン
    • アルファマスク
      • MToon OptionsEnable Baking Alpha Mask Texture が有効の時のみ
    • リム
      • MToon OptionsEnable Rim が有効かつ乗算モードの時のみ
    • マットキャップ
      • MToon OptionsEnable MatCap が有効かつ加算モードの時のみ
    • アウトライン
      • MToon OptionsEnable Outline が有効の時のみ

Enable MatCap が有効かつ Enable Rim無効 の場合(有効の場合はリムの設定を優先するため行わない)は MToon のマットキャップの計算がリムライトに依存している都合上、以下の追加設定が行われます。

  • リムライトの係数を 1.0 に設定
  • リムライトの乗算テクスチャにマットキャップのマスクテクスチャを割り当て

lilToon 以外のシェーダが使われている場合は MToon の変換は行われず、glTF 準拠の最低限の設定で変換します。

材質(マテリアル)の切り替え

材質(マテリアル)の切り替えについては lilycalInventoryModular Avatar のコンポーネント設定に対応しており、両方設定している場合は両方とも適用されます。いずれの場合も公式の glTF 拡張である KHR_materials_variants に変換します。

[!WARNING] 切り替えに必要なマテリアル数及びテクスチャ数が増加する関係でその分出力される VRM のファイルサイズが大きくなるため、切り替えが不要であればコンポーネント設定の glTF Extension Options 内にある Enable KHR_materials_variants を無効にしてください。また KHR_materials_variants に対応しているかどうかは読み込み先アプリケーションに依存します

lilycalInventory を利用している場合

lilycalInventory の LI CostumeChanger コンポーネントのうち「マテリアルの置き換え」を使っている場合に適用されます。

  • 名前は「メニュー・パラメーター名」とコスチューム側の「メニュー名」を利用
    • 「メニューの親フォルダ」が設定されている場合はその名前を再帰的にたどります
      • 「コスチューム」にある方と両方設定されている場合は「コスチューム」の方が優先されます
      • 「メニューのオーバーライド」は使用されません
      • 親フォルダがひとつでも無効化されている場合はスキップされます
    • ${メニューの親フォルダ名}/${メニュー・パラメーター名}/${メニュー名} の法則で名前が設定されます
      • メニューの親フォルダ名は親フォルダの数だけ / が追加されます
    • 例えば「メニューの親フォルダ」の設定なしで「メニュー・パラメーター名」が「衣装」で「メニュー名」が「派生」の場合は 衣装/派生 になります
  • 「メッシュ」と「置き換え先」は VRM に対応するものと直接マッピング
    • 置き換え先が None の場合は元のマテリアルを参照します
  • それ以外の項目は全て無視される

[!NOTE] LI AutoDresser コンポーネントは内部的に LI CostumeChanger に変換されますが、こちらは NDMF VRM Exporter としてサポート対象外です

LI CostumeChanger がもつ機能であるオブジェクトのオンオフ、材質のプロパティ操作、アニメーション再生、ブレンドシェイプの切り替えその他諸々には対応していません。それらが設定されている場合でも全て無視されます。

LI CostumeChanger コンポーネントをを無効化すると生成されなくなります。

Modular Avatar を利用している場合

以下の条件を 全て 満たしている時に変換されます。もし全て満たしているにもかかわらず変換されていない場合は非対応条件に当てはまってないかと Unity の Console 画面を確認してください。

  • Modular Avatar 1.13 以上がインストールされていること
    • これは Modular Avatar 1.13 に導入された API に依存しているためです
  • Material Setter または Material Swap コンポーネントを利用していること
  • Menu InstallerMenu Item が両方とも有効かつ同じコンポーネント内に設定されていること
  • Menu Item コンポーネントに Material Setter または Material Swap コンポーネントが紐づけられていること
    • サブメニューに対応していますが、2階層以上のネストされたサブメニューには対応していません

名前はサブメニューが設定されている場合に lilycalInventory と同じよう / で区切られます。

Menu Installer または Menu Item コンポーネントを無効化することで生成されなくなります。

設計思想

NDMF VRM Exporter は「最小限の労力でおおむね100点満点中80点くらいの VRM ファイルを生成すること」を念頭に置いて設計及び開発されています。

それにあたって極力設定及び変換の自動化を行います。この背景として NDMF もとい Modular Avatar を利用した着せ替えを利用したアバターは数十から数百にのぼる可能性があり、ひとつひとつにかけられる時間を極力抑えることにあります。具体的に以下の機能はそれに基づくものです。

  • VRChat API を用いて VRM メタデータを自動入力
  • VRChat のリップシンクのブレンドシェイプを VRM の表情設定
  • PhysBone を VRM Spring Bone または VRM Constraint に変換
  • lilToon を VRM MToon に変換

仕組み的には一定の法則に基づく機械的な変換なので、どうしても粗が出てしまい主に VRM Spring Bone 及び VRM Constraint まわりで手で設定された VRM ファイルに比べると見劣りします。一方で VRM ファイルを改めて手動で設定するにあたって最低限必要な参考実装として利用することを想定しています。

よくある質問

VRChat SDK / lilToon / Avatar Optimizer は必須ですか?

いずれも利用するにあたって必須ではありませんが、入れることで変換精度及び実用性が上がるため入れることを強く推奨します。

  • VRChat SDK
    • VRChat API を用いてメタデータを自動入力できるようになる
    • VRChat Avatar Description に設定されている Viseme を VRM の表情設定に自動的に変換されるようになる
    • PhysBone から VRM Spring Bone および VRM Constraint への変換ができるようになる
  • lilToon
    • lilToon から VRM MToon への変換ができるようになる
  • Avatar Optimizer
    • 機能的には変わらないものの、ブレンドシェイプによる VRM の肥大化を抑制できる

名前を冠している通り NDMF のみ必須で、VRChat SDK は原則 VCC 経由で導入する想定であることの関係で事実上必須扱いです。

Building VRM file will be skipped due to corrupted SkinnedMeshRenderer found と出る

既知の問題でモデルによっては該当のエラーが表示されることがあります。これの直接的な原因はインデックスからの頂点あるいは頂点からのボーンに対する不正参照によるもので、そのまま出力すると読み込めないあるいは異常表示の VRM が出来上がってしまうことを防ぐための措置です。

[!IMPORTANT] NDMF VRM Exporter 1.0.13 以降から破損検知処理を厳格化したので 1.0.12 以前を利用している場合はアップグレードしてください

変換元モデルに対する問題であり NDMF VRM Exporter で対処できる問題の範疇を超えるため、プロジェクトを作り直すか、エラーが出ている部分を MeshRenderer に変換するか、該当のオブジェクトを非表示にするかの対処療法でしか提示できないのが現状です。

VRM ファイルが出力されていない

以下のいずれかに当てはまっていないかどうかを確認してください。これらは全てコンポーネント上に事前に警告またはエラーメッセージが入ります。特に1番目は起こりやすいです。

  • VRM Export Description コンポーネントにチェックが入ってない
  • VRM Export Description コンポーネントが VRC Avatar Descriptor コンポーネントと同じ場所にいない
  • Authors 設定が入っていない
  • License URL 設定が URL 形式として不正

ただし Skinned Mesh Renderer の実行時破損検出処理で NDMF のコンソールにエラーとして表示されることがあります。詳細は「Building VRM file will be skipped due to corrupted SkinnedMeshRenderer found と出る」を確認してください。

lilToon が使われているにも関わらず出力された VRM 1.0 アバターの見た目が明らかに一致しない

VRCQuestTools を利用して Android/iOS 向けに同時出力している場合に特有の事情によってこの問題に該当する可能性があります。お手数ですが PC 向けの方で出力をお願いします。

VRChat Android/iOS 版ではシェーダの制限により lilToon が利用できず、ToonLit もしくはその高機能版の ToonStandard が利用可能となっています。このため NDMF VRM Exporter に処理が渡される前 12 に VRCQuestTools によって lilToon から ToonLit または ToonStandard に自動的に変換されます。その結果 lilToon を検知できず MToon 変換が行われないため、見た目が一致しない状態で出力されます。

なお ToonLit への対応予定はなく、ToonStandard に対する変換の対応予定についても今のところありませんが、需要次第では対応する可能性があります。

出力した VRM 1.0 アバターを 0.x にダウングレードできますか?

NDMF VRM Exporter としてそのような機能を持っていませんが、0.x にダウングレードするツールとして VrmDowngraderVRMRemaker がありますのでどちらかをお使いください。ただし 0.x に変換して 1.0 に戻す形の再変換を行った場合は原則としてサポート対象外となりますのでご注意ください。

VRM 1.0 アバターを VRChat アバターとして変換してアップロードする機能はありますか?

ありません。また NDMF VRM Exporter として実装する予定もありません。

ただし方法が全くないわけでなく VRoid Studio が VRM から XAvatar を通じて VRChat アバターへの変換に対応している のでそれをご利用ください。

VRM Converter for VRChat の違いはなんですか?

VRChat アバターを VRM に変換(またはその逆)するツールとして定番である VRM Converter for VRChat は VRM 0.x の仕様準拠で変換するのに対して NDMF VRM Exporter は VRM 1.0 の仕様準拠で変換するという点にあります。

そのため VRM Converter for VRChat では対応する VRM 0.x の仕様上どうしても変換できないカプセルコライダーおよび拡張コライダーとコンストレイントが NDMF VRM Exporter では変換することができます。その他の違いとして以下の表にまとめています13

項目VRM Converter for VRChatNDMF VRM Exporter
VRM 0.x への変換
VRM 0.x からの変換
VRM 1.0 への変換
VRM 1.0 からの変換
出力設定毎回設定が必要初回のみ
Modular Avatar の対応変更のたびに Manual bake avatar が必要追加設定不要
MToon の自動変換✅ (lilToon のみ)
UniVRM必要不要

NDMF VRM Exporter は他ツールとの干渉を避けるように設計されているため、VRM Converter for VRChat と一緒に入れて扱うことができます。NDMF VRM Exporter は VRM 0.x を扱えず、また Modular Avatar を利用していない着せ替えには対応せず VRM から VRChat 向けアバターに変換することもできないため、その場合は VRM Converter for VRChat が出番になります。必要に応じて使い分けてください。

VRoid Studio でも着せ替え機能を通じて VRM 1.0 出力を扱えますが、それとどう違いますか?

VRM 1.0 を出力できる点は同じですが、出力するまでの過程が異なります。

  • VRoid Studio
    • VPM 経由で XWear Packager を導入
    • Unity から XAvatar 形式で出力
    • VRoid Studio で XAvatar を取り込み
    • VRoid Studio から VRM 1.0 で出力
  • NDMF VRM Exporter
    • VPM 経由で NDMF VRM Exporter を導入
    • Modular Avatar で着せ替えしたアバターにコンポーネントを付与
    • Unity から再生または NDMF コンソール経由で書き出し、出力したファイルを取得

VRoid Studio の場合は VRM の出力に XAvatar を利用する関係で VRoid Studio の導入が別途必要で、作業自体は Unity 単体で完結しません。一方で NDMF VRM Exporter は Unity 内で完結します。

また Modular Avatar を使って着せ替えを行なっている場合 VRoid Studio 向けに XAvatar の作業行程を新たに構築する必要がありますが、その構築を NDMF VRM Exporter では不要とする点も強みとなります。

XWear Packager と NDMF VRM Exporter は一緒に入れることができるため、XWear/XAvatar が必要な場合は XWear Package 経由で VRoid Studio を、Modular Avatar を使っている場合は NDMF VRM Exporter を使い分けることが可能です。

NDMF VRM Exporter で生成した VRM ファイルで部分的に黒い箇所が出る

材質色として既定で無効に設定されているマットキャップが出力する色に依存している可能性があるため、MToon OptionsEnable Matcap を有効にして再度出力すると正しく表示される可能性があります。

NDMF VRM Exporter で生成した VRM ファイルを利用しようとしたらエラーになります

まずそのエラーメッセージが利用するにあたっての制約(例えばファイルサイズやポリゴン数上限など)によるものではないことと、ほかの VRM に対応する複数のアプリケーションで利用できるかどうかの確認が必要です。動作結果と問い合わせ先の表は以下のとおりです。

[!NOTE] ほかの複数アプリで確認する場合は最低でも2種類以上で動作確認をしてください

利用先アプリほかの複数アプリ問い合わせ先
(何もしなくてよい)
利用先アプリの問い合わせ窓口
NDMF VRM Exporter に Issue を起票(ただしこれはイレギュラーなので基本的に発生しない)
NDMF VRM Exporter に Issue を起票

利用制約は軽量化によって解決できることがあります。軽量化についての詳細は VRChatアバター最適化・軽量化【脱Very Poor】 を参照してください。

プラットフォームによる制限のためポリゴン数を減らしたいけど、どうすればよいですか?

NDMF VRM Exporter 自体はポリゴン数を減らす機能を持っていませんが、NDMF プラグインとしても提供されている Meshia Mesh Simplification(詳細な使い方とコツは こちらの記事 が詳しい)を併用することでポリゴン数を減らすことが可能です。

[!IMPORTANT] ポリゴン数の削減はアバターの見た目に直接影響するため、まず Avatar Optimizer で削減を行った上でどうしてもそれだけで達成ができない場合にのみ Meshia Mesh Simplification を利用するようにしてください

具体例として Cluster での VRM 1.0 は全てのメッシュで 72000 ポリゴンの上限 がありますが、Meshia Mesh Simplification の PC-Poor-Medium-Good プリセットを使うことによりその制約を満たすことが可能です。

NDMF VRM Exporter に出力するときだけ表示または非表示にしたいオブジェクトがあるけどどうすればよいですか?

[!IMPORTANT] Modular Avatar を導入した上でセットアップされていることが前提となります

Modular Avatar の プラットフォームフィルター コンポーネントを表示または非表示にしたいゲームオブジェクトに付与します。このときプラットフォームを VRM 1.0 (NDMF VRM Exporter) にし「含める(表示)」または「除外する(非表示)」を設定します。その後に「使い方その2」の方法であるアバタープラットフォームから VRM 1.0 (NDMF VRM Exporter) を選択して書き出してください。

なお「使い方その1」の方法だと NDMF VRM Exporter のアバターとしてではなく、VRChat のアバターとして書き出されるためプラットフォームフィルターが機能しません。

Footnotes

  1. VRM の仕様でも個人情報を含めることについては 意図していません

  2. 厳密には VRCPipelineManager コンポーネントで管理されているブループリント ID が発行されている必要があります。これはアバターの初回アップロード後に自動的に発行されます

  3. これは VN3 のような法務的監修を受けたライセンスとは別の完全に独自運用のライセンスを想定しています。ただし独自ライセンスの運用は法務上の相談ができる環境でなければ原則として避けるべきです

  4. ブレンドシェイプに直接対応するものは表情ではなく VRM の派生元である glTF におけるモーフターゲットです

  5. これは Avatar Optimizer に対してアニメーションクリップに含まれる変形対象のすべてのブレンドシェイプの最適化を無効にする必要があるためです。変形対象となるブレンドシェイプの数が多いほどその影響が大きくなります

  6. VRM の派生元である glTF の仕様として ノード名が一意であることを求めていません。その一方で利用先アプリケーションによってはノード名が一意であることが求められる場合があるため、開発用途でなければ有効のままにしてください

  7. lilToon において頂点色は 輪郭線設定 または ファー設定 として転用されますが、VRM の派生元である glTF では本来の目的である頂点色として使われるため、設定を解除すると意図しない色出力が発生することがあります

  8. VRM をサーバにアップロードして利用する場合はテクスチャ圧縮をサーバ側で実施するため NDMF VRM Exporter 側で実施する必要はありません。一方でサーバにアップロードしないかつ KHR_textures_basisu に対応しているアプリケーションを利用するか、開発用途の場合でこのオプションが有用になることがあります

  9. 1.0.5 以前は枝分かれに考慮されていなかったため、枝分かれも繋がったひとつのスプリングボーンとして出力されていました

  10. Position Constraint (実質的に Parent Constraint も同様) は未対応ですが https://github.com/vrm-c/vrm-specification/issues/468 で要望があがっています

  11. VRM Constraint が glTF のノードの拡張として実装されており、ひとつのノード(=ゲームオブジェクト)につきひとつの VRM Constraint しか持つことができないためです

  12. Avatar Optimizer 導入前提で NDMF VRM Exporter は Avatar Optimizer の「後」に実施するのに対して VRCQuestTools が Avatar Optimizer の「前」に実施するため。Avatar Optimizer 未導入の場合の扱いは未定義です

  13. 元々の開発の動機は VRM Converter for VRChat の VRM 1.0 への未対応によるものでした。しかし仮に対応できたとしても毎回手作業が必要になるのに対して極力自動化したい動機が別にあったのと VRChat のアバター着せ替えにおける一大勢力である Modular Avatar を中心とする NDMF 圏の恩恵を最大限受けられるようにするため NDMF プラグインとして実装した経緯があります。開発にあたって lilycalInventory の思想を設計上の参考にしています

Keywords

No keywords found.

Install via VCC

Package ID

com.github.hkrn.ndmf-vrm-exporter

Unity Version

2022.3

Unity Release

undefined

VRChat Version

undefined

Author

License

undefined

Documentation URL

undefined