CgFX シェーダ(CgFX Shader)
 
 
 

CgFX シェーダを作成するには、まず CgFX プラグインをロードする必要があります。詳細については、 CgFX シェーダを操作するを参照してください。

CgFX シェーダを作成する

Maya は Cg バージョン 1.5 をサポートしています。

Maya ソフトウェアには CgFX のサンプルが付属しています。これらのサンプルは次の場所にあります。

可変パラメータのパック

複数のメッシュ入力を単一の可変パラメータ レジスタにパックすることができます。たとえば、2 つのセットの UV 座標を 1 つの float4 レジスタにパックすることができます。

以下にサンプル ワークフローを示します。

  1. 次の頂点シェーダ入力構造体は、1 つの可変パラメータに 2 つの UV セットを含んでいる必要がある、パックされた float4 を示します。
    struct appdata {     float3    Position: POSITION;     float4    UVs: TEXCOORD0; };
  2. この入力にパックするエレメントを記述した 2 番目の構造体を作成します。Maya がこの 2 番目の構造体を見つけることができるようにするには、その名前がオリジナルの可変パラメータの名前(この場合、UVs)と一致している必要があります。

    この例で、この補助構造体は、UV1UV2 という名前の 2 つの float2 入力からオリジナルの float4 パラメータをすぐに集める必要があることを Maya に通知します。シェーダ自体はこの構造体を使用しません。この構造体は、この入力のデータを集める方法を Maya に知らせるだけです。

    struct UVs {     float2 UV1;     float2 UV2; };
  3. Maya はこれがパックされた入力であることを知っているので、アーティストには、最終的なパックされた構造体(UVs)ではなく、基礎データ(UV1UV2)へのインタフェースが提示されます。ここで、シーン内の既存のシェーダの結合を解除することなく、シェーダを使用して可変パラメータのレジスタ割り当てを最適化および認識することができます。

    詳細については、例として UVPacking.cgfx を参照してください。

    注:構造体エレメントに割り当てられたデータが指定された Cg データ型には大きすぎる場合(たとえば、(x, y, z) 座標を持つ位置が float2 値に渡される場合)、最初の n 個の値を使用して値が埋められ、後続のエレメントは無視されます(たとえば、x と y が渡され、z は無視されます)。

その他の CgFX シェーダ機能

時間セマンティック

Maya は、時間によって変化するパラメータをサポートしています。時間とともに移動するシェーダの例は、MrWiggle.cgfx を参照してください。

行列セマンティック

CgFX シェーダで行列を指定することができます。Maya は、行列セマンティックのすべてのキーワードをサポートしています。

透明な CgFX シェーダ

Maya は、透明な CgFX シェーダのレンダリングをサポートしています。Maya は、最初のパスでブレンディング状態が有効になっているかどうかを検出します。ブレンディングが有効な場合、Maya はビューポートでオブジェクト透明度ソート(Object Transparency Sorting)またはポリゴン透明度ソート(Polygon Transparency Sorting)オプションを使用 して透明なシェーダを正しくレンダーします。

Maya シェーダ ファイル

Maya では、開発者が独自の CgFX シェーダに組み込むことができるシェーダ ファイルが、次のディレクトリに提供されています。

Maya_*.cgh コード サンプルを選択します。たとえば、maya_blends.cgh はレイヤ テクスチャのブレンディングに使用されるコードです。

既知の制限事項

CgFX シェーダ既知の制限事項には以下のものが含まれます。