ハードウェア シェーディング ノード プラグインの概要
 
 
 

ハードウェア シェーディング ノード プラグインは、Maya ディペンデンシー グラフ(DG)ノードとして作成されます。基本的なハードウェア シェーディング ノードには、入力および出力として扱われるアトリビュートが含まれており、それぞれのシェーディング ノードには、ディペンデンシー グラフにコネクトできるように、出力がなければなりません。また、ハードウェア シェーディング ノード プラグインは、リソースの作成、削除、および描画を行う際に呼び出す仮想メソッドを実装します。これらの仮想メソッドが呼び出されるのは、ジオメトリにアタッチされているハードウェア シェーディング ノード プラグインが存在することが Maya によって検出され、ハードウェア シェーディング(Hardware Shading)が必要な場合です。ハードウェア シェーディング ノード プラグインを使用して、標準的な OpenGL レンダリング、ベンダの拡張機能、ピクセル/頂点シェーダ、およびマルチ パス シェーディングを実行すると、Maya の表示を細かく制御できます。

ハードウェア シェーディング プラグインは、高精度インタラクティブ(High Quality Interactive)シェーディング モード、ハードウェア レンダラ、および UV テクスチャ エディタ(UV Texture Editor)を備えた Maya シーン ビューでサポートされています。Maya のこれらの領域でサポートされるジオメトリのタイプは、次のとおりです。

ハードウェア シェーディング ノード プラグインを作成するには、MPxHwShaderNode から派生させて、必要な仮想メソッドを実行します。MPxHwShaderNode クラスには数多くの仮想メソッドが存在します。最も重要な仮想メソッドは、バインド、描画、およびバインド解除を実行するメソッドです。これらのメソッドはリソースの配分、描画、リソースの配分解除を実行するためのキーになります。これらのメソッドには、2 つのバージョンがあります。

オリジナルのインタフェースは、次のとおりです。

virtual MStatus bind( const MDrawRequest& request,M3dView& view );
virtual MStatus unbind( const MDrawRequest& request, M3dView& view );
virtual MStatus geometry( const MDrawRequest& request, M3dView& view, int prim, unsigned int writable, int indexCount, const unsigned int * indexArray, int vertexCount, const int * vertexIDs, const float * vertexArray, int normalCount,
 const float ** normalArrays, int colorCount, const float ** colorArrays, int texCoordCount, const float ** texCoordArrays);

2 つ目のインタフェースまたは gl メソッドは、次のとおりです。

virtual MStatus glBind( const MDagPath& shapePath );
virtual MStatus glUnbind( const MDagPath& shapePath );
virtual MStatus glGeometry( const MDagPath& shapePath, int glPrim, unsigned int writeMask, int indexCount, const unsigned int* indexArray, int vertexCount, const int * vertexIDs, const float * vertexArray, int normalCount, const float ** normalArrays, int colorCount, const float ** colorArrays, int texCoordCount, const float ** texCoordArrays);

これらのインタフェースのパラメータはよく似ています。パラメータ リストの大きな相違点は、オリジナルのインタフェースの MDrawRequest オブジェクトと M3dView オブジェクトが、2 つ目のインタフェースでは、MDagPath オブジェクトに置き換えられているところです。描画情報(MDrawRequest オブジェクト)でハードウェア シェーディング ノード プラグインが必要ない場合には、より多くの機能がサポートされている gl インタフェースを使用することをお勧めします。

注:デフォルトでは、bind()geometry()、および unbind() メソッドは、同等の gl インタフェースを呼び出します。