Skip to content

Instantly share code, notes, and snippets.

@kohyuk91
Last active December 10, 2019 01:13
Show Gist options
  • Select an option

  • Save kohyuk91/6dfc8f7c8be9f0f733df6471b1f4c29a to your computer and use it in GitHub Desktop.

Select an option

Save kohyuk91/6dfc8f7c8be9f0f733df6471b1f4c29a to your computer and use it in GitHub Desktop.
"""
Usage
1. Select Camera
2. Select Object Point Group(s)
3. Run Script
"""
import maya.cmds as mc
selCamTrans = mc.ls(selection=True, long=True)[0]
selObjPGroupTransList = zip( mc.ls(selection=True)[1:], mc.ls(selection=True, long=True)[1:] )
for selObjPGroupTrans in selObjPGroupTransList:
parentGrpTrans = mc.group(name=selObjPGroupTrans[0]+"_ctrl", empty=True)
childGrpTrans = mc.duplicate(selObjPGroupTrans[1], name=selObjPGroupTrans[0]+"_dup")[0]
mc.parent(childGrpTrans, parentGrpTrans)
### Add Constraints ###
parentGrpPC = mc.parentConstraint(selCamTrans, parentGrpTrans, maintainOffset=False)
childGrpPC = mc.parentConstraint(selObjPGroupTrans[1], childGrpTrans, maintainOffset=False)
### Bake ###
minTime = mc.playbackOptions(q=True, minTime=True)
maxTime = mc.playbackOptions(q=True, maxTime=True)
mc.bakeResults(childGrpTrans, attribute=["tx","ty","tz","rx","ry","rz"], time=(minTime, maxTime))
mc.delete(childGrpPC)
### Hide Original ###
mc.hide(selObjPGroupTrans[1])
@kohyuk91
Copy link
Author

OLD

import maya.cmds as mc

def main():
    ## GET HERO CAM INFO ##
    heroCamTrans = mc.ls(selection=True, long=True)[0]
    heroCamShape = mc.listRelatives(heroCamTrans, shapes=True, fullPath=True)[0]

    ## GET SCENE INFO ##
    sceneTrans = mc.listRelatives(heroCamTrans, parent=True)

    ## GET objectPG LIST ##
    objectPGList = mc.ls(selection=True, long=True)[1:]

    ## GET MIN & MAX TIME ##
    minTime = mc.playbackOptions(q=True, min=True)
    maxTime = mc.playbackOptions(q=True, max=True)

    ## SCENE SCALE to 1 ##
    mc.xform(sceneTrans, translation=(0,0,0), ws=True)
    mc.xform(sceneTrans, scale=(1,1,1), ws=True)

    for objectPG in objectPGList:
        ## DUPLICATE objectPG ##
        dupObjectPG = mc.duplicate(objectPG, n='objectPG_dup#')[0]

        ## HIDE OBJECT PG##
        mc.setAttr(objectPG+'.visibility',0)

        ## CREATE BAKE GRP ##
        ## OUTER_BAKE_GRP
        ## |_ INNER_BAKE_GRP
        ##   |_BAKE_LOC
        bakeLoc = mc.spaceLocator(n='bake_loc#')[0]
        innerBakeGrp = mc.group(bakeLoc, n='inner_bake_grp#')
        outerBakeGrp = mc.group(innerBakeGrp, n='outer_bake_grp#')
        for i in [bakeLoc, innerBakeGrp, outerBakeGrp]:
            mc.setAttr(i+'.rotateOrder', 2)

        ## PARENT CONSTRAIN OUTER_BAKE_GRP to HERO_CAM ##
        objectPC = mc.parentConstraint(heroCamTrans, outerBakeGrp, mo=False)

        ## PARENT CONSTRAIN BAKE_LOC to objectPG ##
        bakelocPC = mc.parentConstraint(objectPG, bakeLoc, mo=False)

        ## BAKE CONSTRAIN OUTER_BAKE_GRP & CONSTRAIN BAKE_LOC ##
        mc.bakeResults(outerBakeGrp, time=(minTime,maxTime))
        mc.bakeResults(bakeLoc, time=(minTime,maxTime))
        mc.delete(objectPC, bakelocPC)

        ## UNPARENT INNER_BAKE_GRP ##
        mc.parent(innerBakeGrp, world=True)

        ## PARENT DUP_OBJECT_PG to BAKE_LOC ##
        mc.parent(dupObjectPG, bakeLoc)

        ## PARENT CONSTRAIN INNER_BAKE_GRP to HERO_CAM ##
        mc.parentConstraint(heroCamTrans, innerBakeGrp, mo=False)

        ## DELETE OUTER_BAKE_GRP ##
        mc.delete(outerBakeGrp)

        mc.select(clear=True)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment