スケール補正についてのお話こんにちは。CG開発室の鈴木です。Mayaからアニメーションを出力し、Unityに入れてみた際に、スケールアニメーションがうまく再生されない。いった経験は無いでしょうか。MayaとUnityでは同じような内容でもちょっとした設定が違う項目が多々あります。Picturesでは、Mayaで出力したアニメーションをUnityに入れてみた際にスケールアニメーションに違いが出てしまった。いう際についてのお話をしてみたいと思います。実際にどういった現象が起きるか見てみましょう。MayaとUnityでのスケールアニメーションの違いMayaからUnityにジョイントをつけたモデルを読み込んでみるはじめに、簡単にモデルを用意し、スキニングを行います。デフォルト設定のままスキニングを行い、それぞれのジョイントのスケールにキーを打っていきます。1F-30Fでスケール1になり、30F-60Fでスケール2になるアニメーションをつけてみました。データをFBXで書き出し、Unityに入れてみましょう。Unityでアニメーションを再生してみると・・・Maya上でつけたものと、様子が違いますね。具体的にどう違うのかMayaとUnityの結果を並べて確認してみましょう。明らかに、Maya上とUnity上で違うアニメーションになってしまいました。この見た目の違いをあわせるには?Maya側で調整を行いますジョイントのアトリビュート内、セグメントスケール補正のチェックをオンオフすることでスケールのかかり方を変更することが出来ます。Mayaはデフォルトでチェックが入っていますが、チェックを外すことで、Unity上と動作をあわせることが出来ます。各ジョイントのセグメントスケール補正のチェックをはずします。セグメントスケール補正を調整したシーンファイルをFBX出力し、Unityにインポートして、先程のデータと並べてみると、下図のような状態になります。これで、Mayaと同じ状態のアニメーションをインポートすることが出来ました。Maya側でスケールアニメーションをつける際に、セグメントスケール補正のチェックを外した上でアニメーション作業を行えば、MayaとUnityで同様の結果を得られることが分かりました。Unity側で調整することは可能かUnityではセグメントスケール補正機能はありませんので、基本的にMaya側の状態に合わせることは出来ません。スクリプトを組み、セグメントスケールを補正をかけれるようにすれば出来るかもしれませんが、結果として余計な負荷がかかってしまうことになります。セグメントスケール補正とは?上記でセグメントスケール補正を調整すれば解決する!と記載しましたが、セグメントスケール補正とはどういった項目なのでしょうか。セグメントスケール補正(Autodeskhelpを引用)このアトリビュートをオンに設定すると、親ジョイントのスケーリングに対して補正が行われるため、子ジョイントには影響しません。オフにすると、ジョイントのスケーリングが親ジョイントのスケーリングの影響を受けます。ここで着目するのは、親ノードの影響を子供が受けるかどうかという点になります。通常、モデル等のノードであれば、子供は親の影響を受けるようになっています。Mayaではジョイントに関してのみ、セグメントスケール補正をかけることができ、親の影響を受けずに子供のスケールを変更することが出来るようになっています。今回の事例では以下の現象が起きていました。Mayaセグメントスケール補正がonの場合です。次に、Mayaセグメントスケール補正をoffにした場合です。今回、Unityにインポートを行った事例ではこの状態が発生していました。最後に、入力スケールを変えてみた場合です。結局どうしたらいいの?Mayaでジョイントを組む際、セグメントスケール補正のチェックを外しておきます。その状態であれば、UnityとMayaで齟齬の無いデータをつくることができます。他ツールの場合は?Maya、Unity以外のツールでのスケールアニメーションについて少し紹介します。正しく読み込まれません。スケール補正設定をサポートしていないために発生します。Engine(アンリアルエンジン)に入れた場合は?セグメントスケール補正あり、セグメントスケール補正無しの両データを簡単にインポートしてみたところ、以下の結果となりました。同じ結果を得ることができました。Engineでは、セグメントスケールの補正を受けることができるようです。Engineが同一の結果となりました。Engineに関しては、Unityに正しく書き出せたデータでも同じ結果となりましたので、どちらでも大丈夫なようです。Mayaのみ、スケール補正がかけられるようになっているので、アニメーションをつける際には注意が必要になるようです。まとめいかがでしたでしょうか?今回は、Maya・Unityでのジョイントのスケールという少し変わった箇所のお話を紹介しました。初歩的な箇所で、あまり気にしない箇所かもしれませんが、ちょっとした違いでかなり変わってきます。Engineではまた違った結果となりましたので、ツールをまたぐ制作であれば、それぞれ見極めていく必要がありますね。