このセクションでは、Maya にカスタム エバリュエータを追加するために使用する API のクラスとメソッドについて説明します。カスタム エバリュエータにより、評価マネージャが DG ノードをスケジュールして実行する方法を変更することができます。Maya 2016 で導入されたシーン評価の変更を確認する場合は、詳細について、ホワイトペーパー『Improving Performance with Parallel Evaluation(英語)』(http://www.autodesk.com/maya-docs)を参照してください。
このセクションでは、評価マネージャで評価グラフを作成、パーティション化、およびスケジュールする方法を簡単に確認した後、新しい API クラスを紹介し、最後に新しい API クラスの使用を促進する簡単な例を説明します。devkit では追加の例を参照できます。
Maya 2016 で導入された評価マネージャ(EM)では、ディペンデンシー グラフ(DG)ノードの同時評価をサポートすることにより、再生と操作のパフォーマンスが向上しました。
EM では、シーンの異なるパーツのカスタマイズ処理を可能とする特別なエバリュエータを使用します。Maya 2016 では、次の 3 つのエバリュエータが用意されています。
エバリュエータ | ディテール |
---|---|
デフォーマ | 高密度のジオメトリをよりすばやく変形するために、GPU ハードウェアを活用 |
ダイナミクス | シーンにサポートされない旧式ダイナミクスが含まれているかを検出し、検出した場合は並列評価を無効化 |
ルートを削減 | ノードスケジュールのオーバーヘッドを減らすために評価中のアニメーション カーブをグループ化 |
EM ではシーンの評価時、グラフの構築、グラフのパーティション化、およびグラフのスケジュールという 3 つの主要手順が実行されます。それぞれを以下に説明します。
従来の Maya の評価とは異なり、EM はフレームごとに何を評価するかを決定するために、ダーティな伝播に依存することはありません。代わりに、EM は DG ノード間の依存関係をエンコードする評価グラフ(EG)を作成します。
EG の構築中に、アニメートされた各ノードに対してプラグのリストを作成します。このリストには、特定のノード上の下流の従属で必要なすべてのプラグが含まれており、特定のノードが評価されるたびに、すべての上流の依存関係が確実に最新の状態に保たれます。
EG が構築されると、EM ではグラフのさまざまなパーツの評価方法を計算する必要があります。これを行うために、有効化されたエバリュエータが優先順にノードのサブグラフの所有権を要求することが可能となります。ノードを要求するには、エバリュエータは対象となるノードをマークする必要があります。
走査中に、1 つまたは複数の入力に接続した 1 つまたは複数の出力を持つ、あらゆるノード レベルのサイクルは、EM によってクラスタとしてグループ化されます。異なるエバリュエータによって要求されているサブグラフもクラスタに追加されます。
クラスタは単一のユニットとして一緒に評価され、相互に排他的です(つまり、1 つの評価ノードは最大 1 つのクラスタに属することができます)。したがって、すべてのクラスタのセットが、EG のパーティションを提供します。
クラスタは階層状にレイヤ化され、現在のクラスタがノードの評価に失敗した場合、コントロールは親クラスタに渡されます。優先順位の高いものから順に、クラスタのレイヤは次のとおりです。
レイヤ | ディテール |
---|---|
カスタム | カスタム エバリュエータ クラスタのレイヤ。ノードがカスタム エバリュエータのクラスタにある場合、そのエバリュエータがノードの評価に対する責任を持ちます。 |
サイクル | 正確性を確保するために特別な評価が必要となることが多い DG ノードレベルのサイクルのレイヤ(コンストレイントなど)。 |
ベース シェーダ | クラスタなしの既定レイヤ。ノードは、特別な処理が不要で直接評価されます。 |