# Tecnologías multimedia e interacción/Animación y generación procedimental

En esta sección se describen las distintas formas de generar animación de forma procedural.
La animación generada por procedimientos es un método de animación que se encuadra dentro de la animación generada por ordenador, como puede ser el motion capture, key framming, skeletal animation, etc...
En la animación procedimental, los objetos son animados por un procedimiento - un conjunto de reglas - no por keyframing. El animador especifica reglas y condiciones iniciales y ejecuta la simulación. Las reglas se basan a menudo en reglas físicas del mundo real expresadas por ecuaciones matemáticas.

## Animación procedimental

Es la animación que se genera mediante algoritmos y no dibujando cada frame (keyframming).
Esto permite que se reduzca el tamaño y permite la posibilidad de incluir aleatoriedad, o inteligencia artificial ofreciendo un número de posibilidades inabarcable de forma tradicional.
La animación tradicional se basa en el keyframming, que consiste en definir los fotogramas clave, en los que se basará la animación, otorgando un control completo de la animación pero es mas costosa cuando mas elaborada es la animación.
La animación procedimental por otro lado, se basa en reglas, que pueden reaccionar ante ciertos parámetros, lo que resta control al animador ya que depende de las reglas que rigen los algoritmos.
Ejemplos de animación procedimental:
* El paquete Massive(2001), un software de animación e inteligencia artificial orientado a multitudes, usado por primera vez en El señor de los anillos para generar batallas multitudinarias.
En el estudio de la animación procedimental se distinguen dos grandes enfoques, el enfoque clásico, que se divide en animación de objetos inertes y de vida artificial. Y el enfoque moderno, motivado sobretodo por el uso de la animación procedimental en videojuegos que abarca muchas otras disciplinas de forma heterogenea y es un campo en constante crecimiento.

## Enfoque clásico
### Modelado y animación basado en físicas
#### Sistemas de partículas

Simula comportamientos de "fuzzy objects" que son objetos dinámicos y fluidos, como pueden ser humo, fuego o nubes.
Se usa en cine y cada vez mas y mejor en videojuegos, para simular explosiones, o humo que sale de las alcantarillas en ambientes urbanos.
El esquema de generación de estos sistemas suele ser similar:
* Generación de nuevas partículas
* Asignación de atributos a las partículas (posición, color, velocidad, tiempo de vida, etc...)
* Destrucción de partículas viejas
* Transformación/movimiento de acuerdo a atributos
* Renderizado de la imagen con las partículas restantes

#### Objetos Flexibles

Simula objetos flexibles como ropa, se definen reglas para gestionar las reacciones de los objetos frente a estímulos externos.
Suelen modelarse con triángulos con masas en los vértices y “bisagras” en los bordes. Estas bisagras responden a los estímulos en función de los parámetros que tienen asignados. Los parámetros suelen ser, posiciones, velocidad, aceleraciones, fuerza del viento, masa, etc...

#### Rigid Body Dynamics

La dinámica del cuerpo rígido simula la interacción dinámica entre objetos rígidos, como rocas y metales, teniendo en cuenta diversas características físicas, tales como elasticidad, fricción y masa, para producir rodadura, deslizamiento y colisiones. Los parámetros para la dinámica del cuerpo rígido "clásico" son masas, posiciones, orientaciones, fuerzas, pares, velocidades lineales y angulares, momentos lineales y angulares, tensores inerciales rotacionales, etc.

#### Fluid Dynamics

Simula de forma realista todo tipo de fluidos y flujos, atendiendo a leyes físicas del fluido y adaptándose a su entorno. También se usa en el campo de la aeronáutica donde se hacen simulaciones que luego se prueban de verdad en túneles de viento.
* Durante el preprocesamiento
** La geometría y los límites físicos del problema se pueden definir usando el diseño asistido por computadora (CAD). A partir de ahí, los datos pueden procesarse adecuadamente (limpiarse) y se extrae el volumen de fluido (o dominio de fluido).
** El volumen ocupado por el fluido se divide en celdas discretas (la malla). La malla puede ser uniforme o no uniforme, estructurada o no estructurada, que consiste en una combinación de elementos hexaédricos, tetraédricos, prismáticos, piramidales o poliédricos.
** El modelado físico se define - por ejemplo, las ecuaciones de movimiento fluido + entalpía + radiación + conservación de especies
** Se definen las condiciones de los límites. Esto implica especificar el comportamiento del fluido y las propiedades en todas las superficies delimitadoras del dominio fluido. Para problemas transitorios, también se definen las condiciones iniciales.
* La simulación se inicia y las ecuaciones se resuelven iterativamente como un estado estacionario o transitorio.
* Finalmente se utiliza un postprocesador para el análisis y visualización de la solución resultante.

#### Fur and Hair Dynamics

Animación de pelo y pelaje, usado sobretodo en cine (Monstruos SA). Suele ir unido al método de renderizado, se anima "al vuelo" en función del movimiento del cuerpo, los estímulos externos que recibe, y la superficie de colisión.

### Artificial Life
#### Behavioral Animation

Se definen reglas que simulan interacciones entre formas de vida artificiales, que se usan para generar animaciones de animales (escena de la estampida de El Rey León) y de cualquier forma de vida artificial.
Formas de interacción que se definen:
* Flocking (congregación) y Steering (gobierno)
* Comportamiento de predador presa
* Comportamiento de humanos virtuales (posición partes del cuerpo en función del estado de ánimo)

#### Artificial Evolution

Animación de formas de vida artificiales que mediante algoritmos genéticos mutan y evolucionan. El animador define cual es la clave de la evolución.
El principal avance en este campo es el trabajo de Karl Sims en 1994 haciendo evolucionar formas de vida pasadas en figuras geométricas que funcionan como placeholder para formas mas específicas.

#### Branching Object Generation

Animación y generación de árboles y objetos con estructuras ramificadas. Suele ser muy pesado sin un método procedimental. Los métodos de generación de objetos ramificados emplean reglas definidas por el usuario.
Uno de estos métodos son los L-Systems:
* Geometría de la tortuga:
** La tortuga conoce su dirección y su posición.
** La tortuga puede: Moverse, cambiar posición, y realizar estructuras de control (bucles).
* Premisa + Reglas: Definen la creación de los objetos.
* Ejemplo: w es la premisa, p una regla y F indica movimiento hacia adelante.
Creación de árbol con dos ramas laterales. w: F p: F=F[-F][F][+F]

## Enfoque moderno

El gran desarrollo y apertura de la industria del videojuego ha propiciado un gran avance en el uso de la animación procedimental, donde junto con el auge del desarrollo independiente ha generado un gran avance en este campo de forma heterogenea junto con tipos de animación tradicionales.
En este ámbito el desarrollo es muy complejo ya que abarca desde las animaciones automáticas de giro de cuello del personaje , hasta el motor euphoria y las físicas de "ragdoll" (Muñeco de trapo). Algunos de los principales hitos han sido:
* Quake 3 Arena: Ejemplo muy simple de animación procedimental, en el que cuando se mira alrededor se gira el cuello del personaje calculándose esta animación en tiempo real.
* Motor Euphoria: Usado por primera vez en el Grand Theft Auto IV, que permitía, entre otras cosas, las mecánicas de ragdoll, esto es, que a los cuerpos de los personajes se les aplican leyes físicas que producen movimientos mas realistas por ejemplo cuando un personaje se cae por una ladera, ya que cada parte del cuerpo tiene su peso, esta conectada y reacciona cada vez de una forma distinta teniendo en cuenta la gravedad y el entorno.
* Spore: El videojuego Spore (2008) anima automáticamente personajes creados por el usuario que pueden tener cualquier número de extremidades y distintas formas que decide el jugador. Usa un motor que detecta articulaciones y centro de gravedad y permite adaptarse a reglas de animación procedimental de una forma completamente versátil.
* Grow Home: Videojuego de 2015 que usa solamente animación procedimental. La principal mecánica del juego es la escalada, que no esta explícitamente programada, sin embargo se han programado los impulsos que se le puede dar a cada brazo del protagonista, y su interacción con el entorno, produciendo así una sensación mas realista de la propia escalada.
* Overgrowth: Videojuego independiente que utiliza diversas técnicas de animación procedimental mezcladas con animación tradicional. La mayor parte del peso de la animación está en el código (el movimiento del personaje protagonista consta de solo 13 keyframes) lo que le permite realizar movimientos muy elaborados por una fracción del presupuesto que cuesta animarlos en estudios triple a.

### Técnicas y tendencia

Las principales técnicas que se usan a la hora de implementar animación procedimental en videojuegos son:
* Simulaciones Físicas: Sobre el esqueleto de animación se definen leyes físicas que rigen el movimiento del esqueleto. Esto da lugar a las físicas de ragdoll, esto es, que cuando se activan la animación del esqueleto de animación depende de leyes físicas definidas y no de movimientos generados por el animador.
* Cinemática inversa: Esta tecnología se desarrolló en principio para su uso en robots, se basa en encontrar los valores que deben tener las articulaciones del mismo para que su extremo se posiciones y oriente de forma correcta. Esto aplicado a animaciones en videojuegos permite que con solamente indicar donde están las articulaciones de los personajes, las extremidades se sitúen de forma correcta, natural y calculándose en tiempo real.
* Runtime Rigs: Tradicionalmente aplicaciones como Maya o Blender proporcionan rigs, que suponen una capa adicional encima del esqueleto del objeto a animar que abstrae del mismo y permite implementar sobre este el motor de cinemática inversa y calcular de forma ligera todos los movimientos en tiempo real, transmitiendo las posiciones finales a las articulaciones de la capa posterior al rig.
* Active Skeleton: Es una ampliación de la física de ragdolls, esto es, las leyes físicas que se aplican están siempre activas, no solamente cuando el personaje muere, o cae, lo que puede dar desventajas en cuanto a rendimiento ya que todas las leyes están siempre calculándose y en cuanto a dificultad, ya que cualquier objeto con el que se interactue puede afectar al personaje.
Según Ken Perlin y David Rosen en la GDC de 2014, el objetivo de esta tendencia es el de:
* Conseguir cada vez mas naturalidad
* Dirigir en vez de animar
* Integrar animación en el código

### Animación procedimental VS Motion Capture

La técnica mas usada hasta ahora en la animación de videojuegos ha sido el motion capture, pero la animación procedimental ha evolucionado hasta el punto de superar al motion capture en naturalidad y coste.
* El motion capture es demasiado lento: Para realizar transiciones entre animaciones, tradicionalmente el motion capture se ha servido de dos técnicas, blend trees (árboles de mezclas) y transiciones. Estas técnicas se usan para crear animaciones suaves entre dos animaciones contiguas, o mezclar animaciones ya hechas y conseguir mas naturalidad en la transición. Estas técnicas requieren una máquina de estados de animaciones, que cuando el juego es suficientemente grande se vuelve muy complicado y lento trabajar con la misma (Naughty Dog consiguió una optimización muy alta para Uncharted 3 que presentó en la GDC de 2011).
* Motion Capture es demasiado caro: Muchos sistemas de animación como el del Crysis 2 y 3 se basan en tres dimensiones: ángulo de pendiente, velocidad de giro y velocidad de movimiento. Si además se usa un terreno arbitrario, ya son cuatro dimensiones. Esto da lugar a un montón de animaciones que se tienen que capturar solo para el movimiento del personaje, y habrá que adaptar cambios y transiciones de velocidad. Es por esto que para juegos demasiado grande el motion capture resulta inabarcable para estudios que no sean triple A.
* Proceso y limpieza de datos lento: Aunque la tecnología de captura ha mejorado mucho con el tiempo, todavía el trabajo necesario para convertir las capturas de movimiento en estados de animación pulidos tarda días en el mejor de los casos, lo que obliga a dedicar una gran parte de recursos en esto.
* La animación procedimental tiene mejor rendimiento: Técnicas como la de cinemática inversa permite que se calculen los principales factores de la animación durante la ejecución ahorrando traer distintos datos de cada animación del disco, y a la vez quedar mas natural, ya que se adapta a cada situación en concreto en vez de ser una animación predefinida para una serie de situaciones. Con la animación procedimental se incrementa la carga de trabajo en tiempo real, mientras que la carga de datos de disco es mucho menor.
* La animación procedimental es mas barata en todos los aspectos: Poniendo mas énfasis en animar mediante código en vez de con animaciones tradicionales permite obtener rápidamente prototipos con muy buenos resultados y gastos muy bajos. Un ejemplo de esto es el videojuego Overgrowth, en desarrollo por una sola persona, consigue resultados similares a triples a, pero con una fracción del presupuesto.
* La animación procedimental está en constante mejora: En los principios estas técnicas eran inconsistentes y no daban buenos resultados en los videojuegos, pero esto ha cambiado de forma notable, la animación dirigida por físicas ya esta incluida en los principales motores de videojuegos (unity, unreal...) permitiendo animar objetos con solamente aplicarles un peso y una posición, abstrayendo al programador de las animaciones propias del objeto, o reduciendo el trabajo en este aspecto. En el videojuego Max Payne 3 las animaciones incluyen ciertos aspectos animados por físicas para quitar carga de trabajo al animador y produciendo resultados muy realistas.

### Inteligencia artificial aplicada a la animación procedimental

Una de las técnicas mas nuevas de animación procedimental, consiste en el uso de redes neuronales con retropropagación para obtener un movimiento mas realista.
Con el objetivo de animar el control del personaje en tiempo real se llevan a cabo los siguientes pasos:
* Preproceso de datos: Se lleva a cabo una fase de captura de distintos movimientos, correr, andar, agachado... De los que se extraen parámetros de control que se encajan con los datos del entorno virtual. También se saca función de fase de cada movimiento que es la que asignará los pesos de la red neuronal.
* Entrenamiento: Con retropropagación, el error obtenido en los parámetros de salida respecto a la función de fase, se usa en la entrada de la red neuronal junto con los datos de entrada del jugador.
Aunque por ahora es un método experimental, los resultados obtenidos son muy prometedores, permitiendo con una base de datos de movimientos en memoria muy pequeña (100 Mb frenta a 1,5 Gb usados para el entrenamiento de la red neuronal) se obtengan movimientos muy elaborados y adaptados al terreno, a la velocidad, y a la posición del personaje.
Las distintas técnicas se refieren a los distintos tipos de redes neuronales usadas: PF son las basadas en la función de fase del movimiento, y son las que mejor resultdo subjetivo proporcionan. El resto de redes neuronales están basadas en redes de codificador-decodificador o es procesos gausianos con regresión.
* ↑ https://es.wikipedia.org/wiki/MASSIVE_(software)
* ↑ http://www.utdallas.edu/atec/midori/Handouts/particle_system.htm
* ↑ http://www.utdallas.edu/atec/midori/Handouts/procedural_animation.htm
* ↑ http://www.utdallas.edu/atec/midori/Handouts/procedural_animation_files/J_Hahn_SIGG88.pdf
* ↑ https://hal.inria.fr/hal-01095858/file/waterfall.pdf
* ↑ https://en.wikipedia.org/wiki/Computational_fluid_dynamics
* ↑ http://www.red3d.com/cwr/boids/
* ↑ http://www.karlsims.com/evolved-virtual-creatures.html
* ↑ http://slideplayer.com/slide/9180007/
* ↑ http://chrishecker.com/images/c/cb/Sporeanim-siggraph08.pdf
* ↑ http://www.gdcvault.com/play/1020583/Animation-Bootcamp-An-Indie-Approach
* ↑ http://aigamedev.com/ultimate/presentation/procedural-animation-matters/
* ↑ http://www.gdcvault.com/play/1020583/Animation-Bootcamp-An-Indie-Approach
* ↑ http://aigamedev.com/open/editorial/animation-revolution/
* ↑ http://theorangeduck.com/media/uploads/other_stuff/phasefunction.pdf