在创建之前,必须首先加载 CgFX 插件。有关详细信息,请参见使用 CgFX 着色器。
编写
Maya 支持 Cg 版本 3.0.015。
CgFX 示例随 Maya 软件一起提供。您可以在以下位置找到这些示例:
- (Windows) <驱动器>:\Program Files\Autodesk\Maya2013\presets\CgFX\examples
- (Mac OS X) /Applications/Autodesk/Maya2013/Maya/Contents/presets
- (Linux) /usr/autodesk/maya2013/presets/CgFX/examples
变化参数填充
可以将多个网格输入填充到单个变化参数注册中。例如,可以将两组 UV 坐标填充到单个 float4 注册中。
下列为示例工作流:
- 以下顶点着色器输入结构显示了需要在单个变化参数中包含两个 UV 集的填充 float4:
struct appdata { float3 Position: POSITION; float4 UVs: TEXCOORD0; };
- 创建第二个结构,描述应填充至该输入中的元素。若要启用 Maya 来查找第二个结构,其名称必须与原始变化参数的名称(在本例中为 UV)匹配。
在本示例中,该辅助结构通知 Maya 应实时地从两个 float2 输入汇编原始 float4 参数:一个名为 UV1,另一个名为 UV2。着色器本身未使用该结构 - 它仅告知 Maya 如何为该输入汇编数据。
struct UVs { float2 UV1; float2 UV2; };
- 由于 Maya 知道这是填充输入,它向美工人员提供了基本数据(UV1 和 UV2),而非最终填充结构 (UV) 的界面。现在可以优化及重新组织变化参数注册指定,而无需破坏场景中使用着色器的任何现有着色器绑定。
有关详细信息,请以 UVPacking.cgfx 为例。
注意
如果对于指定的 Cg 数据类型而言,指定给结构元素的数据太大(例如,(X, Y, Z)坐标的位置变成 float2 值),则前 n 个值将用于填充值,而将忽略任何后续元素(例如,X 和 Y 将获准进入,而 Z 将被忽略)。
其他功能
-
-
Maya 支持随时间变化的参数。有关随时间移动的着色器的示例,请参见 MrWiggle.cgfx。
-
-
可以在中指定矩阵。Maya 支持所有矩阵语义关键字。
- 透明 CgFX 着色器
-
Maya 支持渲染透明 CgFX 着色器。Maya 检测在第一个过程中是否启用了混合状态。如果启用了混合,Maya 在场景视图中使用或选项来正确渲染透明着色器。
- Maya 着色器文件
-
Maya 在以下目录中提供了开发人员可以合并到自己的 CgFX 着色器中的着色器文件:
- (Windows) <mayapath>\bin\cg
- (Linux) <mayapath>/bin/cg
- (Mac OS X) <mayapath>/Maya.app/Contents/bin/cg
选择 Maya_ *.cgh 代码示例;例如,Maya 用于混合分层纹理的代码 maya_blends.cgh:
- 纹理坐标系的方向
-
从 Maya 2012 开始,当 CgFx 插件编译 Cgfx 着色器时,它将编译宏 MAYA_TEXCOORD_ORIENTATION 设置为 OpenGL 或 DirectX 以指定用于纹理坐标系的方向。有关详细信息,请参见
纹理坐标系的方向。
- 自定义 CgFX 着色器
-
您可以使用 MAYA_CGFX 宏来自定义 CgFX 着色器,从而包括 Maya 特定属性注释,而不破坏与可能也使用相同 CgFX 着色器的其他应用程序的兼容性。有关详细信息,请参见
自定义 CgFX 着色器。
的包括:
- Maya 仅支持 .cgfx 文件而不支持 .cg
- 前期和后期效果(例如,全屏效果)
- 过程脚本编写
- Cg 界面
- 时间语义:在使用随时间移动的着色器时,必须刷新场景才能查看动画(例如,通过翻滚摄影机)。