Amazonで商品を見るセール会場へ

【Maya】ポリゴン編集後、FBXのエクスポート時にエラーが出る場合の対応方法

VRoidのモデルをBlender経由でFBXとしてエクスポートします。

そのモデルをMayaで編集し、警告が出た状態のままFBXへ再出力すると、BlenderやUnityに読み込んだ際にメッシュが表示されなくなる場合があります。

ここでは2016年と2018年に遭遇した警告をもとに、原因を切り分ける手順をまとめます。

現在のすべてのモデルで同じ原因になるわけではありません。

【Blender】VRoidのデータ(VRM)を読み込む方法https://cg-method.com/vtuber/blender-import-vrm/

目次

デフォーマー以外のヒストリ削除を促す警告が出る場合

FBXエクスポート時に表示される、デフォーマー以外のヒストリ削除を促す警告メッセージ。
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書き出しで処理できないことを示しています。

当時のモデルでは、出力先でメッシュが表示されない症状につながりました。

対応方法

まず別名保存して作業用のコピーを作り、警告に列挙されたメッシュを確認します。

デフォーマー以外のヒストリを削除すると一部の処理がベイクされるため、元データを残してください。

通常の「ヒストリをすべて削除」と取り違えないようにします。

  1. 対象のオブジェクトを選択
  2. 上部のメニューからEdit > Delete by Type > Non-Deformer History

メニューの「編集」>「種類ごとに削除」>「デフォーマー以外のヒストリ」を実行します。

上部メニューから種類ごとに削除内のデフォーマー以外のヒストリを選択する操作手順。

再度FBXを書き出し、警告が消えたか、メッシュ・スキン・ブレンドシェイプが意図どおりかを読み込み先で確認します。

警告が残る場合は、対象ノードと履歴を再確認してください。

VRoidモデルをMayaで編集してVRMへ戻す手順

[補足] MayaからUnityへ出力したFBXのモデル形状が崩れる場合の対処法

Mayaから書き出したFBXをUnityで読み込んだ際、モデルの形状が崩れてしまう場合の対処手順です。

モデルの形状が崩れる原因

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を無効にします。

ロック中・接続中の属性は警告を出してスキップします。

更新したコードは実機での動作未検証のため、コピー上で対象範囲と結果を確認してから書き出してください。

スクリプトエディタのMELタブに貼り付けて実行するコードの記述内容。

変更したコピーをFBXへ書き出してUnityへ読み込み、メッシュだけでなく姿勢・スケール・アニメーションも比較します。

形状が悪化した場合は元データへ戻し、警告と設定を再検討してください。

3DCGに関する他の記事は、まとめページから確認できます。

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

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

3DCGのおすすめ書籍

3DCG用PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次