Maya 支持 Cg 版本 3.0.015。
CgFX 示例随 Maya 一起提供。您可以在以下位置找到这些示例:
可以将多个网格输入填充到单个变化参数注册中。例如,可以将两组 UV 坐标填充到单个 float4 注册中。
下列为示例工作流:
struct appdata { float3 Position: POSITION; float4 UVs: TEXCOORD0; };
在本示例中,该辅助结构通知 Maya 应实时地从两个 float2 输入汇编原始 float4 参数:一个名为 UV1,另一个名为 UV2。着色器本身未使用该结构 - 它仅告知 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 用于融合分层纹理的代码 maya_blends.cgh:
您可以使用 MAYA_CGFX 宏来自定义 CgFX 着色器,从而包括 Maya 特定属性注释,而不破坏与可能也使用相同 CgFX 着色器的其他应用程序的兼容性。
例如,可以使用以下代码来声明 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 加载时才会解析。