Beispiel #1
0
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
Beispiel #2
0
 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])
Beispiel #3
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'))
Beispiel #4
0
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)
Beispiel #5
0
    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)
Beispiel #6
0
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')
Beispiel #7
0
    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))
Beispiel #8
0
    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()
Beispiel #9
0
    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.')
Beispiel #10
0
    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()
    '''
Beispiel #12
0
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()'
Beispiel #14
0
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)
Beispiel #15
0
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
Beispiel #16
0
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)
Beispiel #17
0
def bdBakeAndClean():
    
    shadowRig = pm.ls('shadowRig',type='transform') [0]
    shadowLocs = shadowRig.getChildren()
    
    pm.select(shadowLocs )
    pm.bakeResults()
    '''
Beispiel #18
0
 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))
Beispiel #19
0
    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)
Beispiel #20
0
 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!!!"
Beispiel #21
0
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!!!"
Beispiel #23
0
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)
Beispiel #24
0
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))
Beispiel #25
0
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
Beispiel #26
0
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)
Beispiel #27
0
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;")
Beispiel #28
0
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))
Beispiel #29
0
    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'])
Beispiel #30
0
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)
Beispiel #31
0
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
Beispiel #32
0
 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()
Beispiel #33
0
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)
Beispiel #35
0
 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()
Beispiel #36
0
 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)
Beispiel #37
0
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 )
Beispiel #38
0
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)
Beispiel #39
0
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')
Beispiel #40
0
	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 )