The code below demonstrates, via maya’s python api, how to retrieve:
– mObject from a mesh, and its skincluster
– MFnSkinCluster for the skincluster on that mesh
– the influences in that skin cluster and their names
– the influence weights for every vert in that mesh
Enjoy!
# Imports first! # Don‘t mind the short names, I have a habit of using mc, om, oma for maya‘s modules import maya.OpenMaya as om import maya.OpenMayaAnim as oma
Next, we’ll get the MObject & MDagPath for our mesh’s shapenode
# The shape node for some mesh mesh = ‘pSphereShape1‘ mSel = om.MSelectionList() mSel.add(mesh) meshMObject = om.MObject() meshDagPath = om.MDagPath() mSel.getDependNode(0, meshMObject) mSel.getDagPath(0, meshDagPath)
Next, an MDagPathArray of the influences and the influence count.
Also, the node names for those influences, for convenience.
# Influences & Influence count influences= om.MDagPathArray() infCount = skinFn.influenceObjects(influences) # Get node names for influences influenceNames = [influences[i].partialPathName() for i in range(infCount)]
Finally, get all of the weight data, organized as a dictionary of dictionaries.
The first level will use vert indices for keys, the next will be a dict of influence name : weight.
weightData = {} # Ordered by vertIter 0-numVerts vertIter = om.MItGeometry(meshMObject) while not vertIter.isDone(): vertInfCount = om.MScriptUtil() vertInfCountPtr = vertInfCount.asUintPtr() om.MScriptUtil.setUint(vertInfCountPtr, 0) weights = om.MDoubleArray() skinFn.getWeights(meshDagPath, vertIter.currentItem(), weights, vertInfCountPtr) # Create a dictionary for each vert index in the mesh # All influences will be returned for each vert, but may have 0 influence weightData[vertIter.index()] = dict(zip(influenceNames, weights)) vertIter.next()
时间: 2024-10-15 06:00:22