さまざまな評価モードを使用してパフォーマンスに改善があったかシーンをテストします。各モードのフレーム レートに注意してください。
評価モードをテストするには:
- シーンをロードします。
- プリファレンス(Preferences)ウィンドウ(ウィンドウ > 設定/プリファレンス > プリファレンス(Windows > Settings/Preferences > Preferences))で、(設定(Settings)の下の)アニメーション(Animation)カテゴリを選択します。
- 評価モード(Evaluation Mode)メニューを DG に設定し、ディペンデンシー グラフ(DG)モードになっていることを確認します。
DG モードは、前の既定の評価モードでした。
- DG モードでシーンを再生し、フレーム レートに注意します。
- シリアル(Serial)モードに切り替え、シーンを確実に正しく評価します。フレーム レートに注意します。
注: DG モードよりもシリアル(Serial)モードの方がシーンの実行が遅くなることがあります。これは、シリアル(Serial)モードでは DG モードよりも多くのノードが評価されるためです。
注: FBIK により評価マネージャでディペンデンシーが失われるため、FBIK を使用するアニメーションはシリアル評価に戻ります。FBIK は廃止されているため、全体インバース キネマティクスおよびリターゲットには HIK を使用します。
- シーンが正しく表示される場合は、平行(Parallel)モードに切り替えます。
注: シリアル(Serial)モードでシーンが間違って表示される場合は、平行(Parallel)モードでも正しく動作しない可能性があります。平行モードでは評価スケジュールが使用されますが、使用可能なすべてのコアに計算が配分されるからです。アトリビュートをダーティにする setDependentsDirty を使用するカスタム プラグインによって、シリアル(Serial)モードで不適切な評価が行われることがあります。
- 次に、平行(Parallel)モードである間に、
GPU のオーバーライド(GPU override)
をアクティブにします。シーンに標準的な Maya のデフォーマが設定されているかメッシュのジオメトリが高密度である場合に、パフォーマンスが向上する可能性があります。結果は、シーン内のデフォーマとメッシュの密度によって異なります。
注: GPU オーバーライド エバリュエータはシリアルまたは平行評価モードで使用できますが、GPU のオーバーライド(GPU override)は VP1 では機能しません。
スピードを解析する場合:
- GPU のオーバーライド(GPU override)評価モードを使用するときは VP2.0 を使用します。GPU のオーバーライド(GPU override)は VP1 では機能しません。
- 直接グラフ評価モードと新しい評価モード間の速度向上を決定するために VP2.0 の頂点アニメーション キャッシュを無効にします。(VP2.0 の頂点アニメーション キャッシュを無効にするには、ビューポート 2.0 オプション > 頂点アニメーション キャッシュ > 無効化(Viewport 2.0 option > Vertex Animation Cache > Disable)を選択にします。)VP2.0 の頂点アニメーション キャッシュがアクティブにすると、連続再生が高速化され、解析がスキューされます。
平行モードのトラブルシューティング
平行シーン評価では、利用可能なすべてのコンピュータ リソースを活用して、シーンをよりすばやく評価します。これは、ダーティな伝播機構を使用してシーンの説明から評価グラフを作成することで実現されます。
評価グラフで正しい結果を生成するには、DG でディペンデンシーを正確に表現する必要があります。ノードのディペンデンシーがシーンに適さない場合は、平行評価で間違った結果が生成されるか、Maya がクラッシュすることがあります。
たとえば、NodeA が NodeB と NodeC に依存するシナリオでは、評価マネージャは NodeB と NodeC の状態を計算してから A の状態を計算する必要があります。
セーフ モードでは、平行評価がアクティブなときに整合性テストが実行されます。このセーフ モードでは、最も一般的なタイプのエラーである無効なディペンデンシーを防ぐことができます。セーフ モードでエラーが検出されると、HUD で示されているとおりに評価マネージャがシリアル評価モードに戻ります。セーフ モードがシリアル評価に戻ることができる理由の 1 つは、ノード インスタンスが複数のスレッドによって同時に評価される場合です。
セーフ モードでは多くの問題が検出されますが、すべての問題が検出されるわけではありません。したがって、問題を検出するために、シーンをより詳細に(コストをかけて)チェックを実行する新しい解析モードがあります。
注: Python コマンドを大量に実行すると、パフォーマンスの問題が発生する場合があります。その場合は、環境変数 MAYA_RETAIN_PYTHON_GIL を定義してください。(MAYA_RELEASE_PYTHON_GIL は廃止されました。既定値は true であり、MAYA_RETAIN_PYTHON_GIL で上書きできます。)
また、カスタム Python ノードで他のスレッドを評価するときにも Python のパフォーマンスの問題が発生する可能性があります。
解析モード
解析モードは、アニメータがリグを再生したり操作するときに必要とするものではありません。それよりは、新しいリグを作成するときに評価の問題をトラブルシューティングするリグ作成者やテクニカル ディレクタ向けに設計されています。
解析モード:
- 各再生フレームでエラーを検索する: 平行実行の開始時にのみ問題を特定しようとするセーフ モードとは異なります。
-
ノード アトリビュートの読み取りアクセスを監視する: 評価グラフでノードに正しい依存構造があることを保証します。
- 評価に影響を与えているノードを良く理解するための診断を返す: 現在は一度に 1 つの接続先ノードのみをレポートします。
解析モードは、シリアル モードのときに次のコマンドを使用してアクティブ化します。
dbtrace -k evalMgrGraphValid;
解析モードを無効にするには、次を入力します。
dbtrace -k evalMgrGraphValid -off;
一度アクティブにすると、評価が実行されるたびにエラー検出が行われます。検出された不足ディペンデンシーは、ご使用のコンピュータの一時フォルダのファイルに保存されます。たとえば、Windows では %TEMP%¥_MayaEvaluationGraphValidation.txt に結果が保存されます。
2 つのノード間の不足ディペンデンシーを示すサンプル レポートを次に示します。
フレーム 56 で不足ディペンデンシーが検出された場合
{
NodeA.output <-x- NodeB
NodeA.output <-x- NodeC [cluster]
}
フレーム 57 で不足ディペンデンシーが検出された場合
{
NodeA.output <-x- NodeB
NodeA.output <-x- NodeC [cluster]
}
"<-x-" という記号はディペンデンシーの方向を示し ます。"[cluster]" という用語は、ノードがサイクル クラスタ内部にあることを意味します。つまり、サイクルのいずれかのノードが評価順序外のアトリビュート アクセスをしています。
上記の例では、NodeB が NodeA の "output" アトリビュートにアクセスしていて、これが間違っています。このようなタイプのディペンデンシーは、評価グラフに現れず、平行モードで評価を実行したときにクラッシュの原因になることがあります。