プラグイン インタフェースと Maya との相互作用を理解するためには、リファレンスのフレームが提供される必要があります。ここでは、現在のハードウェア レンダラのレンダリング フレームワークの概要を説明します。また、「古い」レンダリング ロジックと「新しい」レンダリング ロジックの違いと類似点についても説明します。
現在は役割が明確に分離され、基になるハードウェア レンダリング フレームワークが存在します。古いシステムでは、レンダリングは主に DAG オブジェクトが行っていましたが、現在はレンダラが行います。
まず、レンダリングに使用されるデータと、Maya のコンストラクトを表すために使用されるデータが区別されます。Maya は DAG オブジェクトを管理しますが、レンダリング フレームワークは Maya DAG オブジェクトのインスタンスを追跡する別のデータベースを管理します。このデータベースは、レンダリング可能オブジェクトを呼び出すコンストラクトで構成されます。一般に、レンダリング可能オブジェクトと DAG インスタンス間には 1 対 1 の関係があることがほとんどです。
図 1: 左に示されているのが階層における DAG オブジェクト セットの例です。結果は 2 つの Maya DAG オブジェクト インスタンスに対して 2 つのレンダリング可能オブジェクトが存在します。
Maya コンストラクトとレンダリング データベースとの間の同期は、「ダーティ」、つまりノードごとまたは DAG オブジェクトごとに、該当するすべての変更を追跡する変更管理メカニズムで実行されます。このメカニズムは、クライアントの任意のセットに変更をブロードキャストする必要があった前のメカニズムとは異なります。
古いモデルと異なり、データの更新は同期によって制御されません。実際、更新により同期を行うことはできなくなりました。更新により同期が行われると、再帰的な更新になるからです。同期は常にアクティブに実行されますが、更新はレンダラが必要な場合にオンデマンドで実行されます。新しいフレームワークでは、レンダリング要求はコマンド ラインを介して非インタラクティブに起動することも、インタラクティブな(ビューポート)レンダリングに使用される既存の待機リフレッシュ メカニズムを使用して起動することもできます。注目すべき大きな違いは、非インタラクティブな要求は常に満たされますが、インタラクティブな要求は、リフレッシュが実行されるかどうかによって満たされない場合もあるという点です。
レンダリング要求を満たすには、一種のレンダリング ループ ロジックを実行する必要があります。このレンダリング ループは、さまざまな「フェーズ」を持つパイプラインとして表示できます。分かりやすくするため、次の使い慣れたフェーズから始めます。
図 2: レンダリング可能オブジェクトが入力として送信され、必要に応じて削減されます。削減されないオブジェクトでは、同期が実行され、必要に応じて更新されてレンダリング可能オブジェクトが生成されます。これらのレンダリング可能オブジェクトは、レンダリングのために送信される前にさらに削減が行われます。
更新フェーズは、同期および「レンダリング可能」オブジェクトの決定を行います。このようなレンダリング可能オブジェクトをレンダー項目と呼びます。レンダー項目が下位のパイプラインに渡されると、追加のロジックが適用されて、フィルタ、つまり実際に描画する必要のある内容の削減が行われます(「レンダリング可能な削減」)。パイプラインの末端は、実際にレンダリングが実行される描画フェーズになります。
レンダー項目は一時的に不明瞭になります。現時点では、レンダー項目がレンダー データとレンダー アルゴリズムの両方を含むアトミック単位を表していることを認識していれば十分です。各一意のアルゴリズムと各一意のジオメトリック プリミティブは、通常は一意のレンダリング可能項目になります。たとえば、コントロール ポイントを描画するためのアルゴリズムには 1 つのレンダリング可能項目が必要で、バンプ マッピングで塗り潰された三角形を描画するためのアルゴリズムには別のレンダリング可能項目が必要です。この例では、プリミティブとアルゴリズムの両方のデータが変化しています。
図 3: データベースを使用しない場合、シーンの走査が必要です。オブジェクトは、更新と描画に必要なすべてのタスクを行います。
別のデータベースを使用しない場合は、シーン内の Maya コンストラクトの完全なスキャンが実行されます。初期のオブジェクトの削減後、各オブジェクトはそれ自体を自由に描画できます。更新と描画の間には明確な分離はないため、インターリーブ評価、移動、および描画を 1 つの「フェーズ」で実行することができます。レンダラがないため、オブジェクト間の最適化はほとんど実行できません。これらはすべての望ましくないプロパティであり、新しいフレームワークでは非推奨であるか禁止されています。
更新の新しいシステムは、データがオンデマンドおよび必要な場合にのみ更新される引き寄せモデルとみなされます。レンダー間で何も変更されない場合、パイプラインは Maya シーンと相互作用せずに動作することができます。古いモデルは、すべてのレンダーでシーン全体を再スキャンし、関連性について後から調べることができるようにすべての内容を更新しようとするため、押し込みモデルとみなされます。