导出对象范围内的关键帧

时间:2014-10-09 06:18:58

标签: python animation export maya

是否可以在其自己的关键帧范围内单独导出给定对象的关键帧?

示例,camA在第1帧到第10帧的范围内是关键帧。但是当我尝试以其他格式导出此相机时,它会考虑整个时间滑块。因此exported_camA在第1帧到第24帧的范围内是关键帧(24是我的时间滑块的最大范围)

这可能吗?我尝试使用cmds.playbackOptions,但显然它也是根据时间滑块范围

导出的
def __init__(self, transform, startAnimation, endAnimation, cameraObj):

    self.fileExport = []
    print ">>> Exported : %s" %self.fileExport

    mayaGlobal = OpenMaya.MGlobal()
    mayaGlobal.viewFrame(OpenMaya.MTime(1))

    for i in range(startAnimation, endAnimation):

        focalLength = cameraObj.focalLength()

        vFilmApp = cameraObj.verticalFilmAperture()

        focalOut = 2* math.degrees(math.atan(vFilmApp * 25.4/ (2* focalLength)))

        myEuler = OpenMaya.MEulerRotation()
        spc = OpenMaya.MSpace.kWorld

        trans = transform.getTranslation(spc)

        rotation = transform.getRotation(myEuler)
        rotVector = OpenMaya.MVector(myEuler.asVector())

        self.fileExport.append((str(i) + '\t' + str(trans[0]) + "\t" + str(trans[1]) + "\t" + str(trans[2]) + "\t" + str(math.degrees(rotVector[0])) + "\t" + str(math.degrees(rotVector[1])) + "\t" + str(math.degrees(rotVector[2])) + "\t" + str(focalOut) + "\n"))

        mayaGlobal.viewFrame(OpenMaya.MTime(i+1))

2 个答案:

答案 0 :(得分:1)

cmds中,您可以获得给定动画的最大和最小时间,如下所示:

key_times = cmds.keyframe('pCube1', attribute = 'translate',  q=True, tc=True)
first_key = key_times[0]
 last_key = key_times[-1]

请注意,这必须应用于特定属性(在本例中,我使用'translate'),否则您将从Maya在对象上找到的第一个动画曲线中获取键。

也就是说,通常认为最好导出场景关键帧范围或明确设置的帧范围。否则你可能有人在场景中工作并擦洗时间,然后导出并看到更少的帧。

答案 1 :(得分:0)

我还发现了这个命令 - cmds.findKeyframe,以便捕获所选对象动画的关键帧,并且它也有助于我的代码

虽然我不确定这是否会在以后产生任何不利影响,但看到我还没有遇到一个:x

例如:

minTime = cmds.findKeyframe(which='first') # First keyframe
maxTime = cmds.findKeyframe(which='last')  # Last keyframe