Version: 2018.4
言語: 日本語
ヒューマノイドアニメーションのリターゲティング
アニメーションリファレンス

パフォーマンスと最適化

このページでは、Unity のアニメーションシステム から最高のパフォーマンスを得るためのヒントを紹介します。キャラクターの設定、アニメーションシステム、ランタイムの最適化をカバーします。

キャラクターの設定

ボーンの数

場合によっては、多数のボーンを持つキャラクターを作成する必要があります。例えば、多くのカスタマイズ可能なアタッチメントが必要な場合などです。これらの余分のボーンはビルドのサイズを増加させ、個々の余分のボーンに関連する処理コストが発生する可能性があります。例えば、すでに 30 のボーンがあるリグに 15 の追加ボーンを加えると、Generic モードで解決するのに 50% 時間が長くかかります。Generic (ジェネリック) と Humanoid (ヒューマノイド) タイプ、どちらもボーンを追加することができます。追加のボーンを使用してアニメーションを再生しない場合は、処理コストはごくわずかです。アタッチメントが存在しないか非表示の場合、このコストはさらに低くなります。

複数のスキンメッシュ

スキンメッシュは可能な限り組み合わせてください。キャラクターを 2 つの スキンメッシュレンダラー に分割すると、パフォーマンスが低下します。キャラクターがマテリアルを 1 つしか持たない場合は、キャラクターが 1 つのマテリアルを持つ方がよいですが、複数のマテリアルが必要な場合もあります。

アニメーションシステム

コントローラー

Animator コンポーネントController が設定されていなければ処理時間は増加しません。

シンプルなアニメーション

ブレンディングなしで 1 つの アニメーションクリップ を再生すると、Unity は 古いアニメーションシステム を使うよりも遅くなる場合があります。古いシステムは非常に直接的で、カーブをサンプリングし、直接 Transform に書き込みます。Unity の現在のアニメーションシステムには、ブレンディングに使用する一時的なバッファがあり、サンプリングされたカーブやその他のデータの追加コピーを行います。現在のシステムレイアウトはアニメーションブレンディングとより複雑な設定のために最適化されています。

スケールカーブ

スケールカーブのアニメーションは、移動や回転のアニメーションよりも非常に処理コストがかかります。パフォーマンスを改善する場合は、スケールアニメーションを避けます。

注意 一定のカーブ (アニメーションクリップ の長さにおいて常に同じ値を持つカーブ) には適用されません。一定のカーブは最適化され、通常のカーブに比べて負荷がかかりません。デフォルトのシーンの値と同じ値を持つ一定のカーブは、毎フレームにシーンに書き込まれるわけではないからです。

レイヤー

大抵、Unity はアニメーションを評価し、アニメーションレイヤーアニメーションステートマシン のオーバーヘッドを最小限に抑えています。他のレイヤーを Animator に追加するコストは同期されているかどうかにかかわらず、レイヤーによって再生されるアニメーションとブレンドツリーによって異なります。レイヤーのウェイトが 0 の場合、Unity はレイヤーの更新をスキップします。

ヒューマノイドとジェネリックのアニメーションタイプ

以下は、ヒューマノイドタイプとジェネリックタイプを使用する際に役立つヒントです。

  • ヒューマノイドアニメーションをインポートするときに、必要がない場合は、アバターマスク (class-AvatarMask) を使用して IK ゴールや指のアニメーションを削除します。
  • ジェネリックを使用する場合、ルートモーションを使用する方が、使用しない場合よりもコストがかかります。アニメーションがルートモーションを使用しない場合は、ルートボーンを指定していないことを確認してください。

シーンレベルの最適化

多くの最適化が可能ですが、以下は有用なコツの一部です。

  • Animator にクエリする際は、文字列の代わりにハッシュを使用してください。
  • 小規模の AI レイヤーを実装して Animator を制御してください。それによって、OnStateChange、OnTransitionBegin、その他のイベントの簡単なコールバックを提供することができます。
  • 状態タグを使用して、AI ステートマシンを Unity ステートマシンに簡単に一致させることができます。
  • 追加のカーブを使用してイベントをシミュレーションします。
  • 追加のカーブを使用してアニメーションに印をつけます。例えば、ターゲットマッチング と組み合わせて使用します。

ランタイムの最適化

可視性と更新

Animator の Culling ModeBased on Renderers に設定することによってアニメーションを常に最適化し、Skinned Mesh RendererUpdate When Offscreen プロパティを無効にします。これにより、キャラクターが表示されないときに Unity がアニメーションを更新するのを防ぐことができます。


ヒューマノイドアニメーションのリターゲティング
アニメーションリファレンス