Skocz do zawartości

Featured Replies

Napisano

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

  • Wyświetleń 1,5k
  • Created
  • Ostatniej odpowiedzi

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności