API ガイド > ハードウェア シェーディング ノードを作成する >

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

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

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

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

- メッシュ シェイプはすべての領域でサポートされています。
- NURBSサーフェスは、gl インタフェース(次を参照)の使用時に高精度(High Quality)シェーディング表示とハードウェア レンダラを備えたシーン ビューのみでサポートされます。

ハードウェア シェーディング ノード プラグインを作成するには、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 インタフェースをコールします。