データ クラス

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

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

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

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

MGeometry

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

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

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

MVertexBuffer

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

MIndexBuffer

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

MGeometryRequirements

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

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

MRenderItem

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

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

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

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

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

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

MVertexBufferDescriptor

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

MVertexBufferDescriptorList

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

MRenderItemList

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