前言

  其实这部分的内容,很早之前我就通过看 DT 的教程掌握了,毕竟操作很基础,之前甚至都没有想到要写文章进行总结说明。
  最近美术制作人员又出现了自定义触发命令的需求问题,于是就有了写这篇文章的动力。
  这个技巧对于美术制作人员来说非常有用,懂了这个,就可以将 Maya 大部分的功能提取出来,按照自己的喜好进行触发。

类似的教程可以参考我很早之前上传的教程 【Maya成神】maya100招+【中文字幕】10种可以提升你们Maya制作效率的方法
还有 DT 的 Maya 入门教程有提到命令提取的操作

获取操作命令

  Maya 的代码编辑器上有一个非常优秀的设计,对于学习 Maya 编程来说可谓极度有用的功能,那就是代码编辑器的命令回显。
  通过命令回显,如果是搞程序的可以进一步深挖 Mel 命令源码,分析 Maya 命令背后的操作,如果不懂程序的美术制作人员也可以直接复制命令进行使用。
  大部分回显是 mel 命令的,只有极个别的情况返回的是 python 代码,因此美术人员基本可以默认所有的回显代码都是 mel 操作。

  默认打开的 Maya 右下角可以打开代码编辑器。
  关于代码编辑器各个按钮的含义,可以参照官方中文文档

alt

  在 Maya 里面进行的大部分操作,比如上图的新建一个球体,都是可以看到 代码编辑器 返回执行的 Mel 命令代码。
  你可以复制上面的 mel 命令到代码编辑器下面执行,从而生成一个球。

alt

  你可以复制上面的 mel 命令到代码编辑器下面执行,从而生成一个球。

生成工具架

  完成上面一步,恭喜你,你已经完成了最基本的功能提取了。
  要实现将代码放到 Maya 工具架其实非常简单,只需要选中代码,然后用鼠标中间拖拽代码到工具架上。

alt

  这样就可以生成一个 Maya Mel 命令的图标,点击图标就可以生成一个球。

添加快捷键

alt

  快捷键操作可以通过上面的菜单,打开热键编辑器。
  然后新建一个命令,选择 Mel 命令,然后将 Mel 命令拷贝进去。
  可以生成一个 runTimeCommand , 这样就可以搜索 runTimeCommand 找到刚才输入名称的命令来输入自定义的快捷键了。

  后续就和正常添加快捷键的操作一样。

制作标记菜单快速调用

  请参考教程 10种可以提升你们Maya制作效率的方法 第8集

获取技巧补充

  有时候有些操作没有命令回显。
  这个时候可以通过 撤销 命令获取到隐藏的 mel 代码。


  当然撤销的方法也并不是百试百灵的,因此终极的解决方式开启 Echo All Commands 的功能。

alt

  这个功能开启之后可以显示所有 Maya 调用的命令,基本任何的底层 mel 命令操作都显示出来了。
  缺点就是大量的命令显示会将有用的信息淹没,这个需要将信息拿出来然后进行过滤处理。

如何获取操作命令源码

  这个部分和编程开发相关,如果是美术制作人员可以跳过

  通过命令回显可以获取到 Maya 内部执行的命令名称。
  Maya 虽然是 闭源 的,我们看不到底层的 Qt 框架的 C++ 代码。
  但是 Maya 自身开发的 Mel 语言代码层几乎可算是开源了。
  具体的代码可以 Maya 安装目录的 scripts 文件夹下找到。 文档说明
  基本上大部分的 UI 界面,以及 UI 别后的按钮操作都是用 Mel 命令写的, Mel 界面的底层其实调用的还是 Qt 框架。
  只是为了兼容老版本的 Maya 的一些 Mel 代码界面,整个 Maya 底层有魔改过。(Maya 的上古版本貌似还不是使用 Qt)

  虽然只是 mel 命令开源,并没有开放 C++ 底层。
  但是我觉得 Maya 的开放程度是相当之高的,基本上

whatIs 命令详解

  whatIs 命令只可以在 Mel 中使用,如果要在 Python 使用 whatIs 命令,可以加载官方提供的 Python API 编写的脚本。
  文档里面是没有 whatIs 的 cmds 命令的,还有一种在 Python 运行的方法就是使用 mel.eval 的方式来运行。
  通过 whatIs 这个内置的 Mel 命令查询回显命令的类型。 whatIs 文档
  文档里面的案例其实有命令显示的几种类型,我再补充了两种。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
whatIs "sphere";
// Result: Command //

whatIs "initToolBox";
// Result: Mel procedure found in: /u/mayauser/maya/scripts/initToolBox.mel //

whatIs "kaosFieldTest";
// Result: Script found in: /u/mayauser/maya/scripts/kaosFieldTest.mel //

whatIs "fdsafda";
// Result: Unknown //

int $abc[42];
whatIs "$abc";
// Result: int[] variable //

$s=`pwd`;
whatIs "$s";
// Result: string variable //

global proc MelProce(){};
whatIs MelProce;
// Result: Mel procedure entered interactively. //

whatIs CenterPivot;
// Result: Run Time Command //
runTimeCommand -q -c CenterPivot
// Result: xform -cpc //

  返回 Command 类型表示是 Mel 命令,绝大多数的 Command 都可以查 Mel 命令文档可以得到详细的说明。
  但是有些插件引入的 Mel 命令就需要通过名称查出它是什么插件引入的 Mel 命令,具体也可以在插件编辑器上查看插件引入了什么样的 Mel 命令和 节点。

  Mel procedure found in: /u/mayauser/maya/scripts/initToolBox.mel
  返回 Mel procedure 会返回 mel 代码文件的路径,可以通过路径找到 mel 源码。
  如果是动态的 mel 就看不到源码了。

  返回 Run Time Command 类型可以通过 mel 命令 runTimeCommand 来获取嵌入的代码。

总结

  Maya 是相当开放的软件了,当我使用 Unreal Houdini 等等软件的时候,没有命令的回显,让我去做一些功能的自动化处理就非常麻烦。
  而且 Maya 相对简单,对 美术制作人员 的交互体验非常友好。