A ver si me dan algunas luces con este rig

Cuestiones sobre el Rig de Personajes 3D

Moderadores: David, Tutores

kthalas
Mensajes: 4
Registrado: Mié Oct 06, 2010 10:21 pm

A ver si me dan algunas luces con este rig

Mensajepor kthalas » Dom Sep 22, 2013 5:03 am

Estoy tratando de recrear un rig de maya en max, este es el rig en cuestión: http://vimeo.com/49353110 (creo que no se pueden ver videos en el foro)

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 :( (la herramienta de MAX, surface constraint no puede seguir superficies NURBS deformadas con modificadores) Sin embargo tenemos al querido Path constraint que nos viene bien. Ahora tengo el Rig armado (documento adjunto) pero no logro hacer que obtenga el comportamiento "FK" del video. Si activamos el "Follow" en el Helper que recorre el Path obtenemos "transformaciones dobles" en el shape de control :@ .

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 :D ) :

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 ) ) )
Bueno pues eso, me he topado con una pared :(
Adjuntos
trunk.rar
(26.41 KiB) Descargado 223 veces

Volver a “Rigging de Personajes 3D”

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 1 invitado