VRoidのモデルをBlender経由でFBXとしてエクスポートします。
そのモデルをMayaで編集し、警告が出た状態のままFBXへ再出力すると、BlenderやUnityに読み込んだ際にメッシュが表示されなくなる場合があります。
ここでは2016年と2018年に遭遇した警告をもとに、原因を切り分ける手順をまとめます。
現在のすべてのモデルで同じ原因になるわけではありません。
【Blender】VRoidのデータ(VRM)を読み込む方法https://cg-method.com/vtuber/blender-import-vrm/
デフォーマー以外のヒストリ削除を促す警告が出る場合
The plug-in has detected mesh nodes with unsupported operators that affect the vertex and/or face count. To correct this, delete the Non-deformer history before exporting. The following nodes will not be processed:
BodyFBXASC046baked0
この警告は、列挙されたノードをFBX書き出しで処理できないことを示しています。
当時のモデルでは、出力先でメッシュが表示されない症状につながりました。
対応方法
まず別名保存して作業用のコピーを作り、警告に列挙されたメッシュを確認します。
デフォーマー以外のヒストリを削除すると一部の処理がベイクされるため、元データを残してください。
通常の「ヒストリをすべて削除」と取り違えないようにします。
- 対象のオブジェクトを選択
- 上部のメニューからEdit > Delete by Type > Non-Deformer History
メニューの「編集」>「種類ごとに削除」>「デフォーマー以外のヒストリ」を実行します。
再度FBXを書き出し、警告が消えたか、メッシュ・スキン・ブレンドシェイプが意図どおりかを読み込み先で確認します。
警告が残る場合は、対象ノードと履歴を再確認してください。
[補足] MayaからUnityへ出力したFBXのモデル形状が崩れる場合の対処法
Mayaから書き出したFBXをUnityで読み込んだ際、モデルの形状が崩れてしまう場合の対処手順です。
モデルの形状が崩れる原因
当初は以下のように不要ノードの整理を考えましたが、これは当時の検討メモです。
Optimize Scene Sizeを形状崩れの一般的な解決策として実行することは勧めません。
File>Optimize Scene Sizeをかけます。 ごみノードが邪魔をして、モデルの形状が壊れてしまうので余計なノードを消します。
このケースでは、次のScale Compensation警告から、ジョイントのSegment Scale Compensate設定を調べました。
モデルの崩れはバインド姿勢や変換設定などでも起こるため、同じ警告が出ているかを先に確認します。
ImportFBX Warnings:
File contains 58 (out of 66) nodes with Scale Compensation. Scale Compensation is not supported by Unity (because it works differently in 3dsMax and Maya). This might result in scale imported incorrectly, if this happens try disabling Scale Compensation in your file. The list of nodes that could be affected:
https://whomor.com/blog/2373
解決方法
- 作業用コピーで対象リグのルートジョイントを選択。設定変更でポーズや拡縮が変わるため、元のリグで直接実行しない
- Windows > General Editors > Script Editorを開き、MELタブに下記のコードを貼り付ける
{
string $roots[] = `ls -selection -long -type "joint"`;
if (size($roots) == 0) error "Select the root joint of the export copy.";
string $root;
for ($root in $roots) {
string $joints[] = `listRelatives -allDescendents -fullPath -type "joint" $root`;
$joints[size($joints)] = $root;
string $joint;
for ($joint in $joints) {
string $attr = $joint + ".segmentScaleCompensate";
if (`getAttr -settable $attr`) setAttr $attr 0;
else warning ("Skipped locked or connected attribute: " + $attr);
}
}
}
このMELは選択したルートジョイントとその子孫だけを対象にし、書き換え可能なSegment Scale Compensateを無効にします。
ロック中・接続中の属性は警告を出してスキップします。
更新したコードは実機での動作未検証のため、コピー上で対象範囲と結果を確認してから書き出してください。
変更したコピーをFBXへ書き出してUnityへ読み込み、メッシュだけでなく姿勢・スケール・アニメーションも比較します。
形状が悪化した場合は元データへ戻し、警告と設定を再検討してください。
3DCGに関する他の記事は、まとめページから確認できます。

Mayaの記事は、ほかにもあります。




