Maya は Cg バージョン 3.0.015 をサポートしています。
Maya には CgFX のサンプルが付属しています。これらのサンプルは次の場所にあります。
複数のメッシュ入力を単一の可変パラメータ レジスタにパックすることができます。たとえば、2 つのセットの UV 座標を 1 つの float4 レジスタにパックすることができます。
以下にサンプル ワークフローを示します。
struct appdata { float3 Position: POSITION; float4 UVs: TEXCOORD0; };
この例で、この補助構造体は、UV1 と UV2 という名前の 2 つの float2 入力からオリジナルの float4 パラメータをすぐに集める必要があることを Maya に通知します。シェーダ自体はこの構造体を使用しません。この構造体は、この入力のデータを集める方法を Maya に知らせるだけです。
struct UVs { float2 UV1; float2 UV2; };
詳細については、例として UVPacking.cgfx を参照してください。
構造体要素に割り当てられたデータが指定された Cg データ型には大きすぎる場合(たとえば、(x, y, z)座標を持つ位置が float2 値に渡される場合)、最初の n 個の値を使用して値が埋められ、後続の要素は無視されます(たとえば、x と y が渡され、z は無視されます)。
Maya は、時間によって変化するパラメータをサポートしています。時間とともに移動するシェーダの例は、MrWiggle.cgfx を参照してください。
CgFX シェーダ(CgFX shader)で行列を指定することができます。Maya は、行列セマンティックのすべてのキーワードをサポートしています。
Maya は、透明な CgFX シェーダのレンダリングをサポートしています。Maya は、最初のパスでブレンディング状態が有効になっているかどうかを検出します。ブレンディングが有効な場合、Maya はシーン ビューでオブジェクト透明度ソート(Object Transparency Sorting)またはポリゴン透明度ソート(Polygon Transparency Sorting)オプションを使用して透明なシェーダを正しくレンダーします。
Maya では、開発者が独自の CgFX シェーダに組み込むことができるシェーダ ファイルが、次のディレクトリに提供されています。
<install_dir> は Maya をインストールしたフォルダです。
Maya_*.cgh コード サンプルを選択します。たとえば、maya_blends.cgh はレイヤ テクスチャのブレンディングに使用されるコードです。
MAYA_CGFX マクロを使用すると、CgFX シェーダをカスタマイズし、同じ CgFX シェーダを使用する可能性のあるほかのアプリケーションとの互換性を失くことなく、Maya 固有のアトリビュートの注釈を含めることができます。
たとえば、以下のコードを使用すると、互換性を失うことなく、Maya と別のアプリケーションの両方でディレクショナル ライト アトリビュートを宣言できます。
#if defined(MAYA_CGFX) || defined(XSI) // Declares the « dirlight0 » with attribute annotations for Maya or XSI float4 dirlight0 : Direction < string UIName = "Distant Light 0 Direction"; string Object = "DirectionalLight"; string Space = "World"; > = {-1.0f, -1.0f, 0.3f, 0.0f}; #else // Declares the « dirlight0 » with attribute annotations for another application: .... #endif
#if defined (MAYA_CGFX) || defined (XSI) と #else の間の行は、Maya/XSI によってロードした場合のみ解析されます。