Natsu escribió:
Es no es verdad, hay animaciones que están ligadas al framerate, "Keyframe animation" pero no siempre tiene que ser así, hay juegos como por ejemplo Rayman 2 en Dreamcast que tienen las animaciones de las escenas ligadas al framerate, en concreto a 30 fps, que es a los fps originales que se creó, cuando se hizo el original para N64, que pasa que el juego en Dreamcast va a 60 fps, y las animaciones a 30 fps y canta a la legua, el juego se mueve suave y el personaje parece que va a trompicones, luegoestán las animaciones que no están ligadas al framerate, las cuales se adaptan a la velocidad a la que el juego esté funcionando.
Si me equivoco que alguien más ducho venga y corrija.
no soy experto en el tema pero segun tengo entendido
el keyframe animation no tiene que ver con el framerate
un keyframe guarda la informacion de los huesos/joints o de la posicion de los vertices(según se maneje), por ejemplo en los 2 primeros quakes se guardaban los vertices(del tercero no estoy muy seguro), esto lo se por mods que hice a varios modelos, pero no es necesariamente el frame que se va a desplegar, cuando toca dibujar la animación entre key frames se hace una interpolación y se saca la posición de los vértices a medio camino entre un keyframe y otro
se a que te refieres con lo de rayman, en juegos como quake1, red-faction y similares usaban el key frame como si de un cuadro de animación en una cariatura se tratase sin hacer interpolación y se notaba los saltos de forma drástica, todavía se aplica esto pero cuando los objetos están a lo lejos ya que al no hacer updates de animación te ahorras muchos recursos
además de que en los tiempos de quake1 opengl se utilizaba en modo inmediato
ejemplo(pseudocodigo):
glbegin(GL_TRIANGLE)
vertice1(x,y,z)
vertice2(x,y,z)
vertice3(x,y,z)
glend()
por lo que se definía en cpu cada vertice guardandose en ram y se mandaba uno a uno a la gpu, una animación asi supondría mayor trabajo a la cpu(aunque con la ventaja de tener control absoluto sobre cada vértice) teniendo que recalcular la posicion de cada vertice, por lo que era mas fácil simplemente mandar otro conjunto de vértices previamente calculado(por ejemplo un keyframe) para el siguiente cuadro de animación
ahora en opengl se usan los vertex buffer objects, vertex, array objects y se puede jugar con la variables(uniforms ) que se pasan a los shaders por lo que ahora es la gpu quien se encarga mayoritariamente en los despliegues y hay muchas maneras de ahorrar draw calls
también es posible hacer menos updates de la animación, de forma que los personajes se puede manejar a 30 fps mientras el juego en si a 60, aunque esto no debería afectar la rotación, traslación y escala de los objetos(incluyendo personajes) que deberían seguir a 60 fps ya que es parte del llamado a dibujar(render call) y pasa por las matrices(proyección, global, modelo) de cada uno para armar la escena