データ クラス

これらのオブジェクトはシーン内のレンダリング可能ジオメトリについて記述し、それらが表現する基本の GPU リソースに関する簡単な(ただし明瞭な)抽象概念を示します。 これらはシェイプによってレンダリング可能ジオメトリ(これは Maya の内部シェイプおよびプラグイン シェイプの両方に適用される)を記述するために使用されます。 また、これらはシェーダによってジオメトリをバインドしレンダリングするために使用されます(これも、Maya の内部シェーダおよびプラグイン シェーダの両方に適用される)。 このように明確に分離されているということは、カスタム シェーダが Maya のシェイプを処理できること、Maya のシェーダがカスタム シェイプを処理できること、そしてカスタム シェーダとカスタム シェイプが相互に連携できることを意味します。

シェイプとシェーダ間の基本的な「ハンドシェイク」は以下のとおりです。

  1. シェイプが、レンダリングする必要のあるレンダー アイテム(複数のマテリアル サブジオメトリ、ワイヤフレーム選択、コンポーネントの表示など)のリストに対して照会されます。
  2. シェイプはそのジオメトリ要件に対して照会されます(「位置と UV セット foo が必要」(I need positions and UV set foo)など)。
  3. Maya は、各シェイプ上のすべてのジオメトリ要件のスーパーセットを(それを使用するすべてのレンダー アイテムに基づいて)作成します。
  4. シェイプは、すべてのジオメトリ バッファに、その現在の状態に基づいてデータを挿入します。
  5. シェーダは、レンダリングが必要なレンダー項目のリストを受け取り、各ジオメトリ項目に必要なジオメトリ バッファを引き出すことができます。

ただし、以前の Maya ビューポートと違い、ビューポート 2.0 ではできるだけ多くのデータおよび情報をキャッシュして再利用しようとします。したがって、シーンの状態が変更されない限り、キャッシュされた状態のレンダリングには最後のレンダー呼び出しのみが使用されます。

MGeometry は、Maya の任意のレンダリング可能なジオメトリック エンティティの頂点とインデックス データを表します。これらは最も一般的なシェイプ(メッシュ、NURBS サーフェス、サブディビジョン サーフェス)ですが、その他のビューポート内要素(グリッド、マニピュレータ、ツール フィードバックなどを含む)を表現するのにも使用することができます。

DAG オブジェクトの場合、MGeometry の各インスタンスは、単一オブジェクトのすべてのインスタンスのレンダリング可能データをすべて保持します。これは、シェイプのコントロール ポイントを記述する頂点とインデックス バッファのデータをすべて含んでいます。

MGeometry はビューポート 2.0 API 内のいくつかの場所で使用されます。単に既存のジオメトリデータへの読み取り専用アクセスを提供する場合、あるいはユーザが特定のオブジェクトを描画するために必要な頂点およびインデックス データで MGeometry オブジェクトを埋める必要がある場合があります。

MVertexBuffer は、グラフィックス カード頂点バッファの周囲の小さなラッパーです。頂点バッファにはそれぞれ名前、セマンティック(位置、法線、UV など)、型(float3 など)があり、このデータは、MVertexBufferDescriptor クラスのインスタンスによってカプセル化されます。ハードウェア メモリおよびシェーダ補間の制限以外に、MGeometry オブジェクトに追加できる頂点バッファの数に対する Maya の制限はありません(たとえば、オブジェクトは複数の位置ストリーム、複数の法線ストリームなどを持つことができます)。

MIndexBufferMVertexBufferと同等のインデックスです。MGeometry オブジェクトは、MGeometry オブジェクトがいくつのレンダリング可能オブジェクト(レンダー項目。以下を参照)を表すかに応じて、0、1、または複数のインデックス バッファを含むことができます。

MGeometryRequirements は、特定のオブジェクトに関連付けられたすべてのレンダー項目を描画するのに必要なジオメトリ ストリームとインデックス バッファについて記述します このクラスは MPxGeometryOverride の実装に渡され、どのジオメトリを作成する必要があるかを示します。

このオブジェクトに格納された頂点バッファのリストは、オブジェクト上に格納されたすべてのレンダー項目から要件の論理和をとることにより作成されます。 レンダー項目を個別に調べて、その項目の要件を判断することができます。ただし、すべてのデータは可能な限り共有されます。

MRenderItem はレンダリング可能なプリミティブ、すなわち実際にグラフィックス カード上でレンダリングされるものを記述します。各 MRenderItem には、以下が含まれます。

レンダー項目は意図的に軽量化されたオブジェクトで、基本となる同一ジオメトリの複数のレンダー上で重い頂点/インデックスデータを簡単かつ効率的に共有できるようになっている(たとえば同じ位置データを再利用して、シェーディング モード上でワイヤフレームを描画する場合など)

いくつかのレンダー パス(シャドウ パス、深度パスなど)は、表示モード/オプションを使用してどのレンダー項目を表示するかを選択しますが、他のサーフェス プロパティをレンダリングするためにマテリアルをオーバーライドします。

レンダー項目に関連付られたシェーダは、オブジェクトを描画するために満たす必要のあるジオメトリ要件を駆動するものです。 これらの要件は MRenderItem から検索することができ、シェーダが割り当てられていれば、空ではなくなります。シェーダは MShaderManager を通じて取得できます。

レンダー項目の有効と無効を切り替えることによって、レンダー項目を削除して後で再作成しなくても描画できるようにするか、そのようにしないと描画できないようにするかを設定することができます。

レンダー項目は 2 つの場所で作成されます。 まず、Maya は、各オブジェクトの各インスタンスへの各シェーダ アサインメントに対して、1 つのレンダー項目を自動的に作成します。 これらのレンダー項目は無効にすることができますが、除去はされず、Maya のシェーディング割り当てによって記述されるシェーダに自動的に関連付けられます。 次に、ユーザはカスタム設定のためにインスタンスごとにレンダー項目を追加することができます。

このクラスは、既存の頂点バッファ、または作成が必要な頂点バッファのプロパティを記述する(つまり、ジオメトリ要件を指定する ために使用されます)。

MVertexBufferDescriptor オブジェクトの単純なリストです。

MRenderItem オブジェクトの単純なリストです。各オブジェクトは、リストによって所有されます。