Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Sergen en 30 de Junio de 2009, 03:40:23 PM

Título: Animaciones 3D
Publicado por: Sergen en 30 de Junio de 2009, 03:40:23 PM
Una pregunta muy tonta. Yo no he realizado ninguna animación en 3D con OpenGL o librerías similares.

Cuando trabajas en 2D el tema es sencillo, creas un conjunto de sprites y vas alternando entre una animación y otra una serie de imágenes fijas para dar el aspecto de animación.

El tema es en 3D, por ejemplo si haces un dinosaurio y pretendes hacerlo caminar, ¿cómo lo haces?. ¿Haces una serie de capturas igual que en 2D con cada movimiento y luego interpolas las posiciones de la matriz de puntos de una posición a otra?, ¿lo haces con transformaciones geométricas, rotaciones, etc, hasta pasar de una posición a otra?, ¿cómo se hacen las animaciones?.
Título: Re: Animaciones 3D
Publicado por: Mars Attacks en 11 de Julio de 2009, 12:46:47 PM
Pues depende. Grosso modo existen dos escuelas, la que guarda posiciones relativas de vértices de la malla para cada posición clave de la animación, y la que guarda transformaciones de un esqueleto (jerarquía de huesos) para cada posición clave y los pesos relativos de cada vértice de la malla con respecto a los huesos de dicho esqueleto.
Después, efectivamente, se interpola entre ambos valores.
Título: Re: Animaciones 3D
Publicado por: Sergen en 11 de Julio de 2009, 04:40:33 PM
Interesante... saco en conclusión... guardando posiciones relativas de vértices para cada posición clave tenemos unos grados de libertad en los movimientos que nos vienen marcados por las posiciones que hayamos establecido de referencia, parece más sencillo de hacer e implementar a nivel de código, aunque la herramienta de animación por ejemplo nos permita animar por huesos, por ejemplo podemos coger sólo la captura de las posiciones. Animar por huesos en la herramienta de creación de la animación parece más inmediato pero luego a la hora de hacer la animación requerirá más recursos ¿?.

Luego tenemos la opción de utilizar (huesos) transformaciones geométricas giros, etc, que nos dan mayor grado de libertad en los movimientos del personaje pero que nos van a exigir una mayor complejidad en la implementación del motor de animación y que parece ser consumirán un mayor número de recursos.

A ver si miro un poco porque supongo que la interpolación entre los distintos puntos ya sea de la malla o de los movimientos de los huesos igual ya la proporciona el propio lenguaje ·3D, creo que si es de alto nivel como el VRML ya lo incorpora ¿?.
Título: Re: Animaciones 3D
Publicado por: Mars Attacks en 11 de Julio de 2009, 08:02:53 PM
Que conste que no me he tenido que pegar con eso nunca, así que hablo de cómo supongo que funciona el asunto.

Como bien dices, con la primera variante (que es por ejemplo la que obtienes exportando en formato md2) tienes la ventaja de que el motor es más simple, y la desventaja de que el peso de la información exportada será mayor y además "estática". Con la segunda variante ganas en libertad (sólo necesitas un modelo con el exportado de los pesos por vértice y luego puedes tener tantas animaciones esqueletales en archivos separados como quieras, mientras mantengas la jerarquía de huesos intacta), pero el sistema se vuelve algo más complejo (quizá no tanto, dado que lo que tendrás que almacenar será las matrices de transformación que se le aplican a cada hueso en cada keyframe y aplicarlas a los vértices a los que afectan -que podría ser de más de un hueso y podrías tener que hacer cálculos adicionales-). Supongo que en esta variante podrías interpolar transformaciones o interpolar posiciones transformadas.

A ver si viene alguien más motorista y nos aporta luz.
Título: Re: Animaciones 3D
Publicado por: Buffon en 12 de Julio de 2009, 12:17:36 PM
me tengo que ir y no puedo desarrollar esta respuesta, pero busca información de trabajar con esqueletos.

si luego tengo tiempo te subo un proyecto chorra utilizando QT para linux que trabajo con esqueletos con animaciones hechas en 3D Studio.