カスタム GLSL シェーダを作成する: テッセレーションの例

カスタム GLSL シェーダを作成するには、.ogsfx ファイルとして保存します。テッセレーションをサポートする GLSL シェーダの作成方法の例については、Maya インストールの ..¥presets¥GLSL¥examples フォルダにある TessellationExample.ogsfx エフェクトを参照してください。この例では、グラフィック パイプラインでのテッセレーション コントロール シェーダ、テッセレーション評価シェーダ、ジオメトリ シェーダの作成方法が示されています。

このシェーダでは、2 つのテクニックが定義されています。シェーディング ビューを表示するメイン テクニックと、テッセレーションを示すワイヤフレームを表示するワイヤフレーム テクニックです。テッセレーションの内部レベルと外部レベルを設定するには、内部レベル/100*100 pix (Inner levels/100*100 pix)設定(100 x 100 ピクセル領域内の内部レベル数)と外部レベル/30 pix (Outer levels/30 pix)設定(30 ピクセル セグメントごとのレベル数)を調整してその効果をビューポート 2.0 (Viewport 2.0)で確認します。

グラフィック パイプラインの段階

ワイヤフレーム テクニック定義には、5 つのグラフィック パイプラインの段階が次の順番で含まれています。

テッセレーション シェーダ

コントロール ポイント(cp)を操作して出力パッチを生成し、テッセレーション レベルを計算するテッセレーション コントロール シェーダを作成する方法の例については、.ogsfx ファイルの GLSLShader ShaderTessControl セクションを参照してください。

プリミティブ ジェネレータによって生成される対応するドメインの頂点を計算する方法の例については、.ogsfx ファイルの GLSLShader ShaderTessEval セクションを参照してください。

Maya でテッセレーションを実行するときに、テッセレーション コントロール シェーダおよびテッセレーション評価シェーダは PNAEN18 フォーマットでの入力を必要とします。PNAEN18 (隣接エッジ法線を使用するポイント法線三角形)は、三角形の頂点インデックス、三角形の隣接およびドミナント エッジの頂点インデックスなどのデータを使用して各三角形の頂点を作成します。これは、インデックス配列の 18 のストライドを作成します。

PNAEN の詳細については、『Maya 開発者ヘルプ』の「ビューポート 2.0 API」セクションの「シェーダのジオメトリック データをカスタマイズする」を参照してください。

テクニック定義では、入力バッファ タイプを PNAEN18 に指定する必要があります。

string index_buffer_type = "GLSL_PNAEN18";

ジオメトリ シェーダ

ジオメトリ シェーダはワイヤフレームおよびテッセレーションをサポートするために必要です。テッセレーション シェーダによって作成される新しいプリミティブは、ピクセル シェーダによって後で描画される三角形にジオメトリ シェーダによって再グループ化されます。

テクニックでシェーダを定義するためのキーワード

次のキーワードを使用してシェーダを定義します。

各キーワードを使用して、たとえば次のように入力および出力パラメータを指定し、キーワードをシェーダの名前に設定します。

VertexShader (in APPDATA, out SHADERDATA VS_OUT) = VS;
TessControlShader (in SHADERDATA TCS_IN, out TCSDATA TCS_OUT) = ShaderTessControl;
TessEvaluationShader (in TCSDATA TES_IN, out SHADERDATA2 TES_OUT) = ShaderTessEval;
GeometryShader ( in SHADERDATA2 GEO_IN , out SHADERDATA2 GEO_OUT ) = GS_Wireframe;
PixelShader (in SHADERDATA2 PS_IN, out pixelOut) = PS_Wireframe;

入力および出力パラメータは、.ogsfx ファイルで定義した任意のデータ タイプにすることができます。