Usar Interconexión y Spinners para controlar los dedos.
 

Paso 1
Todo lo que puedas hacer para facilitar la tarea de animación de un personaje estará bien hecho. Usar sliders o spinners para controlar la rotación de ciertos huesos es una de las cosas que hace que el proceso de animación más sencillo. La ayuda que estos te brindan consiste en que no tienes que ir haciendo zooms y seleccionar cada hueso individual cada vez que quieres mover la mano. Todo lo que tienes que hacer es pinchar en el objeto control del brazo, y variar los valores de los spinners o sliders para obtener el movimiento que estamos buscando.

Lo primero que debes saber es que éste es un proceso laborioso, pero el esfuerzo que hacemos para con la construcción compensa al final. No obstante, hay un script que escribió Michael Comet que hace este proceso mucho más rápido. Hasta ahora no he recomendado el uso de ningún plug in de terceros o script porque creo que debes saber cómo crear estos "rigs" sin necesidad de recurrir a herramientas externas a Max. Pero esta vez haré una excepción porque este script no hace el trabajo por tí, sólamente acelera bastante el proceso. Entraré en más detalle cuando lleguemos al punto correspondiente.

Así pues, empezaremos con la construcción de mano del último tutorial. Para empezar, añade un ayudante Point a la escena. Éste será el IK Goal u objeto Helper al que normalmente asociarías la mano cuando estás construyendo el brazo.

Paso 2
Alínea el ayudante con la base de la palma.

Paso 3
Con el ayudante aún seleccionado, añadiremos los Custom Attributes (CA's) que controlarán en última instancia los dedos. Abre la ventana Custom Attribute.

Paso 4
Usaremos los mismos parámetros, excepto los nombres, para todos los CA's. Mira debajo para saber cómo configurar el primero. Puedes usar un spinner o un slider, pero yo prefiero los segundos, aunque no afecta para nada al modo de trabajar. Al primero, le llamaremos Index Curl, y le daremos un rango de 0 a 10. Controlará la curvatura del dedo índice. Pincha en el botón Add en la parte inferior de la ventana cuando estés seguro de los parámetros, pero no la cierres.

Paso 5
Añade los otros CA's de la misma manera. Los nombres se muestran abajo. No olvides pinchar Add después de cada uno. Cierra la ventana cuando los tengas todos. Si lo has hecho todo bien, deben aparecer todos los spinners en la pestala Modify del objeto ayudante.

Paso 6
Siempre es una buena idea renombrar tus huesos de algún modo en el que puedas reconocerlos a medida que trabajas con ellos. Debajo está la lista de todos los huesos en la escena, y del nombre que les he dado. Bone 01 es el que está más cerca del nudillo, y Bone 03, el que está en la punta.

Paso 7
Ahora viene la parte más tediosa. Necesitamos un List Controller en Z Rotation Axis (eje Z de rotación) de cada uno de los huesos de los cuatro dedos, y no del pulgar.Ve a la pestaña Motion, expande Rotation Controller, ilumina el eje Z, pincha en el botón Assign Controller, y elige Float List. La razón es que vamos a tener dos spinners para controlar la rotación en el eje Z: uno para la curvatura de cada dedo y otro para abrir y cerrar la mano. Si no añadimos List Controller, cuando hagamos la interconexión conel segundo spinner, se desconectará el primero, y no tendrá uso alguno.

Paso 8
Bien, aquí es donde el Michael Comet's WireConnect script puede echarnos una mano. Pincha en el enlace para descargarlo. Recomiendo descargarse el pack entero y leer las instrucciones para saber cómo instalarlos.

Lo que hace este scripts es permitir hacer la interconexión en una sóla ventana sin tener que estar pinchando con el botón derecho todo el rato y navegando por los submenús de cada hueso. Esto nos va a ahorrar muchísimo tiempo. Hay un par de cosas a tener en cuenta cuando se usa este script. Primero, estate atento cuando selecciones en las ventanas MASTER y SLAVE. La interconexión se completa inmediatemente después de seleccionar algo en MASTER y en SLAVE. Así que si accidentalmentepinchas x_rotation cuando querías hacerlo en y_rotation, tendrás que desmontarlo todo "a la manera tradicional". Ve con cuidado dónde pinchas. Lo segundo es que tienes que darle a la tecla Tab de tu teclado para que los cambios en la expresión de la interconexión tengan efecto.

Ahora, lo que tienes que hacer es pinchar en el botón MASTER y seleccionar el ayudante Point. Luego pincha en el botón SLAVE y selecciona el hueso que quieres interconectar con Point. Empezarmos con el hueso de la base del dedo índice, con nombre BoneIndex01. Busca en la lista de MASTER la categoría ( OBJECT_POINT_HELPER: CUSTOM_ATTRIBUTES ). Debajo hay una lista con los CA's que hemos creado. Selecciona Index_Curl. Ahora busca la cabecera ( Z_ROTATION ) en la ventana SLAVE, y selecciona bezier_float. Puedes ver también el item available debajo de bezier_float, que fue creado cuando añadimos el List Controller anteriormente. Usaremos Available dentro de un ratillo. En el aparado para las expresiones, cambiamos lo que hay por -(degtorad(index_curl)*9); (asegúrate de poner el signo "menos" delante, para hacer que el dedo gire hacia abajo y no hacia arriba) y pulsa la tecla Tab para actualizar la interconexión. En este momento debes de poner cambiar los números en el CA Index Curl que creamos antes y ver cómo el dedo índice rota arriba y abajo.

Ahora sigue los mismos pasos para los siguientes huesos. No te preocupes por el pulgar, porque lo montaremos después. Aquí hay una lista de cómo interconectar los distintos huesos de los dedos:

Point01 --> index_curl --> BoneIndex01 --> Z_ROTATION --> bezier_float --> -(degtorad(index_curl)*9);
Point01 --> index_curl --> BoneIndex02 --> Z_ROTATION --> bezier_float --> -(degtorad(index_curl)*11);
Point01 --> index_curl --> BoneIndex03 --> Z_ROTATION --> bezier_float --> -(degtorad(index_curl)*7);
Point01 --> middle_curl --> BoneMiddle01 --> Z_ROTATION --> bezier_float --> -(degtorad(middle_curl)*9);
Point01 --> middle_curl --> BoneMiddle02 --> Z_ROTATION --> bezier_float --> -(degtorad(middle_curl)*11);
Point01 --> middle_curl --> BoneMiddle03 --> Z_ROTATION --> bezier_float --> -(degtorad(middle_curl)*7);
Point01 --> ring_curl --> BoneRing01 --> Z_ROTATION --> bezier_float --> -(degtorad(ring_curl)*9);
Point01 --> ring_curl --> BoneRing02 --> Z_ROTATION --> bezier_float --> -(degtorad(ring_curl)*11);
Point01 --> ring_curl --> BoneRing03 --> Z_ROTATION --> bezier_float --> -(degtorad(ring_curl)*7);
Point01 --> pinky_curl --> BonePinky01 --> Z_ROTATION --> bezier_float --> -(degtorad(pinky_curl)*9);
Point01 --> pinky_curl --> BonePinky02 --> Z_ROTATION --> bezier_float --> -(degtorad(pinky_curl)*11);
Point01 --> pinky_curl --> BonePinky03 --> Z_ROTATION --> bezier_float --> -(degtorad(pinky_curl)*7);

Paso 9
No ha ido tan mal después de todo, ¿no? Sé que es una tarea muy pesada (Nota del traductor: que me lo digan a mí :S). Pero si lo has hecho todo bien, los "Curl spinners" deberán doblar los dedos arriba y abajo.

Ahora, el pulgar. Antes que nada debemos hacerle un pequeño ajuste. Si te fijas en el tuyo, verás que está rotado longitudinalmente comparado con los otros dedos. Así que necesitamos rotar la base del pulgar para que se comporte de una manera más realista. Rótalo unos -60 grados a lo largo de su eje local X.

Paso 10
Sigue los mismos pasos que con los otros dedos. Aquí tienes la descripción:

Point01 --> thumb_curl --> BoneThumb01 --> z_rotation --> -(degtorad(thumb_curl)*4);
Point01 --> thumb_curl --> BoneThumb02 --> z_rotation --> -(degtorad(thumb_curl)*4);
Point01 --> thumb_curl --> BoneThumb03 --> z_rotation --> -(degtorad(thumb_curl)*4);

Paso 11
En este momento todos los dedos y el pulgar deben funcionar correctamente. Ya no es necesario mover directamente los huesos para obtener casi cualquier pose. Ahora añadiremos un par más de interconexiones para hacerlo todo aún más sencillo. Hay muchas ocasiones en que quieres doblar todos los dedos a la vez, ¿no? Pues vamos a hacer que el spinner Fist haga precisamente eso.

Y la descripción de los parámetros...:

Point01 --> fist --> BoneIndex01 --> Z_ROTATION --> available --> -(degtorad(fist)*9);
Point01 --> fist --> BoneIndex02 --> Z_ROTATION --> available --> -(degtorad(fist)*11);
Point01 --> fist --> BoneIndex03 --> Z_ROTATION --> available --> -(degtorad(fist)*7);
Point01 --> fist --> BoneMiddle01 --> Z_ROTATION --> available --> -(degtorad(fist)*9);
Point01 --> fist --> BoneMiddle02 --> Z_ROTATION --> available --> -(degtorad(fist)*11);
Point01 --> fist --> BoneMiddle03 --> Z_ROTATION --> available --> -(degtorad(fist)*7);
Point01 --> fist --> BoneRing01 --> Z_ROTATION --> available --> -(degtorad(fist)*9);
Point01 --> fist --> BoneRing02 --> Z_ROTATION --> available --> -(degtorad(fist)*11);
Point01 --> fist --> BoneRing03 --> Z_ROTATION --> available --> -(degtorad(fist)*7);
Point01 --> fist --> BonePinky01 --> Z_ROTATION --> available --> -(degtorad(fist)*9);
Point01 --> fist --> BonePinky02 --> Z_ROTATION --> available --> -(degtorad(fist)*11);
Point01 --> fist --> BonePinky03 --> Z_ROTATION --> available --> -(degtorad(fist)*7);

Paso 12
Configuramos un spinner más, Spread, que nos va a servir para poder separar ligeramente los dedos unos de otros un poquillo.

La descripción, aquí debajo:

Point01 --> finger_spread --> BoneIndex01 --> y_rotation --> (degtorad(finger_spread)*1);
Point01 --> finger_spread --> BoneMiddle01 --> y_rotation --> (degtorad(finger_spread)*.5);
Point01 --> finger_spread --> BoneRing01 --> y_rotation --> -(degtorad(finger_spread)*.5);
Point01 --> finger_spread --> BonePinky01 --> y_rotation --> -(degtorad(finger_spread)*1);
Point01 --> finger_spread --> BoneThumb01 --> y_rotation --> (degtorad(finger_spread)*3);

Paso 13
Ya está todo preparado y listo para animar.

Hay un par de cosas que me gustaría comentar. Por ejemplo, los números que he usado como multiplicadores en las expresiones, como 9,11, 7, etc. son totalmente arbitrarios. Estos son los que creo que funcionarán bien con mi "rig". Puedes cambiarlos a cualquier valor que creas conveniente para tu modelo. Otras cosas también pueden cambiarse, como el usar spinners o sliders, los valores iniciales y finales (rango), etc. Lo bueno de esto es que es totalmente configurable. Juega con los parámetros para comprobar cuáles son los que te vienen mejor.

Otra cosa que puedes hacer es añadir un controlador Bezier Float en el slot Available de Z Rotation, en cada articulación de los dedos, para poder mover los dedos manualmente si deseas hacerlo. Ve al Paso 7 para recordar cómo añadir un controlador. Una vez añadido Bezier Float, necesitas activarlo, porque si no no ocurrirá nada cuando quieras rotar el dedo manualmente. Para ello pincha con el botómn derecho del ratón en Z Rotation del árbol del controlador y elige Properties. Ahora pincha en Bezier Float y luego en el botón Set Active. La flecha se moverá al lado de Bezier Float para indicar que está activo.

Si quieres volverte loco con esto puedes construir más CA's para controlar sólo los dos segmentos de la punta de los dedos. De este modo puedes rotarlos independientemente del segmento de la base para obtener más control. Prueba a doblar tu propio dedo para comprobar las muchas maneras que hay de hacerlo. Intenta configurar tus controles para emular lo que podrías hacer con un dedo real.

Pincha aquí para ir a la siguiente técnica...

Pincha aquí para volver a la página "Manos"...