Napisano 21 Kwiecień 20159 l Hej - w Maya 2016 zmieniło się troszkę działanie node'a skinCluster, który teraz keszuje sobie macierze pre-bind. Przez to modyfikacja atrybutów bindPreMatrix na pierwszy rzut oka nie wpływa na skina. Ten skrypt resetuje skin'a (ustawia aktualną pozycję szkieletu jako "początkową". Sprawdziłem na Maya 2015 i 2016. import maya.cmds as cmds def reset_skin_cluster(mayanode): historyNodes = cmds.listHistory(mayanode) for node in historyNodes: if cmds.nodeType(node) != "skinCluster": continue skinCl = node # influences = cmds.listConnections( skinCl + ".matrix" ) indices = cmds.getAttr(skinCl + ".matrix", mi=True) for indx in indices: influence = cmds.listConnections("%s.matrix[%i]" % (skinCl, indx)) if len(influence) > 0: mat = cmds.getAttr(influence[0] + ".worldInverseMatrix") cmds.setAttr("%s.bindPreMatrix[%i]" % (skinCl, indx), mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15], type="matrix") try: cmds.skinCluster(skinCl, e=True, recacheBindMatrices=True) except StandardError: pass
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto