lunes, 23 de octubre de 2006

Repaso: Animación

Resumen esquemático del capítulo 21 sobre animación del libro Computer Graphics: Principles and Practice.

El término de Animación por computador no se refiere únicamente al movimiento, también a cambios de los objetos y escenas en cuanto a la forma, el color, la estructura, la textura, la luz, la posición de la cámara, etc.


Animación convencional y asistida por ordenador



  • Convencional: Key-frames, cuadros clave con posiciones "extremas" de los objetos o personajes. A partir de ellos se dibujan los cuadros intermedios.

  • Asistida: Ayuda a la animación convencional (filtrado, pintado, zooms, etc.)

  • Interpolación: Dados dos frames separados en el tiempo, se deducen los que hay entre ellos. No es un problema trivial, depende del estado anterior.

    • Métodos lineal y no lineal (cuadrático).

    • Interpolación de la posición, teniendo en cuenta la anterior y la trayectoria.

    • Interpolación de la orientación. El orden de giro de los ejes es importante. La forma de calularla puede ser adecuada para objetos o personajes, pero no para posiciones de cámara (pueden dar como resultado un horizonte inclinado).



  • Efectos simples: Pueden calcularse en tiempo real.

    • Rotación de colores, mediante uso de look-up tables.

    • Rotación de páginas de gráficos.

    • Sprites.



  • Lenguajes de animación

    • Listas lineales: Listas de acciones sobre objetos. Secuencial, independiente del proceso de renderización.

    • Listas de propósito general: Más parecido a un programa. Permite usar variables, estructuras de control, llamadas a funciones, etc. Más dificil, pero más potente que las listas.

    • Listas gráficas: Permiten visualizar la animación mientras se trabaja con ella, al contrario que en los métodos anteriores que son como 'guiones'.



  • Métodos de control

    • Independientes del lenguaje de animación usado.

    • Distintos niveles de detalle: Alto nivel ("camina hacia aquí") Vs. bajo nivel (todas las acciones individuales).

    • Control explícito: Se especifica todo cambio necesario: posición, rotación, key-frames, interpolaciones, trayectorias, etc. Introducir un cambio en una secuencia puede ser cosotos si otras dependen de ella.

    • Control procedimental: Los diferentes elementos se "comunican" entre sí (mediante procedimientos) haciendo más sencillo el proceso de animación si son interdependientes. El inconveniente es que hay que escribir un programa para ello.

    • Sistemas de restricciones: Se definen unas reglas (restricciones) que ha de cumplir el modelo que se anima. Pueden ser simples, abiertas (hay que definirlas) o complejas (reglas físicas, dinámica de materiales, etc.)

    • Seguimiento de acción en directo: Viene a ser el motion-capture que se hace actualmente en muchas películas, como el personaje de Gollum en El Señor de los Anillos. Se marcan puntos clave (las articulaciones) en personajes reales y se graba, y luego se extrapola e interpola con el sintético.

    • Actores:Similar al procedimental, generalizándo a objetos software. Cada uno tiene un comportamiento (método, función) que puede influir en otros objetos (paso de mensajes). A cada objeto se le denomina 'actor' y al método que lo gobierna su 'comportamiento'.

    • Dinámica y cinemática: La cinemática se ocupa de la posición y velocidad de los cuerpos. La dinámica de las leyes físicas que gobiernan la cinemática (gravedad, fuerza, momento, etc.).

      • Directa: A partir de la posición de un objeto y las fuerzas que actúan en él, se calcula su posición final.

      • Inversa: Dad una posición [final], calcular los movimientos y fuerzas necesarios para llegar a ella. Pueden existir múltiples soluciones y es más dificil de calcular (necesario el uso de métodos numéricos) especialmente si existen restricciones (por ejemplo en robótica).



    • Basada en la física: Se usan las leyes de la física para calcular los movimientos. Se definen ecuaciones en derivadas parciales que se resuelven con métodos numéricos. La complejidad aumenta mucho si los propios objetos también generan fuerzas. Puede llegar a ser una mezcla de todos los métodos anteriores (procedimental, actores, restricciones, cinemático, etc.). Las ecuaciones pueden contener cientos de variables interdependientes, lo que implica una gran complejidad.




  • Reglas básicas de la animación



    En el mundo de la animación en general no existen las "verdades absolutas". Todo lo que se sabe se ha ido aprendiendo de la experiencia desde que se creó el primer dibujo animado en 1925. La lista que viene a continuación no es ni completa ni exhaustiva:


    • Aplastar y estirar el objeto para dar dinamismo y mostrar sus propiedades (por ejemplo, una bola de goma vs. una de acero).

    • Movimientos suaves de cámara y de transición entre escenas y fotogramas, para ayudar a la interpolación.

    • Escenarios. La cámara ha de centrarse en la parte de escenario más "interesante", es decir, donde está sucediendo la acción. Si se dan simultaneamente varias puede no ser posible centrarse en una sola, pero puede que se pueda dividir la pantalla y seguirlas.

    • Muchas otras..., como que a veces lo que se calcula "no queda bien" a pesar de ser correcto técnicamente, hay que revisarlo siempre.



    Problemas propios de la animación



    Hay muchos, pero destaca el "aliasing temporal", que es por ejemplo el efecto que se produce cuando se filman las ruedas de un tren en movimiento, que en algunos momentos parece que ruedan hacia atrás. Las soluciones pasan por aumentar el número de frames por segundo de la animación, usar imágenes entrelazadas, o interpolar el tiempo cuando se va a reproducir a más velocidad que la que se ha grabado.
    Otro problema tiene más que ver con cuestiones de eficiencia, ya que generalmente en una escena la imagen cambia muy poco entre dos frames consecutivos. Para acelerar el proceso habría que calcular solo la parte que cambia, y teniendo en cuenta lo mencionado en el apartado anterior, puede no ser necesario aumentar mucho los frames por segundo si hay poco movimiento entre dos key-frames.




jueves, 19 de octubre de 2006

Trabajo a realizar

En el Departamento donde voy a realizar el trabajo se está desarrollando un actor sintético (un avatar), y esa tarea abarca muchos campos: el modelado de la geometría de su cuerpo; su animación realista, tanto en movimiento locomotor como de expresión de sus facciones; la capacidad de hablar utilizando modelos fonéticos realistas y animando adecuadamente la boca; el dotarle mediante inteligencia artificial de una personalidad que haga que reaccione de determinadas maneras ante estímulos exteriores, llegando a reflejarlo en la expresión de su cara, etc.

Un conocido operador de telefonía móvil se interesó por el desarrolló y planteó la posibilidad de adaptarlo o hacer algo similar para ser utilizado en terminales de telefonía móvil. El propósito sería la creación de un interface de usuario más "amigable" e interactivo que los menús tradicionales; o bien utilizarlo meramente como entretenimiento, ofreciendo la posibilidad de personalizarlo y hacerlo interactuar con los avatares de otros terminales, etc.

En el trabajo se propone repasar lo que se haya podido haber hecho ya sobre este tema e implementar un prototipo que funcione y permita apreciar de primera mano sus posibilidades y limitaciones, así como ver las dificultades que pueden surgir durante el proceso de desarrollo para de esta manera adquirir una experiencia que pueda ser valiosa si en un futuro se decide realizar un proyecto más ambicioso.

martes, 17 de octubre de 2006

Punto de partida

La base de conocimientos de que dispongo para desarrollar el trabajo son:

- Durante la carrera de Ingeniería Informática cursé las asignaturas optativas relacionadas con los gráficos por computador: Informática Gráfica; Modelado Geométrico; Modelado Visual y Animación; e Interacción Hombre-Máquina. En todas ellas puse un interés especial, dado que es un tema que me atraía y me sigue atrayendo, y obtuve calificaciones de notable o sobresaliente.

- Cuando empecé en esto de la informática a finales de los años 80 del siglo pasado lo hice, como mucha gente de mi edad, con un ordenador de 8 bits. Con él aprendí a programar y despertó mi interés en los videjuegos, los cuales no solo me entretenían jugado con ellos sino también tratando de programarlos. Aprendí conceptos de animación gráfica en 2D, uso de paletas de colores y páginación de memoria gráfica, técnicas de compresión, e incluso también algo de 3D que propiciaron mi elección años más tarde de asignaturas durante la carrera. Así mismo, la experiencia de tener que programar en aquel entonces con tantas limitaciones (una CPU a 3,5 Mhz y apenas 32 Kb de memoria) pueden servirme para este trabajo, en el que voy a tener que vérmelas también con dispositivos de pocos recursos.

- En mi tiempo libre, y antes de volver al mundo académico me dediqué a programar un MUD (juego multiusuario en modo texto) en el que los mobs (personajes controlados por el ordenador) se comportan de manera inteligente, mucho más de lo que es habitual en este tipo de programas, haciendo cosas como moverse a determinados lugares en ciertos momentos, o interactuar de forma inteligente con otros mobs y jugadores. Puede venirme bien para cuando tenga que dotar a los avatares de una "personalidad" o forma de comportarse.

- Y por último, el interés que tengo en este tema; cada vez que veo una película de animación o la demostración de un nuevo videojuego en 3D, no puedo evitar verlo con ojos 'analíticos', fijándome por ejemplo en que para tal efecto se han usado partículas, para esas texturas de la pared bump mapping, o que ese terreno ha sido generado con fractales.

Quizás algunas de estas bases sean muy "flojas"... pero es lo que hay :-) Al menos el tema no me pilla de nuevas, ya que cuento con alguna experiencia que espero sea suficiente para empezar.

lunes, 16 de octubre de 2006

Primera entrada

Soy ingeniero informático y llevo seis años trabajando en una empresa como Administrador de Sistemas. Mi inquietud por aprender cosas nuevas me llevó el año pasado a matricularme en los cursos de doctorado del Dpto. de Informática e Ingeniería de Sistemas, de la Universidad de Zaragoza.

El curso pasado (2005 - 2006) cursé varias asignaturas de los cursos de doctorado ofertados, necesarios para completar el periodo docente.

Este curso (2006 - 2007) me he matriculado en la línea de investigación sobre Animación 3D, que junto con otra línea que voy a cursar simultáneamente y los cursos que hice el año anterior me llevarán a completar el periodo investigador y tener la posibilidad de obtener el Diploma de Estudios Avanzados (D.E.A.). Después de eso, vendría la realización de la Tesis Doctoral, pero para eso todavía falta más de un año, además de encontrar un tema adecuado y alguien que me la dirija.

En este blog voy a ir recogiendo todo lo que vaya aprendiendo durante la realización de este trabajo, para que quede escrito de una forma más o menos permanente y también para que pueda servir como fuente de información a quien le interesen estos temas y haya llegado hasta aquí.