Friday, August 22, 2008

Conectando todo

1. Creamos dos nuevos controladores para el WORLD en forma de flecha y otro para colocar al personaje en la escena:



2. Conectamos los 3 sistemas de las piernas al pelvis. Agrupamos la pelvis asi misma y cambiamos su pivote al primer joint de la espina:



3. Creamos un LOCATOR y lo llamamos rollSolver, lo podemos dejar donde esta o se puede trasladar detrás del personaje.
Seleccionamos la curva del IK SPLINE de la espina y en Advance Twist Control copiamos el nombre del locator en WORLD UP OBJECT y activamos la opción de OBJECT UP.




4. CONSTRAIN PARENT entre el controlador de la base de la espina IK y el grupo de la pelvis.



5. CONSTRAIN PARENT entre el grupo del controlador FK de la pierna (el controlador superior) y el joint de la pelvis.

6. Parenteamos el rollSolver al grupo del controlador del la base de la espina FK.

7. Parenteamos los controladores del ELBOW al controlador de la base de la espina FK.

8. Los cinco grupos de las 5 partes del rig (Piernas derecha e izquierdas, brazos derecho e izquierdos y la espina) deben ir parenteados al controlador del WORLD.



9. Al final deben quedar 3 grupos, el del mesh, los joints y los controladores:



Ahora el rig debe funcionar correctamente y se procede con la etapa de weight painting.

Sistema Espina IK/FK

1. Creamos los joints del IK, utilizamos alrededor de 5 o 6 (esto depende de la especificaciones de su modelo) generalmente se usan más joints para espinas más realistas. Y además creamos los joints del cuello, yo utilizé 3, estos se encuentran a menor distancia uno del otro en comparación a los de la espina:


NOTA: Recuerde utilizar el side view para crear estos joints para que la translación se mantenga en 0.

2. Orientamos los joints.

3. Ahora con la herramienta IK Handle Spline Tool creamos una curva del joint base de la espina hasta el primer joint del cuello con las opciones seleccionadas a continuación:



4. A cada vértice de la espina le asignamos un cluster. En total tienen que crear 5:



5. Ahora creamos los controladores de la espina. Uno para el joint base de la espina y otro para el último joint de espina (el joint antes del cuello). Recuerde mover el grupo del controlador con un parent constrain, no el controlador.

6. Hacemos un parent con P tomando los dos clusters superiores con el control superior y otro parent entre los dos clusters inferiores con el control inferior.

7. El cluster del medio es parenteado a ambos controladores con un PARENT CONSTRAIN (con mantain offset) tomando el controlador y después el cluster.

8. Ahora creamos el sistema FK, este tiene sólo 4 joints, podemos crearlos snapeando los joints a la curva del IK SPLINE para mejores resultados. Recuerde orientar los joints.



9. Creamos 3 nuevos controladores FK en los primeros 3 joints de la espina FK como se enseña anteriormente. Recuerde mover el grupo de los controladores (con un parent constrain sin mantain offset, borre el constrain después.) , no el controlador.

10. Seleccionar el controlador y después el joint y crear un PARENT CONSTRAIN con mantain offset. Parentear los controladores de la siguiente manera:



11. Hacer un PARENT CONSTRAIN entre el primer Joint de la espina FK y el grupo de la Curva de la base del IK. Repetir este mismo paso para el último joint de la espina FK y el grupo de la curva (o controlador) de la espina IK.

12. Creamos un Stretchy Spine:

a) Seleccionamos el Multiply/Divide, el CurveInfo (que se crea con el comando: "arclen -ch on (nombre de la curva);") más la Curva del IK se debe desplegar todo en el Hypergraph.

b) Cambiamos la opción MULTIPLY por DIVIDE en el nodo del Multiply/Divide, y copiamos el valor del INPUT al INPUT 2:



c) En el CONNECTION EDITOR abrimos el nodo de Multiply/Divide en los OUPUTS y los Joints en los INPUTS. En los OUTPUTS desplegamos OUTPUT y seleccionamos OUTPUT X y en los INPUTS desplegamos SCALE y seleccionamos SCALE X. Repetimos esto con todos los joints de la espina IK.

13. Crear una expresión para el twist del IK:

Expresión:
ikHandleSpine.twist = (Fk_SpineAControl.rotateX + Fk_SpineBControl.rotateX + Fk_SpineCControl.rotateX + IkSpineTop_Control.rotateX);

Recuerde usar los nombres de sus controladores, no la de los joints.


14. Crear el controlador de la cabeza y pivotearlo al primer joint del cuello. De esta manera:



15. Creamos un PARENT CONSTRAIN entre el controlador de la cabeza y el primer joint del cuello, después parenteamos el controlador al controlador IK de la espina (el controlador superior).

Clavículas:

16. Creamos unos controladores para las clavículas, como lo hacemos siempre, PARENT CONSTRAIN entre el controlador y el joint de la clavícula.

17. Ahora creamos PARENT CONSTRAIN entre el Joint de la espina IK (el que se encuentre más cerca al controlador de la clavícula, a una altura similar) y el grupo del controlador de la clavícula.

18. Después parenteamos los joints de los hombros de los sistemas IK, FK y BIND al joint de la clavícula.

19. Creamos un PARENT CONSTRAIN entre el joint de la clavícula y el Grupo del controlador del hombro FK.

Sistema FK y BIND - Brazos

FK:

1. Duplicamos los joints del Ik DOS VECES (pero solo de un lado) y le cambiamos los nombres a FK y BIND. Revisamos las orientaciones.

2. Creamos los Joints de la mano, según las especificaciones de su diseño y geometría. Se conectan al HAND del BIND.



TIP: Asegúrese de que las orientaciones sean perpendiculares a sus dedos. Haga pruebas de rotación en Z para probar si sus dedos se van a contraer y expandir en conjunto correctamente.

3. Ahora haga un mirror a ambos sistemas. (Necesita crear un joint en el centro, x = 0, y conectar ambos sistemas a este para que el mirror funcione correctamente)

4. Se crean los controladores del FK de la misma manera que lo hicimos para la pierna. Recuerde mantener una jerarquía de grupo > controlador.

a) Se crean los controladores y se agrupan así mismos.
b) Se hace un PARENT CONSTRAIN sin mantain offset entre el joint y el GRUPO del controlador.
c) Se borra el constrain.
d) Se modifica la curva alterando los CONTROL VERTEX a su gusto.
e) Constrain PARENT entre el controlador y joint con mantain offset.

5. Ahora creamos un nuevo controlador para la mano del BIND. La trasladamos a la parte superior de la mano, moviendo el GRUPO.




6. Parenteamos el GRUPO del controlador al HAND joint del BIND.

7. Ahora creamos atributos para este controlador iguales a los que usamos para la pierna IK, como el Spread y conectamos el controlador a los joints con el SET DRIVEN KEY.

*Sin embargo yo utilizé un sistema FK para los dedos, haciendo un controlador para cada articulación y creando un parent constrain entre el controlador y el joint. Ya que para requisitos de mi animacíón necesitaba de una mano un poco más flexible.

También se puede optar por la opción de crear más atributos al Hand Control pero al final pueden ser demasiados atributos y resulta confuso. En fin, es una cuestión de gusto y funcionalidad.



8. Parenteamos los grupos de los controles de los dedos al controlador de la mano.

SWITCH IK/FK:

Creamos un atributo de IK/FK en el controlador de la mano, creamos los orient constrains entre los sistema IK y FK con el sistema BIND y hacemos las conexiones en el SET DRIVEN KEY al igual que lo hicimos para las piernas.

IMPORTANTE: Recuerde que el atributo IK/FK tiene un mínimo de 0 y un máximo de 10.

Sistema IK - Brazos

IK:

1. Primero creamos los joints en BLANCO como se ve en la imagen.

2. Utilizamos el side view y front view para posicionar correctamente los joints en el espacio virtual. Preferiblemente los joints deben ir en la mitad de la geometría. Y recuerde mantener una curva entre shoulder y el wrist joint para efectos de IK. También el hand debe ir perependicular a al mano.

3. Con un duplicate creamos los joints en anaranjado que corresponden al Forearm que duplicamos del ELBOW y al Hand Joint que duplicamos del WRIST , esto se hace de esta manera para conservar la orientación. Movemos estos joints con la opción de OBJECT activado en los move settings. El forearm cumplirá la función suprinación y pronación del brazo.

(Recuerde organizar la jerarquía después de crear los duplicates).


(a)

4. Orientamos los joints con la opción Orient Joints.

NOTA: La orientación no es igual para todos los joints. Observe la imagen (a), fíjese en las diferentes orientaciones. Es importante que estas orientaciones queden perpendiculares a su respectivo mesh.

5. Desconecte los joints del joint de la clavícula. Ya que este no será incluido dentro de los los sistemas. Al final todos los sistemas serán conectados a este.

6. Creamos una nueva curva, le damos una forma diferente alterando los control vertex para no confundirlos con los FK y la agrupamos. La trasladamos por medio de un parent constrain sin mantain offset tomando el joint del WRIST y luego el GRUPO de la curva de la siguiente manera:


(b)

7. Acomodamos el controlador alterando los CONTROL VERTEX para no alterar su orientación.

8. Creamos un Ik handle con RP Solver del shoulder al forearm, después nos vamos a la opción de Evaluate Nodes > Ignore ALL.

9. Movemos los pivotes del IK HANDLE y del EFFECTOR al WRIST.


(c)

10. Evaluate Nodes > Evaluate ALL

11. Después creamos un ORIENT CONSTRAIN con mantain offset entre el CONTROLADOR y el joint del WRIST, también con la opción ALL activada.

12. Otro ORIENT CONSTRAIN entre el CONTROLADOR y el FOREARM pero sólo con la opción de constrain axis en X.

ELBOW:

13. Ahora creamos un uevo controlador para el ELBOW de la misma forma que el controlador del IK y lo trasladamos cerca del codo de la siguiente manera:


(d)

14. La curva mas el IK y creamos un Constraint/Pole Vector.

Y ya tenemos un sistema IK terminado.

Switch IK/FK Piernas

Para poder manipular un controlador u otro según lo desee el animador debemos crear un switch IK/FK.

1. Hacemos un orient constrain de TODOS los joints del "IK con el BIND" y del "FK con el BIND", obviamente no hay ninguna conexión con los joints adicionales del BIND que creamos anteriormente.

ej.
FK_hip > BIND_hip
IK_hip > BIND_hip

2. Hacemos los keys en el SET DRIVEN KEY de la siguiente manera:



Ahora el IK/FK switch está listo.

TIP: Si tiene algúna clase de flip en los joints del BIND cuando cambia de un sistema a otro, revise las orientaciones de los sitemas, especialmente los del forearm y wrist del BIND, tambien revise los OFFSET de los orient constrains creados para el switch, si tienen numeros como -180, 360, entre otros, traté de volverlos a 0. Generalmente los offset deberían de estar en 0 (pero a veces hay excepciones, como en el forearm). Si tiene un lado que funciona bien y el otro no, compare los números. También puede optar por cambiar la opción de AVERAGE en los orient constrains a SMALLEST DISTANCE, o el que funcione mejor. Si ninguno de estos funciona probablemente tenga que rehacer su sistema. Esto va para ambos sistemas, tanto de piernas como brazos.

Thursday, August 21, 2008

Sistema BIND - Piernas

BIND:

1. Duplicamos el sistema FK y cambiamos nombres a BIND.

2. Creamos dos joints más duplicando el hip y moviéndolo con la opción de LOCAL o creando una curva entre el joint HIP y el joint Knee y snapeandolo con C. Y jerarquisamos en el hypergraph. Los joints deben ser duplicados del hip para mantener la misma orientación. Los joints deben de ser colocados de la siguiente manera:




3. Colocamos los joints de los pies de la siguiente manera:



4. Los orientamos con la opción ORIENT JOINTS.

5. Y se "parentean" al joint del TOE.

Sistema FK - Piernas

FK:

1. Duplicamos los Joints del IK, le cambiamos los nombres y le borramos los efectors. No hay necesidad de duplicar el joint de la pelvis ya que al final sólo necesitaremos de un solo joint para conectar los 3 sistemas.

2. Ahora creamos una curva simple (default) que sera nuestro controlador, la agrupamos así misma, y trasladamos el GRUPO para así mantener los valores del controlador en 0.

3. Para transladar el grupo al joint tomamos el joint primero y luego el GRUPO del controlador y le damos un PARENT CONSTRAIN sin mantain offset (para que se traslade). Después borramos el constrain en el hypergraph y con los control vertex de la curva rotamos o escalamos el controlador.

Nota: no rotar, mover o escalar el controlador DIRECTAMENTE para no perder su orientación con el joint. Para eso modificamos los control vertex. Personalmenete utilizo las opciones de snap rotate o scale Relative para facilitar el trabajo.

4. Ahora tomamos el controlador y después el joint y creamos un PARENT CONSTRAIN con mantain offset.

5. Debemos repetir este proceso para estos joints: Hip, Knee y ankle = 3 controladores FK.

6. En el hypergraph creamos una jerarquía de Grupo > Joint > Grupo > Joint... etc. para estos controladores, osea: el Hip será el padre del knee, el knee del ankle. Como lo vemos en la imagen:


Hacemos esto para que los controladores roten juntos, de lo contrario NO funcionaría.

Pole Vector

Ahora crearemos un vector que nos permita controlar la rodilla del IK, este sistema es conocido como un NO FLIP KNEE.

1. Duplicamos el sistema de joints para usarlo de referencia. Se borran los efectors.

2. Se cambian los valores del Ik handle a los siguientes:

Pole Vector X: 0.1
Pole Vector Y: 0
Pole Vector Z: 0

3. Se selecciona el Twist en el ikHandle y regresamos la rodilla a su posición original. (para eso usamos los joints duplicados como referencia)

4. En el hypershade creamos un +- Average (en utilities) y lo conectamos de la siguiente manera en el hypergraph al controlador:



5. Ahora al atributo de offset se le digita 90 para que la rodilla regrese a su posición y ocultamos este atributo con LOCK AND HIDE.

6. Se borran los joints duplicados.

Atributos para Control IK



Ahora creamos unos atributos para el control IK:

1. Para controlar movimientos de la pierna IK:

Lift Heel
Twist Heel
Twist Toe
Toe Tap
Stand Tip

y los conectamos a los grupos creados anteriormente por medio del SET DRIVEN KEY:

Lift Heel: rotacion X del grupo Toe
Twist Heel: rotación Y del grupo Ankle
Twist Toe: rotación Y del grupo Toe
Toe Tap: rotación X del grupo Ball 2
Stand Tip: rotación X del grupo Ball 1


2. para los dedos:

Toe Spread
Toe Curl
Big Toe Curl

-Con el SET DRIVEN KEY conectamos estos atributos con LOAD DRIVER (controlador IK) y LOAD DRIVEN (respectivos joints).

Conectamos:

TOE SPREAD a la rotación de los joints (de los dedos) en Y.
TOE CURL a la rotación Z.
BIG TOE CURL a la rotación Z únicamente del dedo Gordo.


3. para el pole vector:

Knee
offset

4. finalmente, para el switch:

IkFk

Controladores IK


Ahora creamos una curva a la que le daremos forma de pie alterando sus CONTROL VERTEX para ser usada como el controlador del IK.

PARA MOVER CURVAS EN EL ESPACIO VIRTUAL: Siempre es 99% recomendable agrupar los controladores para así mover el grupo y no el controlador. Con esto conseguimos que los atributos de los controladores permanezcan siempre en 0.


- A continuación creamos una serie de grupos con diferentes pivotes como lo muestra la imagen. Para cambiar el pivote de un grupo (u objeto) utilizamos la tecla INSERT y para hacer un snap usamos C para "snapear" a una curva, V para superficies como poligonos o joints entre otros o X si se quiere snapear a la grilla. En este caso utilizaremos V para snapear los pivotes a los joints.

Ik handles


Utilizamos la herramienta IK HANDLE TOOL y para crear un comportamiento IK de los joints. El primero va del joint HIP al joint ANKLE. Utilizamos la opción de IkRpSolver porque son más de 2 joints.

También asegúrese de que las opciones SOLVER ENABLE, SNAP ENABLE y STICKY este activadas.

NOTA: es normal que los joints cambien sus rotaciones o translaciones al crear el Ik.


-Ahora creamos dos nuevos Ik handles:

1.ANKLE al BALL

2.BALL al TOE

-Recuerde cambiar el solver a SC-SOLVER, ya que se trata de una conexión entre sólo 2 joints.

Sistema de Piernas IK


Primero empezaremos por el sistema IK de los brazos:

- Crear los joints del hip, knee, ankle, ball y toe.

- Orientar los Joints con la opción ORIENT JOINTS. Recuerde activar la opción de Orient child Joints.


TIPs:
-Utilize la vista frontal y lateral para posicionar los joints.

-No deje joints en linea recta, trate de formar una curva, especialmente entre el joint del hip y del ankle para que el IK se doble correctamente.

-Si desea mover UN SOLO joint sin afectar la translación de los demás presione INSERT en el teclado para mover el joint libremente.

-Crear el sistema derecho e izquierdo paralelamente para evitar que los joints tengan diferentes rotaciones o translaciones.

IMPORTANTE: Recuerde nombrar todos los joints, controladores, mesh y practicamente todo dentro de su escena. Es importante mantener un orden ya que la escena se vuelve muy compleja más adelante, además puede que necesite esos nombres para crear expresiones y así no se complicará la vida.

Preparaciones


Antes de empezar asegúrese de que su geometría tenga sus normales suavizadas. Programas como Zbrush tienden a endurecer las normales de los mesh, lo que podría afectar el desempeño del Rig.

Además es importante definir una escala para que su personaje mantenga una relación con otros elementos dentro de una escena como por ejemplo otros personajes ya que una vez creado el RIG es dificil escalar el mesh y puede traer problemas en el futuro.