Esqueletos avanzados y anl
esqueletos avanzados y ANL
Por: Carlos González morcillo.

La animación de personajes digitales requiere definir un esqueleto interno al que aplicaremos cinemática inversa para calcular la posición de todas las articulaciones. Éstas generaran unas deformaciones que habrá que trasladar a la malla del modelo 3d. Por último, se aplicará un movimiento al esqueleto, construyendo una secuencia de animación.
Así pues, en esta sesión identificamos dos objetivos, en primer lugar, construir un esqueleto para nuestro personaje, que asociaremos a una malla. Indicaremos a Blender que vértices de la malla tendrá que deformar junto al esqueleto. En segundo lugar, construiremos una secuencia de animación para el esqueleto. Podremos realizar esta secuencia mediante la técnica de animación lineal empleada en sesiones anteriores, definiendo la posición de todos los puntos finales (IK Solver) en cada frame clave, o bien definiendo acciones en el módulo de animación no lineal. Utilizaremos esta segunda alternativa, mucho más cómoda para construir animaciones complejas.
Primera parte: construcción del esqueleto.
Antes de definir el esqueleto del modelo creado en la práctica anterior, veamos cómo asociar un armature a una malla de polígonos, y la convención de nombrado que utiliza Blender. Comencemos con un ejemplo sencillo, arrancamos Blender, eliminamos el plano por defecto e insertamos un cubo. Extrusiónamos la cara lateral y, activando las superficies de subdivisión, construimos una malla como la mostrada en la figura 1.

Añadimos un armature formado por 3 huesos principales (hueso1, hueso2, hueso3) y un cuarto hueso pequeño que utilizaremos para resolver la cinemática inversa (huesonull). Con el esqueleto todavía en modo de edición de huesos (color rosa oscuro, accedemos con tab), añadiremos un quinto hueso (independiente de los anteriores, aunque forma parte del esqueleto), que utilizaremos para calcular la cinemática inversa (huesoik). Obtendremos una configuración similar a la figura 2.

Es importante que todos los huesos formen parte de un único objeto armature. Por tanto, cuando añadamos nuevos huesos al esqueleto, lo haremos siempre desde el modo de edición del objeto. Podemos activar la representación del nombre de cada hueso pinchando en el botón draw names de los botones de edición (f9). Nombraremos los huesos cómo se explicó en la práctica 7, y añadiremos una restricción (en modo postura del esqueleto, control + tab) de tipo IK Solver al huesonull con objetivo en huesoik. Ahora podemos mover (en modo pose) huesoik, y el resto del esqueleto se calculara de forma automática mediante cinemática inversa.
Falta por indicar a Blender cómo deformar la malla. Para ello, crearemos grupos de vértices con el mismo nombre que los huesos del esqueleto. Asociaremos a cada conjunto de vértices un hueso de los anteriores. Entramos en modo de edición de vértices del objeto y seleccionamos el grupo de vértices que están situados sobre el hueso1 (ver figura 3).

En los botones de edición (f9), crearemos un nuevo grupo de vértices (pinchamos en new). Tecleamos el nombre del primer hueso y, con los vértices del primer hueso seleccionados, pinchamos en assing. Si nos equivocamos al asignar vértices, podemos quitar los erróneos con remove. El botón select sirve para mostrar los vértices seleccionados de un grupo y deselect para deseleccionar los vértices del grupo. Creamos un grupo para cada hueso y asignaremos los vértices que se muestran en la figura 3. Si nos fijamos, hay vértices que pertenecen a dos grupos. Es buena práctica que los vértices situados en la zona de unión de dos huesos, pertenezcan a los dos grupos de vértices asociados. Blender calculara cómo deformarlos para que el resultado final en la malla sea suave. Hecho esto, haremos la malla hija del esqueleto (control + p) use armature. Entramos en modo de postura para el esqueleto y movemos el hueso huesoik. Si todo ha ido bien, se deberá aplicar la deformación en el modelo (ver figura 4).

Vamos a aplicar el mismo método al fichero p10modelo, blend. Comenzaremos por el esqueleto de las piernas. Los huesos que tengan simétricos en el otro lado del cuerpo, como, por ejemplo, las piernas y los brazos, los nombraremos acabando en. R (los huesos de la derecha) y en. L (los de la izquierda). Esto nos servirá para copiar y pegar posiciones simétricas en la segunda parte de la practica. De momento nos ocuparemos de mantener la notación exacta y consistente.
Añadimos como primer armature fémur. R, tibia. R y piernanull. R. Después, y recordemos que tenemos como objetivo tener un único armature con todos los huesos, sin salir del modo de edición, añadimos una nueva cadena de huesos: pie. R y pie- Null. R. Finalmente, añadimos como cadenas de un único hueso: dedospie. R, ikdedos- Pie. R, iktobillo. R e IKpie. R (ver figura 5).

Hecho esto, emparentamos (botones de edición f9, modo de edición - Tab - Con todos los huesos seleccionados, elegimos en el botón desplegable el nombre del padre en el campo child of, ver figura 6).

Los dos huesos IK pequeños, ikdedospie. R e iktobillo. R con el controlador principal del pie: IKpie. R. Al hueso dedospie. R añadimos una restricción copy location hacia el hueso ikdedospie. R. Al hueso pienull. R un IK Solver hacia ikdedospie. R. Al hueso pie. R un copy location hacia piernanull. R. Finalmente a piernanull. R un IK Solver hacia iktobillo. R. Si todo ha ido bien, tendremos un comportamiento cómo se ve en la fig 7.


Crearemos grupos de vértices cómo se explicó con el primer ejemplo de la practica, nombrando los grupos igual que los huesos que los deformaran: fémur. R, tibia. R, pie. R y dedospie. R. Al terminar, podemos emparentar la malla con el esqueleto de la pierna. La deformación debe verse en este punto. A partir de ahora, todos los huesos que añadamos al esqueleto y grupos de vértices en la malla tendrán resultado directo en el modo de animación pose.
En la figura 8 puede verse una captura de la jerarquía que tenemos que construir.

La figura 9 muestra los nombres exactos de los huesos y sus relaciones de parentesco. Añadiremos una cadena de huesos para formar la columna vertebral (estomago, pecho y columnanull). Para limitar el inicio y el fin de la columna, insertamos 2 nuevos huesos (ik- Caderas e ikhombros). Añadimos una restricción de tipo copylocation a estomago, respecto de ikcaderas. A columnanull un IK Solver sobre ikhombros. De ese punto sacaremos dos cadenas de huesos (una para cada lado): hombro. R y hombronull. R. Hombro. R tendrá un copylocation de ikhombros y hombronull. R servirá de origen para el copylocation de humero. R. De forma similar se definirán los huesos y restricciones para el lado izquierdo.

Contruiremos los brazos como una cadena de 3 elementos: humero. R, cubito. R y mano. R. Añadiremos un IK Solver (IKmano) sobre mano. R. Añadiremos nuevas cadenas de huesos para los dedos. Índice, corazón y anular tendrán 3 huesos (el dedo pulgar sólo 2) más un cuarto hueso (*null) que servirá como origen del IK Solver. Añadiremos un hueso independiente para cada dedo, que servirá como destino del IK Solver.
Además, emparentaremos el origen de cada cadena de huesos con mano. R. Una captura del esqueleto de esta parte puede verse en la figura 10.

Finalmente podemos ocultar algunos huesos para que, cuando estemos en modo de edición de pose, sólo nos aparezcan los que vayamos a utilizar. En la figura 9 aparece el conjunto de huesos que serían de utilidad a la hora de animar el personaje (básicamente los IK Solver de todas las cadenas de huesos): IKpie.*, ikdedospie.*, iktobillo.*, ikcaderas, ikhombros, ikcabeza, IKmano.*, ikpulgar.*, ikindice.*, ikcorazon.* e ikanular.*.
Puede resultar de utilidad tener el esqueleto en una capa distinta del resto de elementos. Esto nos permitirá ocultarlo cuando no estemos trabajando directamente con él. Después de ocultar un subconjunto de los huesos del esqueleto, obtenemos una configuración como la mostrada en la figura 11.

Segunda parte: animación no lineal.
Abrimos dos ventanas nuevas en Blender. Una que contendrá acciones 
Y otra de tipo NLA 
En animación no lineal, definiremos las acciones como conjuntos de posiciones clave de un subconjunto de huesos. Así, en el movimiento de andar, definiremos la acción de mover las piernas y la acción de mover los brazos. De la combinación de ambas acciones en el compositor de NLA (non linear animation) obtendremos el movimiento de caminar.
Vamos a añadir el movimiento de mover las piernas al caminar. En la ventana de acciones, crearemos una nueva pinchando en el icono 
Y seleccionando (ad new). Cambiaremos el nombre por caminar piernas. Nos situamos en el frame 1 y movemos IKpie. R e IKpie. L hasta obtener una posición similar a la figura 12.

Hecho esto, añadimos un frame clave (sólo con esos dos huesos seleccionados, únicamente intervienen dos manejadores en la acción) sobre locrot. En la ventana 3d, al lado del icono de postura
, aparecen 3 iconos que nos permiten copiar
, pegar 
Y pegar invertida 
La postura actual. Es en el pegado invertido donde entra en juego la notación especial de Blender. Podemos pegar la posición de las piernas invertida siempre que hayamos seguido la notación. R y. L para huesos simétricos. De esta forma, pinchamos en copiar 
La posición actual y nos desplazamos al frame 14. Pegamos la posición invertida 
E insertamos frame clave. Nos vamos al frame 28 y pegamos la posición normal 
Insertamos de nuevo un frame clave. Si reproducimos la acción, tendremos un movimiento parecido a andar, pero sin levantar los pies del suelo. Bastara con que nos situemos en los frames intermedios (7 y 21) y añadamos nuevos frames clave con la pierna que corresponda levantada. Finalmente, obtendremos una acción en la ventana de acciones cómo se muestra en la figura 13.

En la ventana NLA aparecerán una serie de cuadros indicando los frames clave (ver figura 13, abajo). Nos interesa convertir estos frames a franjas NLA, que son barritas amarillas que podemos escalar, suavizar y componer. Para ello, en la ventana NLA seleccionamos todos los cuadros clave y pulsamos control + a action todo NLA strip. Hecho esto, podemos estirar la duración de la acción de caminar al número de frames que queramos (con la tecla, como cualquier objeto), o desplazarlo en la línea de tiempo (tecla g). Crearemos nuevas acciones (como la de mover los brazos, taparse la cara, girar la cabeza) de forma similar. Cuando hayamos creado la barrita NLA, podemos eliminar la acción de la ventana NLA para crear nuevas, pero no antes. Si eliminamos los frames clave antes de pasar la acción a nlastrip, estaremos eliminando la propia acción. Podemos añadir acciones ya creadas a la ventana NLA pulsando shift + a.
Podemos ver cómo quedó la composición de acciones de esta práctica en la figura 14.

La parte inferior, que tiene frames clave directamente sobre el objeto Lamp.004, se corresponde con el efecto del foco que ilumina la cara del muñeco al comenzar la animación. A continuación analizaremos algunas opciones de composición.
¿Cómo hacer que el personaje siga un camino? Necesitamos añadir un elemento de tipo curve / Path. Ajustamos los puntos de control y en los botones de animación (f7), indicamos los parámetros que se muestran en la figura 15.

En Pathlen indicaremos la longitud en frames del Path. Activaremos los botones de Curvepath y Curvefollow. Hecho esto, hacemos al esqueleto hijo del Path. En la ventana NLA, seleccionamos la acción caminar piernas y pulsamos la tecla n. Con esto, accedemos a las propiedes específicas de la acción (ver figura16).

Las propiedades de strip start y strip end indican el momento en el que la acción comienza y termina en la planificación NLA actual. Action range hace mención a la duración (en frames) de la acción (independiente de dónde empiece). Blendin y blendout son el número de frames que damos para mezclar la acción con las siguientes. Es un factor de suavizado que aplica Blender en la interpolación entre acciones. Repeat indica el número de veces que vamos a repetir la acción. Stride es un parámetro muy importante si estamos utilizando caminos (paths), como en nuestro caso. Indica a Blender el número de unidades que, avanza el modelo en cada ciclo. Debemos ajustar este parámetro para evitar que el modelo patine sobre el suelo. Es útil pinchar en el botón printlen (ver figura 15), que nos da la longitud de un camino para calcular el valor de stride. Si activamos usepath, la acción se va a sincronizar con el avance del Path. En nuestro ejemplo, activaremos este botón únicamente en las acciones que tengan que ver directamente con el acto de caminar, es decir, caminar piernas y caminar brazos. El botón de hold, si esta activo, nos conserva la última posición alcanzada por una acción. Por último, el parámetro add indica que el movimiento final resultara de la composición de esta acción con el resto (sus efectos se suman). Por lo general, este parámetro tendrá que estar siempre activo para todas las acciones. Por último, recordaremos que Blender permite trabajar hasta el mínimo nivel de detalle mediante curvas ipo. Podemos, por ejemplo, variar la velocidad del personaje que sigue sobre el Path accediendo a la curva ipo asociada al camino (ver figura 17).


Por: Carlos González morcillo.
|Agradecer cuando alguien te ayuda es de ser agradecido|