このトピックでは、評価ツールキット(Evaluation Toolkit)内の特定のカスタム エバリュエータ設定の詳細を説明します。並列評価の詳細な技術情報およびカスタム エバリュエータの背景情報については、「Maya を並列に使用する」を参照してください。
カーブ マネージャ エバリュエータ
評価グラフに追加ノードを含めるには、カーブ マネージャ エバリュエータを使用します。次の操作が可能です。
- 並列評価と GPU 変形を使用して追加ノードを操作し、インタラクティブ操作中の応答性を高める
- 評価グラフのリビルド回数を減らす(スタティック ノードは既に評価グラフに含まれているため)
これらの利点を効率的に実現するために、カーブ マネージャ エバリュエータは 2 つのメイン タスクを実行します。
- 評価グラフの構築中に、追加ノードからダーティな伝播をトリガします。これにより、追加ノードがグラフの構築プロセスおよび作成された評価グラフに含まれるようになります。
- シーンの評価中に、これらの追加ノードの一部を評価することで、パフォーマンスを維持します(評価済みの追加ノードは、評価する必要がありません)。
この結果を示すために、シーン内の次の 3 つの状況を比較します。
- すべてのコントローラに単一のキーが設定されている(つまり、スタティックなアニメーション カーブ)。生成されるアニメーション カーブは一定であるため、これらはスタティックであると見なされ、評価グラフに含まれません。再生時には何も評価されません。
- すべてのコントローラのキーに異なる値が設定されている(つまり、アニメートされたカーブ)。したがって、これらは評価グラフに含まれ、再生時にすべてのものが評価されます。
- すべてのコントローラに単一のキーが設定されている(つまり、スタティックなアニメーション カーブ)。ただし、カーブ マネージャ エバリュエータによって、評価グラフにこれらのスタティックなカーブが事前に入力される。
3 番目の状況の場合は、コントローラを操作するときに、並列評価用に既に設定された評価グラフを持つカーブ マネージャ エバリュエータが利用されます。
次の表に、それぞれの状況の違いがまとめられています。
説明
|
評価グラフのノード数
|
再生
|
EM のマニピュレータ
|
キー設定時にリビルド
|
スタティック カーブ + カーブ マネージャ オフ
|
最も少ない
|
最も速い
|
なし
|
はい
|
アニメートされたカーブ
|
最も多い
|
最も遅い
|
はい
|
いいえ
|
スタティック カーブ + カーブ マネージャ オン
|
最も多い
|
中間
|
はい
|
いいえ
|
要約すると、カーブ マネージャ エバリュエータはノードが既に入力されている評価グラフを利用するため、インタラクティブな操作を評価するように反応する一方で、再生中はこれらの定数ノードのコストを可能な限り抑えます。カーブ マネージャ エバリュエータをアクティブにするには、以下を使用します。
cmds.evaluator(name="curveManager", enable=True) cmds.evaluator(name="curveManager", configuration="forceAnimatedCurves=keyed")
forceAnimatedCurves に使用できる値は、次のとおりです。
-
none: 評価グラフで強制されるカーブはありません。
- controller: コントローラ ノードに接続されたカーブは、評価グラフで強制されますこれは基本的に、コントローラの概念を一般化したものです。
- keyed: キー設定されたスタティック カーブ(1 つのキーまたは同じ値の複数のキーを含むカーブ)は、評価グラフで強制されます。
- all: すべてのカーブが評価グラフで強制されます。
別のオプションである
forceAnimatedNodes を使用できます。
- none: 評価グラフで強制されるノードはありません。
- forcedAnimatedAttribute: 強制されたアニメーション アトリビュートが true に設定されたノードは、評価グラフで強制されます。
これにより、ブール値のダイナミック アトリビュートを使ってタグ付けノードを追加できます。このアトリビュートの既定の名前は forcedanimated です。このアトリビュートがノード上にあり、true に設定されている場合は、ノードがグラフに追加されます。アトリビュートの名前は、forcedAnimatedAttributeName オプションでコントロールできます。
既定では、カーブ マネージャ エバリュエータはグラフのスタティックな部分の評価をスキップしようとします。デバッグやパフォーマンス計測のために、この最適化を無効にすることができます。
cmds.evaluator(name="curveManager", configuration="skipStaticEvaluation=disable")
デフォーマ エバリュエータ
デフォーマ(deformer)エバリュエータは、GPU のオーバーライド (GPU Override)オプションを実行します。
デフォーマ(deformer)エバリュエータは、シーンのパフォーマンスを向上させるために、デフォーマ ノード チェーンの CPU の評価を GPU の評価に置き換えます。deformerEvaluator コマンドを使用して、シーン内でサポートされているデフォーマ ノード チェーンに関する情報を取得する、または特定のノードがサポートされない理由を検出します。GPU のオーバーライド(GPU Override)によってサポートされている頂点の数を表示するには、評価のヘッドアップ ディスプレイ(HUD)オプションを使用します。
制限
- 各デフォメーション チェーンは、出力接続を持たないメッシュ ノードで終わる必要があります。つまり、そのメッシュがサポートされるためには、pointOnPoly コンストレイント、毛根、またはその他の出力接続を持つことができないことを意味します。
- blendShape、skinCluster、cluster、softMod、tweak ノードのみ、および特定のフィーチャのみがサポートされます。
ダイナミクス エバリュエータ
ダイナミクス(dynamics)エバリュエータは、複雑な評価要件があることの多い、ダイナミクス関連のノードの評価を適切に処理します。いくつかの構成オプションがサポートされていますが、通常は既定の動作で対応できるため、構成オプションを使用することはありません。
ダイナミクス エバリュエータには 3 つの主な役割があります。
- ダイナミクス エバリュエータによって評価されるダイナミクス関連のノードをクラスタ内にグループ化します。
- これらのクラスタがダイナミクス関連のノードが必要とする複雑な評価ルールに従うように、クラスタの評価を管理します。
- サポートされない設定を検出すると並列評価を無効にする
制限
- 評価マネージャを使用するダイナミクス シミュレーション(およびダイナミクス エバリュエータ)は、DG ベースの評価とは異なる結果を出す場合があります。しかし、これらの結果は、Maya のビューポートで行われるか Maya バッチで行われるかに関係なく一貫性があります。
- 旧式のダイナミクス(旧式のパーティクル、流体など)は、ダイナミクス エバリュエータでサポートされません。サポート対象外のアニメートされたノードがシーンで検出された場合、並列評価は無効になります。
ダイナミクス評価とサポートされていない機能の詳細については、「並列 Maya を使用する」を参照してください。
フリーズ(frozen)エバリュエータ
フリーズ(frozen)エバリュエータを使用して、評価から評価グラフのサブセクションを除外することができます。これは frozen アトリビュートを使用して機能し、エバリュエータ設定によって設定されたルールを使用して、関連するノードにフリーズ状態を伝搬します。フリーズ(frozen)エバリュエータは、DAG と評価グラフ内の接続と伝搬の概念をよく理解している場合にのみ、使用してください。そうでない場合は、もっと単純な非表示エバリュエータの方を使用してください。
評価マネージャでは、frozen アトリビュートが True に設定されたノードは評価されません。フリーズ(frozen)エバリュエータが有効な場合、有効化されたオプションに対応するルールに従って、関連するノードは評価されなくなります。
フリーズ(frozen)エバリュエータは、3 つのフェーズで動作します。
- フリーズ用にマークされた invisible および displayLayers オプションでフラグ設定されているノードを集めます。
- 評価グラフを通って外向きにフリーズ状態を伝搬します(downstream および upstream オプションの値に応じる)。
- フリーズしたノードを分析し、下流ノードに他のフリーズ解除の入力がない場合は、これらはスキップされます。この手順は、次の制限事項で説明するランタイム操作と呼ばれます。
さらに詳細な解析については、「並列 Maya を使用する」を参照してください。
非表示エバリュエータ
非表示(invisibility)エバリュエータは、モデリング ビューポートの目的で非表示となっているすべての DAG ノードを特定して、表示される
DAG ノードから上流にないすべてのノードを評価しないようにします。このエバリュエータは非表示としてレンダーするノードを決定するために、次の状態のいずれかを考慮します。
- "Visibility" アトリビュートが false に設定されたノード。
- "Draw Override Visibility" アトリビュートが false に設定されたノード、および "Draw Override Enabled' アトリビュートが true に設定されたノード。
- オプション 2 (上記)を true にする表示レイヤのノード。
- "IsIntermediateObject" アトリビュートが true に設定されたノード。
- 上方のノードからルートまでのすべてのパスで、上記の少なくとも 1 つにあてはまるノードが少なくとも 1 つ検出された場合。(この場合、インスタンス化において「すべての」という点が重要です。上記のいずれかによって、1 つのノードへのすべてのインスタンス パスが非表示としてレンダーされる必要があります)。
非表示ノードのみを制御するノードはフリーズされ、評価されません。(表示されている DAG ノードは、自らを制御するものとみなされるため、常に評価されます)。
多くの場合、非表示(invisibility)エバリュエータを有効にした場合の実際の結果は、シーンに目に見える変化をもたらすものではなく、非表示項目に応じて幅はありますが、再生速度が改善するというものです。
使用が推奨されない場合
非表示(invisibility)エバリュエータは、その表示の定義をノードの可視性状態のみから取得するため、UI またはプラグイン コードが評価に非表示ノードを必要とする場合は、非表示(invisibility)エバリュエータは使用しないでください。
制限
- 非表示(invisibility)エバリュエータは静的可視性のみを考慮します。上記の定義によりアニメートされた可視性がある(つまり、任意のチェック対象アトリビュートがアニメートされる)ノードは、常に表示されるとみなされます。
- サイクルが存在する場合、サイクル内のすべての項目は非表示にする必要があり、さもなければサイクルがフリーズされません。
- ノードをインスタンス化し、上方に少なくとも 1 つの表示されているパスがある場合は、すべての上方のパスが評価されます(つまり、2 つのインスタンスのうち一方を非表示にしても効果はありません)。