我有一个动画,从1到50键可以。在第50个键之后我希望键旋转180度
我可以使用以下命令在1个选定键中旋转1个控制器
//mel
rotate -y 50 -ws -p 5 6 7;
但非常耗时,我该如何为所有选定的控制器和按键执行此操作?
所以它有一个直接的方法来执行键上的mel命令。以及如何继续做这样的事情?
答案 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帧之后旋转该组。
如果这不是一个选项,则有一种将累积分层动画的结果放在单个节点上的常用技术。它使用约束节点。您不需要进行任何编程,但如果您愿意,可以编写步骤脚本。
定位器现在随节点移动和旋转。如果您的节点位于某个层次结构中,则键值可能不同,但运动应该重合。现在,您可以使用相同的过程修改运动并将其传回:
现在您的节点随着修改后的定位器运动而移动。在此阶段,您可以进一步修改定位器动画,调整,添加更多组变换等。您的节点将更新。
最后,选择您的节点并选择Keys-> BakeSimulation,并使用与上面相同的选项,并删除定位器组。