シェーダ ドリブンの更新

レンダラは完全に「シェーダ ベース」です。つまり、すべてがシェーダでレンダリングされ、シェーダ要件はジオメトリック データ要件を決定するための駆動力になります。ジオメトリック パラメータの変更にはデータの更新が必要になる場合がありますが、これらの更新はシェーダの要件に基づいています。

ここで説明する「シェーダ」とは、Maya シェーディング ネットワークではなく、レンダラが内部でサポートするシェーダを指します。すべての内部シェーダは、プログラム可能なハードウェア シェーダであり、推奨されるすべての API インタフェースでもシェーダの使用が前提になります。固定機能レンダリングの概念は、現在は描画の推奨方法として使用または公開されていません。

各シェーダは、UI 要素の描画またはサーフェス シェーディングのどちらに使用されるかに関係なく、1 つのデータ要件セットを指定します。レンダリング可能オブジェクトに影響するすべてのシェーダの要件が統合され、提供する必要のある適切なジオメトリック データをレンダリング可能オブジェクトに通知するために使用されます。

シェーダの指定とジオメトリック データはどちらも最新である場合と、最新でない場合があります。変更管理メカニズムにより、必要に応じて変更要件が両方に伝播されます。

この例として、以下に簡単なシナリオを示します。

図 4: 2 つのシェーダと 1 つのレンダリング可能オブジェクトおよびそれらの変更(ダーティ)の依存関係とデータ要件の依存関係を示しています。

(上の)シェーダおよびレンダリング可能オブジェクトの Maya 構成それぞれから、変更が通知されます。レンダラ自身(「レンダー オプション」)も、変更を両方に伝播します。2 番目(下)のシェーダには Maya オブジェクトが含まれず、このシェーダはインスタンスの UI 描画に使用できます。このシェーダは、要件も指定します。更新が必要な場合は、すべてのシェーダがレンダリング可能オブジェクトに要件を提供し、オブジェクトは適切なジオメトリ データを更新してそれらの要件を満たします。

更新フェーズの最終的な結果は、新しく作成された、または更新されたレンダー項目になります。

各レンダー項目は、シェーダとデータの両方を 1 つの単位として追跡します。シェーダとデータの両方を異なるレンダー項目で共有することができます。

図 5: データとシェーダは、どの個別のレンダー項目にも依存しないため、複数のレンダー項目で共有できます。

上記のシナリオの具体的な(ただし多少巧妙な)例を次に示します。

  1. Maya オブジェクトが変形されています。
  2. このオブジェクトに割り当てられている Maya シェーダには、バンプ マッピングが必要です。

Maya オブジェクトは、ジオメトリの変更(トポロジ変更)をレンダリング可能オブジェクトに通知します。Maya シェーディング ネットワークは、新しいシェーディング アルゴリズム要件、つまり接線と複接線を対応するシェーダに通知します。レンダラは、位置とカラーの 2 番目のセットを必要とする、コントロール ポイントを描画するための「UI」シェーダに対する要件をレンダリング可能オブジェクトに通知します。統合要件は、2 つの位置セットと、カラー、法線、接線、複接線のセットがそれぞれ 1 つになります。

図 6: このスナップ ショットでは、レンダリング可能オブジェクトを使用して、バンプ マッピングで塗り潰されたトーラスを描画しています。もう 1 つのレンダリング可能オブジェクトは、コントロール ポイントの描画に使用されています。サンプル シナリオでは説明しませんでしたが、3 番目のレンダリング可能オブジェクトが、アイソパラムの描画に使用されています。

図 7: シナリオで生成されるレンダー項目です。位置(P1)、法線、接線および複接線がバンプ シェーダに対して参照されています。位置(P2)とカラーの 2番目のセットは、コントロール頂点(CV)シェーダに対して参照されています。アイソパラム レンダー項目は表示されていません。