Camara lenta sin sacrificar FPS?

Started by JaViS, October 23, 2013, 05:07:14 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

JaViS

Buenas gente, alguno tiene una idea de como implementar una camara lenta sin tener que bajar los FPS? Resolution servirá para eso?


gracias!
Working on Anarkade. A couch multiplayer 2D shooter.

kim-elet-o

Hmmmm yo creo que si, segun lo que quieras hacer.

|/
|\im-elet-o el yayo programador.

JaViS

Y basicamente quiero disminuir la velocidad del juego en general, como un bullet time. pero sin quitar frames para que no se vea cortado,.


Lo que quiero es lograr movimientos fluidos
Working on Anarkade. A couch multiplayer 2D shooter.

KeoH

Yo estube pensando sobre eso hace tiempo .. pero no llegué a hacerlo ... te cuento la teoría y si lo pruebas me dices si funciona:

En todos y cada uno de los procesos que serán relentizados (por ejemplo en botones y cosas de la gui o procesos que gestionen cosas de fondo,  no) ... pues en todos esos procesos (basicamente presonajes, balas y explosiones por ejemplo ... en cada sentencia frame que pongas .. en vez de poner simplemente "frame();" ... poner "frame(velocidad);" .... velocidad sería una variable global, accesible logicamente desde cualquier parte del codigo del juego ... velocidad valdría siempre 100 .. q es el valor estandar que corresponde a "frame();" .. ...  cuando quieras ralentizar ... solo tendrias "en teoria" que aumentar ese numero .. pongamos a 200 para que vaya a la mitad de velocidad .. esto es .. que se espere dos fotogramas para pintar el proceso ... y si pones un numero mas pequeño lo acelerarías.

Es una teoria que queria probar y todavia no he hecho xDDD pruebala y dime si funciona jajajajaj

Drumpi

En teoría debería funcionar, es una solución sencilla, pero no es elegante, porque tendría el mismo efecto que reducir los FPS, salvo que las respuestas del control y los elementos a los que no afecte el tiempo bala seguirían respondiendo en tiempo real.
La única forma "correcta" de hacerlo sería tener en cuenta esto desde el principio y que todos los desplazamientos dependan directamente del tiempo (es por eso que existe tanto fan de las fórmulas físicas, ya que no dependen directamente de los FPS, sino de la variable "tiempo"). O sea, que en lugar de en lugar de:

x = x + 1;

debería tener algo como

x = x + (1*tiempo);

siendo tiempo igual a 1 a cámara normal, y cualquier número entre 0 y 1 para cámara lenta... o si lo prefieres, para no andar usando floats:

x = x + (1/tiempo);

valiendo tiempo 1 para la velocidad normal, 2 para la mitad de velocidad, etc. Pero en lugar de usar desplazamientos de 1, 2 o 5 pixels, usar una resolution de 10 o 100, según la lentitud que se vaya a alcanzar. Tiempo puede ser global o local (supongo que lo suyo sería que fuese global), queda más elegante, pero también es más trabajo y hay que tenerlo en cuenta para los cambio de estados automáticos (es decir, aquellos como " a los 5 segundos pasar de "estar de pie" a hacer la animación de "estar esperando"). Pero es como creo que queda mejor.

O símplemente haz lo que dice Keoh :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

panreyes

Quote from: KeoH on October 24, 2013, 12:49:22 AM
[size=78%]Es una teoria que queria probar y todavia no he hecho xDDD pruebala y dime si funciona jajajajaj[/size]


Esto ya lo comprobé yo con PiX Dash :)
http://www.youtube.com/watch?v=Zb4RrOCvMDY#t=0m46s

emov2k4

Quote from: PiXeL on October 24, 2013, 12:08:05 PM
Quote from: KeoH on October 24, 2013, 12:49:22 AM
[size=78%]Es una teoria que queria probar y todavia no he hecho xDDD pruebala y dime si funciona jajajajaj[/size]


Esto ya lo comprobé yo con PiX Dash :)
http://www.youtube.com/watch?v=Zb4RrOCvMDY#t=0m46s

en que parte... no lo note....

JaViS

Sip, en teoria deberían funcionar, pero lo que yo quiero lograr es hacer un efecto de relentizacion disminuyendo el movimiento de los personajes, es decir, que en lugar de moverse 5px en cada frame, se muevan 3,2,1 - basicamente para no tener esos saltos que obtenemos al disminuir frames - por eso habia pensado en la var resolution. [size=78%]Pero la wiki esta caida y no se bien como funciona. [/size]
Working on Anarkade. A couch multiplayer 2D shooter.

laghengar

Me gusta mucho la idea de Drumpi, de esa forma se puede hacer también con las animaciones. Por ejemplo, teniendo una animación de 10 frames, en velocidad normal pasaría por los frames 1,3,5,7, y 9. A mitad de velocidad serían todos los frames de uno en uno, y podemos poner sprites con los movimientos interpolados para evitar los saltos en la ralentización del tiempo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

Resolution, lo que hace, es que el proceso que modifique esa variable, cambie la forma en que se posiciona en pantalla.
Indica cuantas unidades vale un pixel. Por ejemplo, si se pone resolution=10, significa que cada pixel vale 10 unidades, por lo que ese proceso, para poder moverlo 1 pixel debes hacer:
x = x +10
Si hicieras x++ sólo moverías la décima parte de un pixel, y hasta que no se ejecute esa línea 10 veces, no se vería ningún tipo de movimiento.
Si resolution vale 2, entonces debes desplazar x o y 2 unidades antes de que avance 1 pixel. Resumiendo, lo que hace es dividir X e Y por ese número y luego colocar el proceso en esa posición.
Es muy útil para cuado se usa la función advance, sobre todo en modo7.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

JaViS

lo que me di cuenta es que, para lograr el efecto que quiero, debo aumentar los FPS, no disminuirlos :P no se si se entiende
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

No, lo que tienes que hacer es aumentar el número de pasos intermedios, es decir, antes, para llegar desde A hasta B podías hacerlo en 4 pasos, pero en cámara lenta, esa distancia debes cubrirla con 40 pasos.
Lo de aumentar los FPS no tiene nada que ver, puedes usar los mismos FPS que en cámara normal. El reducir los FPS provoca un efecto de "saltos", típico de las cámaras lentas, porque las cámaras de TV almacenan hasta 60 imágenes por segundo, y no se pueden inventar lo que sucede en medio, por eso, si en lugar de pasar 60 imágenes por segundo los pasas a cámara lenta, o sea, a 10 imágenes por segundo, se ven esos saltos.

Si lo que quieres es un tiempo bala, o haces como en el programa "el hormiguero", que tienen una cámara de 20000 frames por segundo (o sea, que haces que esa sea tu velocidad a velocidad normal), o simplemente haces lo que se te comenta más arriba: aumentar la resolución y hacer los movimientos dependientes de la nueva variable "tiempo", no de los frames.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

JaViS

Working on Anarkade. A couch multiplayer 2D shooter.