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

「デフォーマー以外のヒストリ」のオプションで、すべての非デフォーマ履歴か、デフォーマより前の履歴だけかを確認して実行します。後者ではデフォーマより後の処理が残るため、警告原因が消えるとは限りません。Autodesk:Non-Deformer History Options

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

再度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";
        string $inputs[] = `listConnections -source true -destination false -plugs true $attr`;
        if (size($inputs) == 0 && `getAttr -settable $attr`) setAttr $attr 0;
        else warning ("Skipped locked or connected attribute: " + $attr);
    }
}
}

このMELは選択したルートジョイントとその子孫だけを対象にし、書き換え可能なSegment Scale Compensateを無効にします。

ロック中、または入力接続のある属性は警告を出してスキップします。キーフレームによる入力接続も対象です。getAttr -settableだけではキー付き属性が変更可能と判定される場合があるため、入力接続も調べています。Autodesk:getAttr

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

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

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

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

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

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

よくある質問:MayaでFBXを書き出すときのエラーを直すチェックリスト

MayaでFBXを書き出すとき、どんな警告が出ますか?

「デフォーマー以外のヒストリ削除を促す警告」を紹介しています。列挙されたノードをFBX書き出しで処理できないことを示す警告で、当時のモデルでは、出力先でメッシュが表示されない症状につながりました。2016年と2018年に遭遇した警告をもとにした記録で、現在のすべてのモデルで同じ原因になるわけではありません。

警告が出たまま書き出すと、どうなりますか?

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

デフォーマー以外のヒストリは、どう削除しますか?

まず、別名保存して作業用のコピーを作り、警告に列挙されたメッシュを確認します。対象のオブジェクトを選択し、上部のメニューから、「編集」→「種類ごとに削除」→「デフォーマー以外のヒストリ」を実行します。通常の「ヒストリをすべて削除」と取り違えないようにしてください。

ヒストリを削除する前に、注意することは?

ベイクによって変形結果が変わる場合があるため、元データを別名保存します。削除範囲のオプションを確認し、実行後は静止形状だけでなくスキンやブレンドシェイプを動かして比較してください。警告が残る場合は履歴のどの処理が原因かを再確認します。

Unityで読み込むと、モデルの形状が崩れます。

記事の事例では、Unityの読み込み時に、Scale Compensationの警告(Unityでは、Scale Compensationがサポートされていないという内容)が出ていました。ジョイントのSegment Scale Compensate設定を調べると原因を絞れますが、モデルの崩れはバインド姿勢や変換設定などでも起こるため、同じ警告が出ているかを先に確認してください。

Optimize Scene Sizeを実行すれば、直りますか?

Optimize Scene Sizeを、形状崩れの一般的な解決策として実行することは勧めていません。当初は、不要ノードの整理を考えましたが、これは当時の検討メモです。

Segment Scale Compensateを無効にするMELは、どう使いますか?

作業用コピーで、対象リグのルートジョイントを選択します。設定変更でポーズや拡縮が変わるため、元のリグで直接実行しないでください。「ウィンドウ」→「一般エディタ」→「スクリプトエディタ」を開き、MELタブにコードを貼り付けます。このMELは、選択したルートジョイントとその子孫だけを対象にし、ロック中・接続中の属性は警告を出してスキップします。

このコードは、動作確認済みですか?

更新したコードは、実機での動作未検証です。コピー上で対象範囲と結果を確認してから書き出してください。変更したコピーをFBXへ書き出してUnityへ読み込み、メッシュだけでなく、姿勢・スケール・アニメーションも比較します。形状が悪化した場合は、元データへ戻し、警告と設定を再検討してください。メニュー名や仕様は、バージョンで変わることがあるため、最新はAutodeskの公式ヘルプで確認してください。

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

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

3DCGのおすすめ書籍

3DCG用PCの選び方

周辺機器の優先度

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