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

この章では、ハードウェア シェーディング ノードの作成方法について詳細を説明します。これは、Maya のシーン ビューのレンダリング時に使用します。Maya ソフトウェア レンダラで使用するシェーダについては、ソフトウェア シェーディング ノードを作成するを参照してください。

ハードウェア シェーディング ノード プラグインは、Maya ディペンデンシー グラフ(DG)ノードとして作成されます。基本的なハードウェア シェーディング ノードには、入力出力として扱われるアトリビュートが含まれており、それぞれのシェーディング ノードには、ディペンデンシー グラフにコネクトできるように、出力がなければなりません。また、ハードウェア シェーディング ノード プラグインは、リソースの作成、削除、描画を行うためにコールする仮想メソッドを実装します。これらの仮想メソッドがコールされるのは、ジオメトリにアタッチされているハードウェア シェーディング ノード プラグインが存在することが検出され、ハードウェア シェーディング(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 インタフェースをコールします。