对于任何笔刷节点,以下选项将在“Paint Effects 笔刷设置”(Paint Effects Brush Settings)窗口和属性编辑器中显示为“管”(Tubes)部分的子集。
可以编写 MEL 脚本,这些脚本会在笔刷的生长模拟过程中应用效果。有两种类型的脚本:创建脚本和运行时脚本。
通常,您需要修改 Maya 脚本目录中提供的样例脚本,如下所示:
- 从 Maya 脚本目录复制所需函数的 MEL 文件:
(Windows 和 Linux)mayapath/scripts/paintEffects
(Mac OS X) mayapath/Maya/Contents/scripts/paintEffects
- 将文件粘贴到本地脚本目录中,然后重命名它。
- 修改该函数。更改函数名称以与文件名前缀(例如 leafDroop)匹配。请勿修改函数的声明(其输入参数列表)。
-
创建脚本(Creation Script)
-
创建脚本将覆盖普通的管创建例程,从而覆盖许多控件。在 Maya 脚本目录中提供了以下样例创建脚本:
-
paintCreateFunc.mel – 模拟普通的管创建。
-
运行时脚本(Runtime Script)
-
每次将新分段添加到管时,都会调用运行时脚本。通常,需要做的大多数事项会使用运行时脚本。Maya 脚本目录中提供了以下样例运行时脚本:
-
paintRuntimeFunc.mel – 在管的底部创建两片叶,并应用随机摆动。
-
paintCollideFunc.mel – 使管与一个两单位球体碰撞,该球体位于 0, 1, 0。可以使用该函数来创建一个新函数,后者将球体的位置绑定到场景中的某个对象。
-
leafDroop.mel – 使所有叶向下垂落。可以使树上的重力为负值,这样树会始终向上生长,但使叶向下生长(如果不生成次分支,该函数就是可用作新函数的模板的最简单函数)。
-
widthNoise.mel - 使宽度沿着管以随机的方式变化。它仅影响基础管和细枝,而不影响叶或花。
注: 创建脚本不能用作运行时脚本,反之亦然。
使用运行时函数时,复杂对象的线框重画速度可能较慢,因为会为每个管分段调用该函数。
运行时回调
可以使用笔划或笔刷的名称,以基于该名称定制运行时过程。
使用回调函数的自定义“Paint Effects”笔刷必须在所有回调过程定义的结尾有两个参数:笔刷名称和笔划名称。通过这些参数可以知道笔刷的名称以及触发回调的笔划的名称。
这些回调参数显示在示例脚本中(例如 <maya_home>/scripts/paintEffects/leafDroop.mel)。
为了练习运行时回调,可以执行下列操作:
- 将 <maya_home>/scripts/paintEffects/leafDroop.mel 复制到 <maya_home>/scripts/startup。
- 在 leafDroop.mel 中回调内部的某个位置添加 print ("brushName="+$brushName+"\n") ; 语句。
- 在 Maya“建模”(Modeling)菜单集中,选择,然后选择。
- 在“Paint Effects 笔刷设置”(Paint Effects Brush Settings)窗口中,单击“管”(Tubes)。
- 选中“管”(Tubes)复选框。
- 单击“用户 MEL 脚本”(User MEL scripts)。
- 在“运行时脚本”(Runtime Script)文本区域中,键入 leafDroop。
- 在 Maya 场景视图中,绘制一些“Paint Effects”笔划,然后应该看到已调用 leafDroop 过程。