如何在枢轴[5,6,7]的世界y轴上将所有选定键中的控制器旋转90度?

时间:2016-02-26 08:05:47

标签: maya mel

我有一个动画,从1到50键可以。在第50个键之后我希望键旋转180度

我可以使用以下命令在1个选定键中旋转1个控制器

//mel
rotate -y 50 -ws -p 5 6 7;

但非常耗时,我该如何为所有选定的控制器和按键执行此操作?

所以它有一个直接的方法来执行键上的mel命令。以及如何继续做这样的事情?

2 个答案:

答案 0 :(得分:0)

我在python中这样做,因为在Python中解决它比使用mel更容易。这是非常简单的骨头,但它应该是一个很好的起点:

import maya.cmds as cmds        # cmds is the python version of mel's api
obj = 'rig:rig:Root'            # your obj..  in real code you'd make a 
                                # function and ask for an object name
attributes = 'rx', 'ry', 'rz'   # need to ask where the keys for on each channel
rotation_keys = set()  # this avoids duplications of key times

# collect a list of all the frames which have any rotation key
for attrib in attributes:      
    for key in cmds.keyframe(obj, attribute = 'rx',  q=True, tc=True):
        rotation_keys.add(key)

# sort them by time, you now have a list of every rotate key time        
keyframe_list = sorted(rotation_keys)

for key in keyframe_list:
    if key > 50:
        # scrub to the right time
        cmds.currentTime(key)

        # apply the rotation relatively
        cmds.xform(obj, rotation = [0,180,0], ws =True, relative = True)

        # get the channel values and make sure they are all keyed
        for attrib in attributes:
            new_value = cmds.getAttr(obj + "." + attrib)
            cmds.setKeyframe(obj, attribute = attrib, time = key, value = new_value)

答案 1 :(得分:0)

简单的解决方案是对动画节点进行分组,并设置一个键以在第50帧之后旋转该组。

如果这不是一个选项,则有一种将累积分层动画的结果放在单个节点上的常用技术。它使用约束节点。您不需要进行任何编程,但如果您愿意,可以编写步骤脚本。

  1. 在原点创建定位器。
  2. 选择您的节点并轮班选择定位器。
  3. 选择Constrain-> Orient
  4. 选择Constrain-> Point(不是必需的,但在视觉上有帮助)
  5. 仅选择定位器。
  6. 选择Edit-> Keys-> BakeSimulation [](来自频道框的密钥,示例 1,禁用隐式控制)
  7. Hilight翻译并旋转频道框中的频道并点击 烘烤按钮。
  8. 定位器现在随节点移动和旋转。如果您的节点位于某个层次结构中,则键值可能不同,但运动应该重合。现在,您可以使用相同的过程修改运动并将其传回:

    1. 对定位器进行分组,设置组枢轴并为该组设置动画 直到定位器有所需的动作。
    2. 删除节点上的密钥。
    3. 选择定位器并切换选择您的节点。
    4. 选择Constrain-> Orient,然后选择Constrain-> Point。
    5. 现在您的节点随着修改后的定位器运动而移动。在此阶段,您可以进一步修改定位器动画,调整,添加更多组变换等。您的节点将更新。

      最后,选择您的节点并选择Keys-> BakeSimulation,并使用与上面相同的选项,并删除定位器组。