CgFX プラグインで CgFX シェーダをコンパイルした場合、コンパイル マクロ MAYA_TEXCOORD_ORIENTATION_OPENGL または MAYA_TEXCOORD_ORIENTATION_DIRECTX が 1 に設定され、テクスチャ座標系で使用する方向が指定されます。
環境変数 MAYA_TEXCOORD_ORIENTATION を OPENGL に設定すると MAYA_TEXCOORD_ORIENTATION_OPENGL マクロ、DIRECTX に設定すると MAYA_TEXCOORD_ORIENTATION_DIRECTX マクロが定義されます。定義されたマクロは 1 に設定されます。
Maya 2011 以前の場合、いずれのマクロも定義されず、DirectX テクスチャの座標系を前提とします。
Maya 2012 以上のバージョンの場合、既定では、MAYA_TEXCOORD_ORIENTATION_OPENGL マクロは 1 に設定されます。これは、Maya を起動する前に環境変数 MAYA_TEXCOORD_ORIENTATION を DIRECTX に設定すると変更できます。
既定のレンダラまたはハードウェア レンダラを Maya の旧バージョン用に記述して OPENGL テクスチャ座標方向用に変更していないシェーダと一緒に使用する場合、環境変数 MAYA_TEXCOORD_ORIENTATION を DIRECTX に設定すると便利です。環境変数 MAYA_TEXCOORD_ORIENTATION を DIRECTX に設定すると、次のようになります。
これにより、UV 座標の生成とテクスチャ イメージのロードの両方が変更され、たとえば、シェーダが UV 座標を使用してテクスチャをサンプリングすると、レンダーされたイメージは両方の座標系で同じになります。ただし、シェーダによってプロシージャルに生成した UV (Maya が生成する UV ソース ストリームとは反対)を使用してテクスチャをサンプリングする場合、このプラグインで両方の規則を処理できる必要があります。$(MAYA_ROOT)/presets/CgFX/example にある brix.cgfx サンプルにこの例があります。
/******************** pixel shader *********************/ #ifdef MAYA_TEXCOORD_ORIENTATION_OPENGL float GBalanceCorr = 1.0f - GBalance; #else float GBalanceCorr = GBalance; #endif float v = ((float4)tex2D(stripeSampler,float2(IN.BrickUV.x,0.5))).x; float4 dColor1 = lerp(SurfColor1,SurfColor2,v); v = ((float4)tex2D(stripeSampler,float2(IN.BrickUV.x*2,GBalanceCorr))).x; dColor1 = lerp(GroutColor,dColor1,v); v = ((float4)tex2D(stripeSampler,float2(IN.BrickUV.x+0.25,0.5))).x; float4 dColor2 = lerp(SurfColor1,SurfColor2,v); v = ((float4)tex2D(stripeSampler,float2((IN.BrickUV.x+0.25)*2,GBalanceCorr))).x; dColor2 = lerp(GroutColor,dColor2,v); v = ((float4)tex2D(stripeSampler,float2(IN.BrickUV.y,0.5))).x; float4 brix = lerp(dColor1,dColor2,v); v = ((float4)tex2D(stripeSampler,float2(IN.BrickUV.y*2,GBalanceCorr))).x; brix = lerp(GroutColor,brix,v); return IN.DCol * brix; }