Jim's GameDev Blog

Maya 使用 Mel 批量修改模型属性

2018-10-1

目前的需求是需要将特定的几根骨骼叠加一个旋转角度以及偏移量,以符合制作上的需要。我最先想到的是使用 Animation Layer,这是 3DMax 中的概念,以前略有接触过,而现在使用的是 Maya,于是搜索了一下似乎也有类似的概念,由于需要改的量很大,且作为程序员又想尝试下 Maya 的脚本,所以这里就使用 Mel(Maya 中有两种脚本语言 Mel 和 Python,任选其一就可以了)。

写这种脚本比较痛苦的地方是查找文档,这么多函数要找到满足要求的可不容易,所以我的方法是先 Google 类似的解决方案,然后再在同一类的函数里找。经过定位后我们要用到的函数都在 General 这一类中。

下面就是拼拼凑凑后得到的满足需求的主要代码,其实逻辑很简单,再加上窗体和按钮并使用 UI 将参数可调整就是一个简单的 Maya 插件了。

for($i = 0; $i < 40; $i++)
{
    currentTime $i;
    select Bone01_bip01;
    $objs = `ls -selection`;
    float $objT[] = `xform -q -t $objs[0]`;
    float $objR[] = `xform -q -ro $objs[0]`;
    float $ty = $objT[1] * -1.0;
    float $rz = $objR[2] + 180.0;
    xform -t $objT[0] $ty $objT[2] $objs[0];
    xform -ro $objR[0] $objR[1] $rz $objs[0];
}