Advertisement
Guest User

eyelids_vane

a guest
May 24th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.42 KB | None | 0 0
  1. #Se van a crear los huesos debajo de dos grupos:
  2.     #Grupo SDK controlado por ParentConstraint a Jaw y Mouth
  3.     #Grupo Attach controlado por la ribbon
  4.  
  5.  
  6. def remap(OldMin, OldMax, NewMin,NewMax, OldValue):
  7.     NewValue = 0
  8.     OldRange = (OldMax - OldMin)
  9.     if (OldRange == 0):
  10.         NewValue = NewMin
  11.     else:
  12.         NewRange = (NewMax - NewMin)  
  13.         NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin
  14.  
  15.     return NewValue
  16.  
  17.  
  18.  
  19. #################################################################
  20. ######Select Control of Jaw to add Sticky Lips Attributes#####
  21. cn_jaw_ctl = cmds.ls(sl=1, fl =1)[0]
  22.  
  23.  
  24. ##############
  25. #Select sdk_jaw_loc#
  26. sdk_jaw_loc = cmds.ls(sl=1, fl =1)[0]
  27.  
  28.  
  29. ##############
  30. #Select sdk_mouth_loc#
  31. sdk_mouth_loc=cmds.ls(sl=1, fl =1)[0]
  32.  
  33.  
  34. ##############
  35. #Select RibbonSurface#
  36. ribbon_surface=cmds.ls(sl=1, fl =1)[0]
  37.  
  38. labioInferior =True
  39.  
  40. parentConstraintsToJaw = []
  41. parentConstraintsToMouth = []
  42.  
  43.  
  44. ##############
  45. #Select curve#
  46. curva = cmds.ls(sl=1, fl =1)[0]
  47.  
  48.  
  49.  
  50. side = None
  51. name = None
  52. zone = None
  53. type = None
  54. side, name, zone, type = curva.split('_')
  55. #Se cogen sus vertices en vtxs
  56. cmds.select (curva + '.cv[*]')
  57. vtxs = cmds.ls(sl =1, fl =1)
  58. print len(vtxs)
  59. cmds.select(cl =1)
  60.  
  61.  
  62. #Crear grupos.
  63. jnts = cmds.group(em=1, n ='{0}_{1}_{2}_jntsGrp'.format(side,name,zone))
  64. rig = cmds.group(em =1, n ='{0}_{1}_{2}_rig'.format(side,name,zone))
  65. cmds.parent(jnts, rig)
  66.  
  67.  
  68. for i in range (len(vtxs)):
  69.     cmds.select(cl =1)    
  70.     loca= cmds.spaceLocator()
  71.     cmds.select(cl =1)
  72.     posCv = cmds.xform(vtxs[i], q =1, ws =1, t =1)
  73.     jnt= cmds.joint(n='{0}_{1}_{2}_{3}_jnt'.format(side,name,zone,str(i)))
  74.     cmds.select(cl =1)
  75.     grupoAttach = cmds.group(em =1, n='{0}_{1}_{2}_{3}_attach'.format(side,zone,name,str(i)))
  76.     cmds.select(cl =1)
  77.  
  78.     cmds.parent(jnt,grupoAttach)
  79.     cmds.parent(loca,grupoAttach)
  80.  
  81.  
  82.     #ES HORA DE SITUAR LOS HUESOS EN POSICIONES CONTROLABLES POR LA RIBBON:
  83.     #Primero creo un grupo auxiliar en la posición de la curva, con el que sacar el closestPointOnSurface, que despues se borrará.
  84.     currentAuxGrp  = cmds.group(em=1, n='thisShoulNotExists_{0}'.format(str(i)))
  85.     cmds.xform(currentAuxGrp , ws =1 , t= posCv)  
  86.     #Nodos en el node Editor.
  87.         #El DecomposeMatrix nos va a dar la posición en coordenadas globales del lugar donde tiene que ir el hueso(y por tanto su grupo _Attach y el pivot de _SDK).
  88.         #Nos sirve tambien para sacar las coordenadas UV con el ClosestPointOnSurface.
  89.     currentCPOS = cmds.createNode( 'closestPointOnSurface')
  90.     currentDM = cmds.createNode('decomposeMatrix')
  91.     currentPOSI = cmds.createNode('pointOnSurfaceInfo')
  92.  
  93.     cmds.connectAttr(currentAuxGrp+'.worldMatrix[0]', currentDM +'.inputMatrix')
  94.     cmds.connectAttr(currentDM+'.outputTranslate', currentCPOS +'.inPosition')
  95.     cmds.connectAttr(ribbon_surface+'.worldSpace[0]', currentCPOS+'.inputSurface')
  96.     cmds.connectAttr(ribbon_surface+'.worldSpace[0]', currentPOSI+'.inputSurface')
  97.     #Las coordenadas UV:
  98.     cmds.connectAttr(currentCPOS+'.parameterU', currentPOSI +'.parameterU')
  99.     cmds.connectAttr(currentCPOS+'.parameterV', currentPOSI +'.parameterV')    
  100.     #Conectar la posicion al grupo Attach:
  101.     cmds.connectAttr(currentPOSI+'.position', grupoAttach +'.translate')    
  102.  
  103.     #GrupoSDK con 0 0 0 en la posición del grupo Attach
  104.     cmds.select(cl =1)  
  105.     cmds.select(grupoAttach)  
  106.     grupoSDK = cmds.group(n='{0}_{1}_{2}_{3}_sdk'.format(side,zone,name,str(i)))
  107.     cmds.select(cl =1)
  108.     cmds.parent(grupoSDK, jnts)
  109.  
  110.     cpc = cmds.parentConstraint(sdk_jaw_loc, sdk_mouth_loc, grupoSDK, mo=1)[0]
  111.    
  112.     #Primer peso es jaw, segundo es mouth, si es el labio de abajo distribuirá de la siguiente manera:
  113.     if(labioInferior):
  114.         parentConstraintsToJaw.append(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[0]))
  115.         parentConstraintsToMouth.append(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[1]))
  116.         if(len(vtxs)%2 != 0):
  117.             #Si esta en la primera mitad y es impar:
  118.             if(i<=(len(vtxs)/2)):
  119.                 cmds.setAttr(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[0]),remap(0.0,len(vtxs)/2, 0.0,1.0, i) )
  120.                 cmds.setAttr(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[1]),1-remap(0.0,len(vtxs)/2, 0.0,1.0, i) )
  121.             else:
  122.                 cmds.setAttr(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[0]),1-remap(len(vtxs)/2,len(vtxs)-1, 0.0,1.0, i) )
  123.                 cmds.setAttr(cpc+'.'+(cmds.parentConstraint(cpc, q =True, wal=True)[1]),remap(len(vtxs)/2,len(vtxs)-1, 0.0,1.0, i) )
  124.  
  125.     cmds.delete(currentAuxGrp)
  126.     cmds.delete(currentCPOS)
  127.     cmds.select(cl=1)
  128.  
  129.  
  130.  
  131.  
  132. #Para los driven keys:
  133. cmds.select (cn_jaw_ctl)
  134. #Si existen los atributos, borralos
  135. if(cmds.attributeQuery('rightStickyLips',node=cn_jaw_ctl,exists =1 )): cmds.deleteAttr( cn_jaw_ctl, at='rightStickyLips' )
  136. if(cmds.attributeQuery('leftStickyLips',node=cn_jaw_ctl,exists =1 )): cmds.deleteAttr( cn_jaw_ctl, at='leftStickyLips' )
  137.  
  138. cmds.addAttr( shortName='leftStickyLips', longName='LeftStickyLips',keyable=1, defaultValue=0.0, minValue=0.0, maxValue=1.0)
  139. cmds.select(cl=1)
  140. cmds.select(cn_jaw_ctl)
  141. cmds.addAttr(shortName='rightStickyLips', longName='RightStickyLips',keyable=1, defaultValue=0.0, minValue=0.0, maxValue=1.0)
  142. cmds.select(cl=1)
  143.  
  144. #Siguiente paso aqui es poner los driven keys
  145. for i in range (len(vtxs)):
  146.     if(i<(len(vtxs)/2)):
  147.         #la primera mitad al attribute leftStickyLips del control de Jaw.
  148.         cmds.setAttr(cn_jaw_ctl + '.leftStickyLips', 0)
  149.         cmds.setDrivenKeyframe(parentConstraintsToJaw[i], currentDriver =cn_jaw_ctl + '.leftStickyLips')
  150.         cmds.setDrivenKeyframe(parentConstraintsToMouth[i], currentDriver =cn_jaw_ctl + '.leftStickyLips')
  151.  
  152.         cmds.setAttr(cn_jaw_ctl + '.leftStickyLips', 1)
  153.         cmds.setAttr(parentConstraintsToJaw[i],0)
  154.         cmds.setAttr(parentConstraintsToMouth[i],1)
  155.         cmds.setDrivenKeyframe(parentConstraintsToJaw[i], currentDriver =cn_jaw_ctl + '.leftStickyLips')
  156.         cmds.setDrivenKeyframe(parentConstraintsToMouth[i], currentDriver =cn_jaw_ctl + '.leftStickyLips')
  157.         cmds.setAttr(cn_jaw_ctl + '.leftStickyLips', 0)
  158.  
  159.     elif(i>(len(vtxs)/2)):
  160.         #la segunda mitad al attribute lrightStickyLips del control de Jaw.
  161.         cmds.setAttr(cn_jaw_ctl + '.rightStickyLips', 0)
  162.         cmds.setDrivenKeyframe(parentConstraintsToJaw[i], currentDriver =cn_jaw_ctl + '.rightStickyLips')
  163.         cmds.setDrivenKeyframe(parentConstraintsToMouth[i], currentDriver =cn_jaw_ctl + '.rightStickyLips')
  164.  
  165.         cmds.setAttr(cn_jaw_ctl + '.rightStickyLips', 1)
  166.         cmds.setAttr(parentConstraintsToJaw[i],0)
  167.         cmds.setAttr(parentConstraintsToMouth[i],1)
  168.         cmds.setDrivenKeyframe(parentConstraintsToJaw[i], currentDriver =cn_jaw_ctl + '.rightStickyLips')
  169.         cmds.setDrivenKeyframe(parentConstraintsToMouth[i], currentDriver =cn_jaw_ctl + '.rightStickyLips')
  170.         cmds.setAttr(cn_jaw_ctl + '.rightStickyLips', 0)
  171.        
  172.     elif(i==(len(vtxs)/2)):
  173.         #el del medio es especial, tiene que hacer la media entre ambos atributos. La media va a Mouth, y (1-media) a Jaw.
  174.         nodoMedia = cmds.createNode( 'plusMinusAverage')
  175.         cmds.setAttr(nodoMedia+'.operation', 3)#Operacion Average
  176.         cmds.connectAttr(cn_jaw_ctl + '.leftStickyLips', nodoMedia+'.input1D[0]')
  177.         cmds.connectAttr(cn_jaw_ctl + '.rightStickyLips', nodoMedia+'.input1D[1]')
  178.  
  179.         unoMenos = cmds.createNode( 'plusMinusAverage')
  180.         cmds.setAttr(unoMenos+'.operation', 2)#Operacion minus
  181.  
  182.         cmds.connectAttr(nodoMedia+'.output1D', parentConstraintsToMouth[i])
  183.         cmds.connectAttr(nodoMedia+'.output1D', unoMenos+'.input1D[1]')
  184.         cmds.setAttr(unoMenos+'.input1D[0]', 1)#Operacion minus
  185.         cmds.connectAttr(unoMenos+'.output1D',parentConstraintsToJaw[i] )
  186.  
  187. print('DONE')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement