http://vimeo.com/49353110[/vimeo]
MAX no cuenta con follicles (por lo que se) así que no podemos hacer uso de las potentes coordenadas UV en un espacio XYZ


Estaba pensando en dejar de lado el llamado al controlador Euler y llamar a la rotacion del objeto en sí (del tipo Quat) para así añadir controllers (un orientation list) a los Shapes de control ya que con un orientation constraint + Euler XYZ se puede hacer que reaccionen a las rotaciones del otro. El problema se resume al comportamiento de los controles, ya que ofrecen una experiencia de animación poco intuitiva.
Para que trasteen el rig en forma automatizada les dejo el script (por ahí que me lo mejoran con un autorig

Código: Seleccionar todo
vfkArray = $*fk* as array
maxindex = 1
totalJoints = 1 as float
for theNull in vfkArray do (
temp = filterString (theNull.name as string) "_"
jointTemp = substring temp[1] 6 3
j = jointTemp as integer
index = temp[3] as integer
if index >= maxindex do (
maxindex = index
)
if j >= totalJoints do (
totalJoints = j+1 as float
)
)
for i = 1 to maxindex do (
for theNull in vfkArray do(
temp = filterString (theNull.name as string) "_"
index = temp[3] as integer
jointTemp = substring temp[1] 6 3
jo = jointTemp as float
if index == i do (
theScript = rotation_script()
theNull.rotation.controller = theScript
theCtrl = execute ("$trunkCtrl_0" + i as string + "_shp")
-- CustomAtt = custAttributes.get theCtrl[4][1] 1
joPos = ((jo-1.0)/(totalJoints-1.0)) as float
theScript.AddConstant "allJnt" totalJoints
theScript.AddConstant "jointPos" joPos
theScript.AddNode "theCtrl" theCtrl
theScript.AddTarget "ctrlPos" theCtrl.modifiers[1].location.controller
theScript.AddTarget "ctrlFalloff" theCtrl.modifiers[1].falloff.controller
txt = "(\n"
txt += "p=ctrlPos*0.01\n"
txt += "f=ctrlFalloff*0.01\n"
txt += "if ((p-f)<jointPos) and (jointPos<(p+f)) then (\n"
txt += "if p>jointPos then falloffPos=(p-f) else falloffPos=(p+f)\n"
txt += "tempMult = (jointPos-falloffPos)/(p-falloffPos)\n"
txt += "numJnt = 2*f*allJnt\n"
txt += "rotationMult = tempMult*(2/numJnt)\n"
txt += "x = rotationMult*theCtrl.rotation.controller.x_rotation\n"
txt += "y = rotationMult*theCtrl.rotation.controller.y_rotation\n"
txt += "z = rotationMult*theCtrl.rotation.controller.z_rotation\n"
txt += "rot = eulerAngles x y z\n"
txt += ")\n"
txt += "else rot = eulerAngles 0 0 0\n"
txt += ")\n"
txt += "eulerToQuat rot\n"
theScript.setExpression txt
)
)
)
