前两天朋友跟我讲了一个方法为了解决abc物体运动过快导致解算难度的问题 其实这个问题可以通过cache的速度进行处理,不过他所说的方法也很有意思,先记录在这里。
import maya.cmds as mc
point = mc.ls(sl=1)
world = mc.pointPosition(point[0],w=1)
transform = mc.createNode('transform',n='LOC')
locator = mc.createNode('locator',n=transform+'Shape',p=transform)
mc.move(world[0],world[1],world[2],'LOC')
mc.makeIdentity('LOC',apply=True,t=1,r=1,s=1,n=0,pn=1)
mc.select(point[0])
Constraint = mc.pointOnPolyConstraint(point[0],'LOC',maintainOffset=0,weight=1)
get_max_start = mc.playbackOptions(q=True,ast=True)
get_max_end = mc.playbackOptions(q=True,aet=True)
mc.bakeResults('LOC',time=(get_max_start, get_max_end),sampleBy=1,animation="keysOrObjects",sparseAnimCurveBake=False,simulation=True,)
mc.delete(Constraint[0])
multiplyDivide = mc.createNode('multiplyDivide')
mc.connectAttr('LOC.translate','%s.input1'%multiplyDivide)
obj = point[0].split('.')[0]
mc.connectAttr('%s.output'%multiplyDivide,'%s.translate'%point[0].split('.')[0])
mc.setAttr('%s.input2X'%multiplyDivide,-1)
mc.setAttr('%s.input2Y'%multiplyDivide,-1)
mc.setAttr('%s.input2Z'%multiplyDivide,-1)
这样做可以抵消abc的位移然后进行解算,当解算完成后可以将multi节点的参数再改回1即可。