BLOG

RECENT ENTRY

ARCHIVES

FBXデータでのよくある…”罠”

こんにちは!
Development Div. 所属テクニカルアーティストのHです。
GWも終わり、何となく長く感じた通常モードの1週間も今日で終了💻
気持ちを切り替えて来週からも頑張りましょう💪

さて、今回は筆者自身が今でも時々引っかかってしまう
ちょっとした“罠”についてのお話です。
「これ、自分だけじゃないよね…?」
と、共感してもらえたら嬉しいです:)
——————————————–

MotionBuilderやゲームエンジンとの連携で、
スケルトンとジオメトリだけの
“素”のFBXアセットを扱うことがあります。

例えば、MotionBuilder用に出力されたアセットを
わざわざMotionBuilderで開くことが手間に感じる場合や
Mayaで十分に作業ができると判断した時に
Mayaで開く…という場面、ありませんか?

そんな時、思わぬ“罠”に嵌ることがあります。

こちらは弊社のオリジナルキャラクター
アニマちゃんのFBXです↓

あれ、、?スカートにボーン(骨)が入っていません。

この状態を見た時、こう思ってしまうかもしれません・・↓

「まだボディのアニメーション作業用のLODなのかな?」
「データを開いてみたけど、スカートのボーンが来ていない。何か不具合かも?」
「アサインされたばかりで状況がよく分からないけど、
 今はまだ自分が作業できる段階じゃないのかも?」
「アセットがおかしいのかもしれない。正しいデータかSVに確認しなきゃ!」

…等々

これらの判断は、プロジェクトの体制や
担当範囲によってはごく自然なものだと思いますし、
実際にその様な状況の可能性もあるでしょう。
が、実はもっと単純な理由かもしれません…!
「アセットの一部のボーンが非表示設定になっているだけ」
というケースがあります。

MotionBuilder側でグループ設定されたり、
作業中に一部のジョイントを非表示にしていた結果、
そのままFBXとして出力され
Mayaで開くと——

見た目上はボーンが存在しない様に見えることがあります。
この場合、drawStyleがNoneになっているだけで
実際には、ボーンはきちんと存在しています。
Visibility設定ではなく、drawStyleという
別のパラメータによって見えなくなっているのです。


この設定を“bone”に変更すれば通常通りボーンが表示されます👀

…はい、そうです。
これはもう、罠⚠

そしてこの罠、なかなか厄介なんです。
何が厄介かというと、

・特定のボーン構成だと、見事にその部位だけボーンが「無い」様に見える
・色々と状況を深読みしてしまう
・MotionBuilderでは全ノードがスケマティックビューで俯瞰できるが
 Mayaのアウトライナでは展開しないと見えない
・Visibilityでもビューポート設定でもなく、第三の方法で非表示になっている
・そもそもdrawStyleという属性の存在を知らないと気付けない

上記の様な要素が重なり、非常に引っかかりやすいのです💦

対処方法(Pythonスニペット)
この問題は、以下のようなスクリプトで簡単に解決できます。
シーン内の全てのジョイントのdrawStyleを“bone”に設定するものです。
——————————————
import maya.cmds as cmds

joint_lst = cmds.ls(type=’joint’)
for joint in joint_lst:
     plug = ‘{}.drawStyle’.format(joint)
     cmds.setAttr(plug, 0)
——————————————
drawStyleはチャンネルボックスに表示されないため、
複数のボーンを選んで手動で一括変更することはできません。
そのため、現実的にはスクリプトでの対応が最も効率的です。

まとめ
しっかり整備されたパイプラインでは、
こういったケースは発生しにくいかもしれません。
しかし、TAが先行してテストをする際や手動でデータを扱う場面では
思わぬタイミングでこの罠にかかってしまうこともあると思います。

皆さんも、似た状況に遭遇した際は
このdrawStyleの存在を思い出してみてください!

最後までお読みいただきありがとうございました*
それではまた次回👋

PAGE
TOP