是否可以在其自己的关键帧范围内单独导出给定对象的关键帧?
示例,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))
答案 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