def bakeCamera(exp=False, *args, **kwargs): """Bakes the first camera found below an arbitrary selection in Maya. Uses the current frame slider values as its range, and bakes on every frame. Optional boolean flag 'exp' will open an export window for convenience.""" sel = pm.ls(sl=True) # Parse the selection to find the camera cam = __findCamera(sel) # Frame range range = (pm.playbackOptions(q=True, min=True), pm.playbackOptions(q=True, max=True)) # Duplicate the camera dup_cam = pm.duplicate(cam, name=(cam.name() + '_Baked'))[0] # Parent new camera to world. try: pm.parent(dup_cam, w=True) except RuntimeError: pass # Constrain new camera to old const = pm.parentConstraint(cam, dup_cam, mo=True) # Bake it pm.bakeResults(dup_cam, t=range) # Delete the constraint pm.delete(const) # Lazy export dialog if exp: pm.select(dup_cam) pm.mel.eval('ExportSelection;') return dup_cam
def bakeButtonPressed(self): #gets layers to bake down layerList = [self.affectingLayers[0], self.affectingLayers[len(self.affectingLayers)-1]] #bakes down the layer pm.bakeResults(t = (self.baseFirstFrame, self.baseLastFrame), rwl = layerList, ral = True) #deletes the pin layer pm.delete(self.affectingLayers[0])
def exportFBX(file_path): SetFbxParameter() # NOTE 更新重定向 mel.eval(""" optionMenuGrp -e -select 2 hikCharacterList; hikUpdateCurrentCharacterFromUI(); hikUpdateContextualUI(); optionMenuGrp -e -select 2 hikSourceList; hikUpdateCurrentSourceFromUI(); hikUpdateContextualUI(); """) base_name = os.path.splitext(os.path.basename(file_path))[0] export_path = os.path.join(retarget_dir, base_name + ".fbx").replace("\\", "/") print("export_path", export_path) timeStart = pm.playbackOptions(q=1, min=1) timeEnd = pm.playbackOptions(q=1, max=1) pm.bakeResults(pm.ls("root", dag=1, ni=1), simulation=1, t=(timeStart, timeEnd), sampleBy=1, disableImplicitControl=1, preserveOutsideKeys=1, minimizeRotation=1, at=['tx', 'ty', 'tz', 'rx', 'ry', 'rz', 'sx', 'sy', 'sz']) pm.select("root") pm.evalDeferred(lambda: mel.eval('FBXExport -f "' + export_path + '" -s'))
def springIt(method): if pickMethod: if pm.ls(sl=1, type='joint'): pickedBones = pm.ls(sl=1, type='joint') elif pm.ls(sl=1): pickedBones = pm.ls(sl=1) else: return False else: if pm.ls(sl=1) and len(pm.ls(sl=1))>1: boneLink=createBoneFromSelection() pickedBones=[boneLink[0][0]] else: return False ### Execution #pm.textField(progressControlID,e=True,tx="..Running..") playOp = pm.playbackOptions(q=True,loop=True) pm.playbackOptions(loop='once') pm.currentTime(getTimeRange()[0],e=True) mm.eval("paneLayout -e -m false $gMainPane") for bone in pickedBones: if method: makeDynamic(bone) #pm.play() else: mm.eval("paneLayout -e -m true $gMainPane") springApply(bone,pickedBones,springLoop=loopValue,springRotateRate=springValue,springTwist=twistValue) if not pickMethod: for o in boneLink: pm.bakeResults(o,at=['translate','rotate'],t=getTimeRange(),sm=True) pm.delete(pickedBones,hi=True) mm.eval("paneLayout -e -m true $gMainPane") pm.playbackOptions(loop=playOp)
def importAnimation(self, speak=0,lib=1): print 'Importing Animation' rigFile = os.path.join(CHARACTERS_PATH,self.name,'rigging',self.name + '.ma') pm.openFile(rigFile,f=1) if lib: importAnimPath = ANIM_LIB_PATH else: fbxPath = os.path.split(self.fbxFile)[0] importAnimPath = fbxPath + '/' + 'animations/' animFiles = [f for f in os.listdir(importAnimPath) if f.endswith('.fbx')] #self.logger.info('########### Importing animations from library ############') for anim in animFiles: pm.mel.eval('FBXImportFillTimeline -v 1;') cmd = 'FBXImport -f "' + importAnimPath + anim+ '" -caller \"FBXMayaTranslator\" -importFormat \"fbx;v=0\"' pm.mel.eval(cmd) #self.logger.info('Imported %s ', (importAnimPath + anim)) #pm.importFile(importAnimPath + anim, type='FBX',mergeNamespacesOnClash=0,rpr=anim.split('.')[0],options = 'v=0;',loadReferenceDepth = 'all') start = pm.playbackOptions(q=1,ast=1) end = pm.playbackOptions(q=1,aet=1) pm.bakeResults( 'shadowJoint',t=(start,end), simulation=True ) self.saveAnimation(anim.split('.')[0]) pm.openFile(rigFile,f=1) if speak: #self.logger.info('Creating speak anims ') for anim in speakAnims: pm.openFile(rigFile,f=1) animationFile = os.path.join(CHARACTERS_PATH,self.name,'animation',anim + '.ma') #self.logger.info('%s created',animationFile) pm.saveAs(animationFile,f=1)
def bakeLoc(): if pm.objExists('HelperLocator'): loc = pm.ls('HelperLocator')[0] #handling the locator pm.bakeResults( loc, simulation=True, time=(animAPI.MAnimControl.minTime().value(), animAPI.MAnimControl.maxTime().value())) #baking the locator pm.delete(pm.listRelatives( loc, type='constraint')[0]) #removing the constraint of the locator pm.mel.eval('HIKCharacterControlsTool') #command to open humanIK pm.mel.hikSetCurrentCharacter("Character1") #selecting character pm.mel.hikUpdateContextualUI() pm.mel.hikBakeCharacter(0) #this is the bake to skeleton command pm.parentConstraint(loc, 'Helper_Weapon1') pm.bakeResults( 'Helper_Weapon1', simulation=True, time=(animAPI.MAnimControl.minTime().value(), animAPI.MAnimControl.maxTime().value())) #baking the locator pm.delete(pm.listRelatives('Helper_Weapon1', type='constraint')[0]) pm.mel.mayaHIKsetRigInput("Character1") #setting back to humanIK pm.mel.hikUpdateContextualUI() #updating the humanIK UI pm.mel.hikUpdateSourceList() #changing constraints and deleting old stuff pm.delete('constraint_Joint_To_Locator') pm.parentConstraint('Helper_Weapon1', 'Joint_Weapon')
def bake_anim(self, namespace=None): # 烘焙动画 bake_sets = [] set_name = pm.textFieldButtonGrp("ARExporterBakeField", q=True, text=True) anim_set = "{}:{}".format(namespace, set_name) if pm.objExists(anim_set): bake_sets = pm.sets(anim_set, q=True) if len(bake_sets) < 1: pm.error(u"选择集{}里面为空".format(anim_set)) else: time_range = self.anim_range() pm.bakeResults(bake_sets, simulation=True, t=time_range, sb=1, # at=pm.listAttr(cam, k=True), dic=True, preserveOutsideKeys=False, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, controlPoints=False, shape=False) else: pm.error(u"缺少{}".format(anim_set))
def bake_simulation_to_joints(self): ''' # this bakes the simulation to the joints ''' joints = [] for bound_geo in self.bound_geo_instances: joint = bound_geo.get_joint() joints.append('%s' % (joint)) pm.bakeResults(joints, simulation=True, time=(self.start_frame, self.end_frame), sampleBy=1, disableImplicitControl=True, preserveOutsideKeys=True, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, controlPoints=False, shape=True) self.delete_rigid_body_to_joint_constraint() self.visibility_state() self.export_to_ma() self.delete_system()
def bake(self): opmTxt = self.hsysOPM.getValue() isAll = self.alhsCBX.getValue() if isAll: hsList = pm.ls(type='hairSystem') else: hsList = pm.ls(opmTxt, r=True)[0].getShapes() for hs in hsList: if isAll: topList = [self.getTopGroupFromHair(hs)] else: topList = self.getTopJointFromHair(hs, True) if not topList: pm.displayError('The top node not found.') return False else: dagList = pm.ls(topList, dag=True) allMixJntList = pm.ls('*mix*', type='joint', r=True) mixJntList = list(set(dagList) & set(allMixJntList)) if not mixJntList: continue ncls = hs.inputs(type='nucleus')[0] for mixJnt in mixJntList: simJnt = mixJnt.attr('tx').inputs() if simJnt: simJnt = simJnt[0] if simJnt.nodeType() == 'joint': simJnt.attr('radius') >> mixJnt.attr( 'radius') # This is for the unbaking if self.tmrgRBG.getSelect() == 1: min = pm.env.getMinTime() max = pm.env.getMaxTime() else: min = self.stedIFG.getValue1() max = self.stedIFG.getValue2() ncls.attr('enable').set(True) pm.bakeResults(mixJntList, sm=True, t=[min, max], ral=False, mr=True, at=['tx', 'ty', 'tz', 'rx', 'ry', 'rz']) ncls.attr('enable').set(False) pm.displayInfo('Successfully baked.')
def _bakeAnim(self, root): ''' Given root: - Bake the heirarchy animation data - Reset timeline to 1 if wasn't already set to 1 ''' print 'Starting: bakeAnim()...' # Getting time range from scene startFrame = int(pm.playbackOptions(q=1, min=1)) endFrame = int(pm.playbackOptions(q=1, max=1)) pm.select(root, hi=1, r=1) # Set timeline to start at frame 1 if startFrame != 1: if startFrame < 1: tChange = (-(startFrame)) + 1 elif startFrame > 1: tChange = (-(startFrame - 1)) pm.keyframe(e=1, time=(startFrame, endFrame), relative=1, timeChange=tChange) pm.playbackOptions(e=1, min=1, max=endFrame + tChange) pm.bakeResults(root, t=(startFrame, endFrame), simulation=True, hi='below') print 'bakeAnim(): Baked anim onto %s' % root print 'bakeAnim(): Range baked: %s - %s' % (startFrame, endFrame) print 'End: bakeAnim()'
def bdBakeAndClean(): shadowRig = pm.ls('shadowRig', type='transform')[0] shadowLocs = shadowRig.getChildren() pm.select(shadowLocs) pm.bakeResults() '''
def StoreAnimation(): for item in COUPLES: item.ConstrainOriginalAnimation() Originals = [o.Original for o in COUPLES] pm.bakeResults(Originals, t=(Begin, End), simulation=True) for item in COUPLES: item.DeleteConstraintFromOriginal()
def _bakeAnim(self, root): ''' Given root: - Bake the heirarchy animation data - Reset timeline to 1 if wasn't already set to 1 ''' print 'Starting: bakeAnim()...' # Getting time range from scene startFrame = int( pm.playbackOptions(q=1, min=1) ) endFrame = int( pm.playbackOptions(q=1, max=1) ) pm.select(root, hi=1, r=1) # Set timeline to start at frame 1 if startFrame != 1: if startFrame < 1: tChange = (-(startFrame))+1 elif startFrame > 1: tChange = (-(startFrame-1)) pm.keyframe(e=1, time=(startFrame, endFrame), relative=1, timeChange=tChange) pm.playbackOptions(e=1, min=1, max=endFrame+tChange ) pm.bakeResults(root, t=(startFrame, endFrame), simulation=True, hi='below' ) print 'bakeAnim(): Baked anim onto %s' % root print 'bakeAnim(): Range baked: %s - %s' % (startFrame, endFrame) print 'End: bakeAnim()'
def makeDynamic(pickedBone): if sceneUnit!='cm': pm.currentUnit(l='cm') if pm.nodeType(pickedBone)=='joint': boneChain = getBoneChain(pickedBone) else: boneObs = createBone(pickedBone) boneChain=getBoneChain(boneObs[0][0]) print pickedBone,boneObs,boneChain if not boneChain: return pm.select([boneChain[0],boneChain[len(boneChain)-1]],r=True) driveJointsWithHair(detailValue,falloffValue) hairHandle=pm.ls('hairHandle1')[0] hairHandle.setAttr("hairDamping",dampValue) hairHandle.setAttr("hairStiffness",stiffValue) if pm.nodeType(pickedBone)=='joint': pm.bakeResults(pickedBone,at=['rotate'],hi='below',sm=True,t=getTimeRange()) pm.delete('dynJoint*','nucleus*','follicle*') else: for o in boneObs: if o[1]: pm.bakeResults(o[1],at=['rotate'],t=getTimeRange(),sm=True) pm.delete(boneChain,'dynJoint*','nucleus*','follicle*',hi='below') pm.currentUnit(l=sceneUnit)
def bakeCamera( cam, exp=False, *args, **kwargs ): """Duplicates a baked version of a camera. Expects a valid camera transform node.""" # Frame range frame_range = ( pm.playbackOptions( q=True, min=True ), pm.playbackOptions( q=True, max=True ) ) # Duplicate the camera dup_cam = pm.duplicate( cam, name=(cam.name() + '_Baked') )[0] # Parent new camera to world. try: pm.parent(dup_cam, w=True) except RuntimeError: pass # Constrain new camera to old const = pm.parentConstraint( cam, dup_cam, mo=True ) # Bake it pm.bakeResults( dup_cam, t=frame_range ) # Delete the constraint pm.delete(const) return dup_cam
def bake_animation(input_object, translate=True, rotate=True, scale=False, time_range=None, hierarchy=True): """Bake animation specified PyNode object. :arg input_object: PyNode object need to bake the animation. :type input_object: pm.PyNode :key translate: If True, all translate attributes will get bake animation. :type translate: bool :key rotate: If True, all rotate attributes will get bake animation. :type rotate: bool :key scale: If True, all scale attributes will get bake animation. :type scale: bool :key time_range: Specified start and end frame of bake animation. Default using current scene start and end frame. :type time_range: list of int :key hierarchy: If True, all children of specified PyNode object will get bake animation. :type hierarchy: bool """ if time_range is None: time_range = [scene_info.get_start_frame(), scene_info.get_end_frame()] if hierarchy: hi_format = 'below' else: hi_format = 'none' attr_list = [] if translate: attr_list.extend(['tx', 'ty', 'tz']) if rotate: attr_list.extend(['rx', 'ry', 'rz']) if scale: attr_list.extend(['sx', 'sy', 'sz']) # pause viewport maya pm.general.refresh(suspend=True) # format time range timerange_format = '{}:{}'.format(time_range[0], time_range[1]) # bake keys pm.bakeResults(input_object, simulation=True, t=timerange_format, hi=hi_format, at=attr_list, sampleBy=1, oversamplingRate=1, disableImplicitControl=True, preserveOutsideKeys=False, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, removeBakedAnimFromLayer=False, bakeOnOverrideLayer=False, minimizeRotation=True, controlPoints=False, shape=False) # end of pause viewport maya pm.general.refresh(suspend=False)
def bdBakeAndClean(): shadowRig = pm.ls('shadowRig',type='transform') [0] shadowLocs = shadowRig.getChildren() pm.select(shadowLocs ) pm.bakeResults() '''
def bakeAnim(self, *args): #bakes the selected mesh and joints to one frame intervals pm.bakeResults(simulation=True, preserveOutsideKeys=True, disableImplicitControl=True, removeBakedAttributeFromLayer=False, minimizeRotation=True, t=(1, 60))
def genereateAnim(self, reopen=True): # export_path,_ = self.getFilename() Scene = self.preExport() FBXAnim = os.path.join(Scene.dirname(), "FBXAnim") os.mkdir(FBXAnim) if not os.path.exists(FBXAnim) else None export_path = os.path.join(FBXAnim, "%s.FBX" % Scene.namebase) export_path = export_path.replace('\\', '/') # NOTE 导入所有的 reference [ref.importContents(True) for ref in pm.listReferences()] mesh_list = pm.ls("MODEL", ni=1, dag=1, type="mesh") # # NOTE 删除非变形器历史 # pm.bakePartialHistory( mesh_list,prePostDeformers=True ) jnt_list = self.getJntList(mesh_list) pm.select(cl=1) root = pm.joint(n="root") jnt_parent = self.getRelParent(jnt_list, root) anim_parent = {} for jnt in jnt_list: pm.select(cl=1) anim_jnt = pm.joint(n="%s_bind" % jnt) pm.parentConstraint(jnt, anim_jnt, mo=0) pm.scaleConstraint(jnt, anim_jnt, mo=0) parent = jnt_parent[jnt] anim_parent[ anim_jnt] = "%s_bind" % parent if parent != root else root jnt_transform = {} for anim_jnt, parent in anim_parent.items(): anim_jnt.setParent(parent) # NOTE 删除骨骼缩放修正组 transform = anim_jnt.getParent() if transform != parent: pm.ungroup(transform) # NOTE bake 关键帧 start_time = pm.playbackOptions(q=1, min=1) end_time = pm.playbackOptions(q=1, max=1) pm.bakeResults(anim_parent.keys(), simulation=1, t=(start_time, end_time)) # NOTE 删除 root 骨骼下的所有约束 pm.delete(pm.ls(root, dag=1, ni=1, type="constraint")) pm.select(root) # NOTE 导出文件 mel.eval('FBXExport -f "' + export_path + '" -s') os.startfile(os.path.dirname(export_path)) # NOTE 重新打开当前文件 if reopen: pm.openFile(pm.sceneName(), f=1)
def bakeCmd(self): sel = pm.ls(sl=1) min = pm.playbackOptions(q=1, min=1) max = pm.playbackOptions(q=1, max=1) m = re.match("BCT_ctrl\d*_Ctrl", sel[0].name()) if m: pm.bakeResults(sel[0], t =(min, max), simulation=True) else : print "selection is not BCT!!!"
def TransferAnimation(): for item in COUPLES: item.ConstrainLoc2Joint() locators = [o.Loc for o in COUPLES] pm.bakeResults(locators, t=(Begin, End), simulation=True) for item in COUPLES: item.DeleteConstraint() item.ConstrainJoint2Loc() item.ClearJointAnimation()
def bakeCmd(self): sel = pm.ls(sl=1) min = pm.playbackOptions(q=1, min=1) max = pm.playbackOptions(q=1, max=1) m = re.match("BCT_ctrl\d*_Ctrl", sel[0].name()) if m: pm.bakeResults(sel[0], t=(min, max), simulation=True) else: print "selection is not BCT!!!"
def func(): remove_namespace() # 找出带有关键字的骨骼根节点 key_world = "Root_M" all_nodes = cmds.ls(type="joint", l=True) for node in all_nodes: print node if str(node).endswith("Root_M") and "DeformationSystem" in str(node): pm.select(node) break print("hahahaha") current_select = pm.ls(sl=True) if not current_select: return # 判断是不是代理文件,并处理命名空间 final = get_top(current_select)[0] # judge the selection is ref or not ref_jud = pm.referenceQuery("%s" % final, isNodeReferenced=True) if ref_jud: file_path = pm.referenceQuery("%s" % final, filename=True) print file_path pm.mel.eval('file -importReference "%s"' % file_path) # 导入之后重新选择节点 all_nodes = cmds.ls(type="joint", l=True) for node in all_nodes: print node if str(node).endswith("Root_M") and "DeformationSystem" in str( node): pm.select(node) break print("hahahaha") current_select = pm.ls(sl=True) # 将这套骨骼从组中提出 cmds.parent(current_select, world=True) # 选择根骨骼层级下的所有骨骼 pm.select(current_select, hierarchy=True) all_sk = pm.ls(sl=True) # 获取当前起止帧数 start = pm.playbackOptions(q=True, minTime=True) end = pm.playbackOptions(q=True, maxTime=True) # 进行动画烘焙 pm.bakeResults(all_sk, simulation=True, hierarchy="below", t=(start, end)) # 导出所选骨骼,包含所有层级,为fbx文件 # 先选中骨骼 pm.select(current_select) # 反选并删除其余内容,因为工程没整理,批量导出会有残余 pm.mel.eval("invertSelection") pm.delete(pm.ls(sl=True)) # 再选择导出的骨骼 pm.select(current_select, hierarchy=True) # 输出路径 current_path = pm.mel.eval("file -q -sn") fbxpath = os.path.splitext(current_path)[0] + ".fbx" pm.mel.eval('file -force -options "v=1;" -typ "FBX export" -pr -es "%s"' % fbxpath)
def bake_anim(root): root.setParent(None) start_time = int(pymel.playbackOptions(q=True, min=True)) end_time = int(pymel.playbackOptions(q=True, max=True)) # Note the hierarchy flag on bakeResults does not work as advertised, misses some children. Running through a loop. bake_jnts = root.listRelatives(allDescendents=True, type='joint') bake_jnts.append(root) pymel.bakeResults(bake_jnts, simulation=True, time=(start_time, end_time))
def ar_bakeIkJoints(ikHandles, startFrame=None, endFrame=None, particleShps=None): """ @ bake ik joints (using query ik handle joint list). Args: ikHandles (list): list of ik handle which will bake. startFrame (float): start frame (if not provide query from timeline). endFrame (float): end frame (if not provide query from timeline). particleShps (list): particle list if using particle on curve. Returns: bool. """ # convert arguments into PyNode. ikHandles = [pm.PyNode(x) for x in ikHandles] # Query ik Handle related joints. joints = [pm.ikHandle(x, q=True, jl=True) for x in ikHandles] if not startFrame: # query playback options. startFrame = pm.playbackOptions(q=True, min=True) endFrame = pm.playbackOptions(q=True, max=True) # set playback options -50 frames from current time. pm.playbackOptions(e=True, ps=0, mps=1) pm.currentTime(startFrame - 50) # animation start time and current time query and set it to -50. astFrame = pm.playbackOptions(q=True, ast=True) crtFrame = pm.currentTime(q=True) pm.playbackOptions(min=startFrame - 50, ast=astFrame - 50) # if particle shapes is passed. if particleShps: particleShps = [pm.PyNode(x) for x in particleShps] # set particle start frame at -50 from current time. for each in particleShps: each.startFrame.set(startFrame - 50) # bake simulation. pm.bakeResults(joints, sm=True, t=str(startFrame) + ':' + str(endFrame), sb=1, dic=1, pok=1, sac=False, cp=False, s=False) # off dynamics if particle argument is passed. if particleShps: [x.isDynamic.set(0) for x in particleShps] # apply default values. pm.playbackOptions(min=startFrame, ast=astFrame) pm.currentTime(crtFrame, e=True) return True
def _bake(targets): # Grab the start and end frame start = int(pmc.playbackOptions(ast=True, q=True)) end = int(pmc.playbackOptions(aet=True, q=True)) # Bake the targets pmc.bakeResults(targets, t=(start, end), hi='none', simulation=True) # Delete all the baked nodes for node in _findBindNodes(): pmc.delete(node)
def xyzDel(*mayaFalse): pm.mel.hikBakeCharacter(0) pm.currentTime(0) if pm.ls('x'): pm.parent(pm.listRelatives(pm.ls('z'), type='transform'), 'Character1_Ctrl_Reference') pm.delete(pm.listRelatives(pm.ls('x'), type='transform'), 'x') else: print 'XYZ controls not installed' #weapon baking pm.bakeResults(pm.ls('WeaponMotion*', type='transform'), pm.ls('WeaponRoot*', type='transform'), simulation=True, t=[ animAPI.MAnimControl.minTime().value(), animAPI.MAnimControl.maxTime().value() ]) pm.select(d=True) if pm.ls('*_R'): print 'right hand weapon present' try: pm.select('Constraint_Weapon_Global_R', add=True) except: pm.select(pm.listRelatives('WeaponMotion_R', type='constraint')[0], add=True) if pm.ls('*_L'): print 'left hand weapon present' try: pm.select('Constraint_Weapon_Global_L', add=True) except: pm.select(pm.listRelatives('WeaponMotion_L', type='constraint')[0], add=True) mel.eval("doDelete;") if pm.ls('*_R'): pm.parentConstraint('WeaponRoot_R', 'R_AttachmentMotion', mo=False) if pm.ls('*_L'): pm.parentConstraint('WeaponRoot_L', 'L_AttachmentMotion', mo=False) pm.bakeResults(pm.ls('*_AttachmentMotion', type='transform'), simulation=True, t=[ animAPI.MAnimControl.minTime().value(), animAPI.MAnimControl.maxTime().value() ]) if pm.ls('*_R'): pm.select('R_AttachmentMotion_parentConstraint1', add=True) if pm.ls('*_L'): pm.select('L_AttachmentMotion_parentConstraint1', add=True) mel.eval("doDelete;")
def bake_animation(bakeList): #changed to list input #pm.select(bakeTarget) #set timeline playStartTime = int(pm.playbackOptions(query=True, minTime=True)) playEndTime = int(pm.playbackOptions(query=True, maxTime=True)) #Bake Animation #for target in bakeList: pm.bakeResults(bakeList, simulation=1, sampleBy=1, pok=1, sac=0, time=(playStartTime, playEndTime))
def bake(self): minFrame = int(pm.playbackOptions(q=1,min=1)) maxFrame = int(pm.playbackOptions(q=1,max=1)) selectSet = pm.ls('*:bake_set*',typ='objectSet') if selectSet == []: pm.headsUpMessage( '???' ) else: bakeList = [] for x in selectSet: for y in x.flattened(): bakeList.append(y) pm.bakeResults(bakeList, sm=1, t=(minFrame, maxFrame), sb=1, pok=1, sac=0, bol=0, at=['tx','ty','tz','rx','ry','rz','sx','sy','sz'])
def bakeAnimation(nodes): """ Bakes animation on the given nodes for the current timeline. Args: nodes(list): A list of nodes. """ try: pmc.refresh(su=True) start = pmc.playbackOptions(minTime=True, q=True) end = pmc.playbackOptions(maxTime=True, q=True) pmc.bakeResults(nodes, at=['tx', 'ty', 'tz', 'rx', 'ry', 'rz'], t=(start, end), simulation=True) finally: pmc.refresh(su=False)
def bake_animation(child_geo, start_time, end_time): print 'child_geo:', child_geo temp = pm.duplicate(child_geo)[0] print 'temp:', temp pm.parent(temp, world=True) pc = pm.parentConstraint(child_geo, temp) sc = pm.scaleConstraint(child_geo, temp, maintainOffset=True) pm.bakeResults(temp, time=(start_time, end_time), simulation=True) pm.delete(pc) pm.delete(sc) child_geo_name = child_geo.nodeName() pm.delete(child_geo) temp.rename(child_geo_name) print 'new_temp:', temp return temp
def bake_simulation_to_joints(self): ''' # this bakes the simulation to the joints ''' pm.bakeResults(self.joints, simulation= True, time= (self.start_frame, self.end_frame), sampleBy= 1, disableImplicitControl= True, preserveOutsideKeys= True, sparseAnimCurveBake= False, removeBakedAttributeFromLayer= False, bakeOnOverrideLayer= False, controlPoints= False, shape= True) self.delete_rigid_body_to_joint_constraint() self.visibility_state() self.export_to_ma() self.delete_system()
def bakeCamToWorld(camera): bakedCam = pm.duplicate(camera,name=camera.name()+'_publish',rc=True, rr=True, ic=True) children = pm.listRelatives(bakedCam,c=True,pa=True)[1:] for c in children: pm.delete(c) parent = pm.listRelatives(camera,parent=True) if len(parent) != 0: pm.parent(bakedCam,w=True) pm.parentConstraint(camera,bakedCam,mo=False) start = pm.playbackOptions(q=True,minTime=True) end = pm.playbackOptions(q=True,maxTime=True) pm.bakeResults(bakedCam, t=(start,end)) pm.delete(bakedCam[0] + '*Constraint*')
def bakeJoints(jnt, start, end): pm.select(jnt) pm.bakeResults(simulation=True, t=(start, end), hierarchy=('below'), sampleBy=1, oversamplingRate=1, disableImplicitControl=True, preserveOutsideKeys=True, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, removeBakedAnimFromLayer=False, bakeOnOverrideLayer=False, minimizeRotation=True, controlPoints=False, shape=True)
def bake_simulation_to_joints(self): joints = [] for bound_geo in self.bound_geo_instances: joint = bound_geo.get_joint() joints.append('%s' % (joint)) pm.bakeResults(joints, simulation= True, time= (self.start_frame, self.end_frame), sampleBy= 1, disableImplicitControl= True, preserveOutsideKeys= True, sparseAnimCurveBake= False, removeBakedAttributeFromLayer= False, bakeOnOverrideLayer= False, controlPoints= False, shape= True) self.delete_rigid_body_to_joint_constraint() self.visibility_state() self.export_to_ma() self.delete_system()
def helperShadowBake(self): pm.bakeResults('Helper_Shadow', simulation=True, time=(animAPI.MAnimControl.minTime().value(), animAPI.MAnimControl.maxTime().value()), sampleBy=1, oversamplingRate=1, disableImplicitControl=True, preserveOutsideKeys=True, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, removeBakedAnimFromLayer=False, bakeOnOverrideLayer=False, minimizeRotation=True, controlPoints=False, shape=True)
def btn_createAECam(): sel = pm.ls(sl=True, type='transform') if sel: if not pm.nodeType( sel[0].getShape() ) == 'camera': raise consts = [] camTrn = sel[0] camShp = sel[0].getShape() aeCamTrn = pm.duplicate( camTrn )[0] aeCamShp = aeCamTrn.getShape() aeCamTrn.rename('afterEffectCam#') consts.append( pm.parentConstraint( camTrn, aeCamTrn ) ) camShp.focalLength >> aeCamShp.focalLength # pm.mel.BakeSimulationOptions() # pm.select( const ) # pm.delete( const ) pm.bakeResults( aeCamTrn, simulation=True, t="%d:%d"%( pm.playbackOptions(q=True, min=True), pm.playbackOptions(q=True, max=True)), sampleBy=1, disableImplicitControl=True, preserveOutsideKeys=True, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, removeBakedAnimFromLayer=False, bakeOnOverrideLayer=False, minimizeRotation=True, controlPoints=False, shape=True ) aeCamShp.filmFit.set(2) # vertical pm.delete( consts ) pm.select( aeCamTrn )
def bakeLocatorPos(locators, specifyFrames=False): '''This function bakes locators to the selected transforms Args: locators (pm.nt.Transform): this is a list of transforms to bake to buffer locators specifyFrames (tuple): just a tuple of two integers that specify start/end frames e.g. (1004,1010) Usage: bakeLocatorPos(pm.ls(sl=True, type='transform')) #runs with timeline as you have it bakeLocatorPos(pm.ls(sl=True, type='transform'), specifyFrames=(1004,1010)) #runs with specific ''' #make a decompose matrix for later decompose = pm.createNode('decomposeMatrix') #Initialize the lists of objects we're going to manipulate bufferLocators, constraints = [], [] for locator in locators: #connect the original locator to the decomposeMatrix to get the world position locator.worldMatrix[0].connect(decompose.inputMatrix, f=True) #create the buffer locator bufferloc = pm.spaceLocator( n=locator.name() + "_BUFFERLOC") #Set all the initial values for the buffer locator bufferloc.translate.set( decompose.outputTranslate.get() ) bufferloc.rotate.set( decompose.outputRotate.get() ) #bufferloc.scale.set(0,0,0) #add the bufferLocator and the constraints constraints.append( pm.parentConstraint(locator, bufferloc, mo=True)) bufferLocators.append(bufferloc) #we don't need the decompose matrix anymore pm.delete(decompose) #get the start and end frame startFrame = pm.playbackOptions(q=True,ast=True) endFrame = pm.playbackOptions(q=True,aet=True) frameRange=(startFrame,endFrame) if specifyFrames: frameRange=specifyFrames #bake the animation on all the buffer locators for start and end time pm.bakeResults( bufferLocators, simulation=True, t=frameRange, sampleBy=1, disableImplicitControl=True, preserveOutsideKeys=True,sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, controlPoints=False, shape=True); pm.delete(constraints)
def aw_bakeCam(): '''Takes a camera, duplicates it, bakes it and then ''' localUser = os.environ[ 'USER' ] localProject=os.environ[ 'MAYA_PROJECT' ] shotName=localProject.split("/")[-2] cams=pm.ls(sl=True) #Selection error checking for cam in cams: if cam.getShape().type()=='camera': #Store and set new camera camName = (shotName + "_CAM") cam_dup=pm.camera(n=camName)[0] copyCamSettings(cam,cam_dup) secureCam(cam_dup,lock=False) #Parent Constrain pc=pm.parentConstraint(cam,cam_dup) #Set start and end frame and bake to sequence begFrame = pm.playbackOptions(q=True,ast=True) endFrame = pm.playbackOptions(q=True,aet=True) pm.bakeResults(cam_dup, sparseAnimCurveBake=False, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, preserveOutsideKeys=True, simulation=True, sampleBy=1, shape=True, t=(begFrame,endFrame), at=["tx", "ty", "tz", "rx", "ry", "rz"], disableImplicitControl=True, controlPoints=False) #Clean up and delete pm.delete(pc) attachImagePlane( cam_dup, localProject, localUser, shotName ) secureCam(cam_dup,lock=False) mpc.rig_setsCreateHubSet([pm.PyNode(cam_dup)], cam_dup, 'camera')
def BakeTransform( self, bakeOnNewLocator=True, *args ): # BakeTransform( bakeOnNewLocator=False ) ''' Useful for exporting translate and rotate animation to other 3D packages. if bakeOnNewLocator in True: For every selected object, creates a locator and bakes object's animation on this locator. if bakeOnNewLocator in False: For every selected object, bakes their translate, rotate and scale animations in world space. ''' objs = pm.ls( sl=True ) if not objs: pm.warning( "ehm_tools...BakeAnimation: Select an object to bake it's transform animation." ) return try: # get info from UI, if in UI mode selectedItem = pm.radioCollection( self.bakeModeRC, q=True, select=True ) bakeOnNewLocatorState = pm.radioButton( selectedItem, q=True, label=True ) if bakeOnNewLocatorState == 'Bake On New Locator': bakeOnNewLocator=True else: bakeOnNewLocator=False except: pass timeRange = self.getTimeRange() locs = [] cons = [] # for each selected object... for obj in objs: # bake it's animation on a new locator if obj.type() in [ 'transform', 'joint' ]: loc = pm.spaceLocator( name= '%s_SRT'%obj.name() ) cons.append( pm.pointConstraint( obj, loc ) ) cons.append( pm.orientConstraint( obj, loc ) ) cons.append( pm.scaleConstraint( obj, loc ) ) # hide all objects to increase speed of baking animation, IsolateSelected( state=True, showSelected=False ) locs.append( loc ) pm.bakeResults( locs , simulation=True, t=timeRange, disableImplicitControl=True, preserveOutsideKeys=True, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, controlPoints=False, shape=False ) # unhide all objects allModelPanels = pm.getPanel( type='modelPanel' ) for onePanel in allModelPanels: pm.isolateSelect( onePanel, state=False ) pm.delete( cons ) pm.select( locs ) cons = [] # for each selected object... if not bakeOnNewLocator: # bake keys on selected objects themseleves not on new locators bakedObjects = pm.group( empty=True, name='baked_objects_grp') for i in range( len(objs) ): UnlockUnhideAttrs( objs = objs[i] ) self.removeConnections( objs = objs[i] ) pm.parent( objs[i], bakedObjects ) cons.append( pm.pointConstraint( locs[i], objs[i] ) ) cons.append( pm.orientConstraint( locs[i], objs[i] ) ) cons.append( pm.scaleConstraint( locs[i], objs[i] ) ) # hide all objects to increase speed of baking animation, IsolateSelected( state=True, showSelected=False ) pm.bakeResults( objs , simulation=True, t=timeRange, disableImplicitControl=True, preserveOutsideKeys=True, removeBakedAttributeFromLayer=False, bakeOnOverrideLayer=False, controlPoints=False, shape=False ) # unhide all objects for onePanel in allModelPanels: pm.isolateSelect( onePanel, state=False ) pm.delete( cons ) pm.delete( locs ) pm.select( objs )