Hola. A mi me gusta mucho experimentar, así que cómo tenemos una discusion sobre el tema 30-60 fps, me he puesto a hacer unas pruebas.
El 'modelo' usado, ha sido mi PSTWO y un programa de test que he creado al efecto, basandome en otro ejemplo que tenía hecho (que si no, menudo curro!).
Bueno, antes de nada, anticipo que yo algunos de estos resultados, ya lo esperaba. La TV normal, trabaja usando un truco para engañar al ojo y eso complica las cosas. Como bien habeis dicho algunos, una TV puede mostrar 50 'mitades' de imagen por segundo y al ojo se le puede engañar para bien y para mal.
Así por ejemplo, cuando se estan generando las lineas pares en un TV, las lineas impares que vemos son las del frame ANTERIOR, asi que al componer la imagen en nuestro cerebro, si hay un cambio brusco entre esas dos imagenes, SE NOTA mucho mas si el desplazamiento de posicion se actualiza 30 veces por segundo a si lo hace 60 veces.
Bien, el programa en cuestion, dispone de un timer de 2 ms (alta precision) que actualiza un contador mediante interrupciones para llevar la cuenta de fps por segundo. El programa trabaja en modo PAL (50Hz) a 640x512 pixels, 32 bit color.
El test consiste en pintar un cuadrado blanco, sobre fondo azul, que se desplaza de izquierda a derecha avanzando 2 pixeles por frame en el primer caso y 4 pixeles por cada 2 frames en el segundo (para sincronizar los frames, empleo itoVSync y en el segundo caso se hacen dos llamadas a itoVSync, para rebajar a 25 fps)
Los fps son mostrados en pantalla en todo momento.
El resultado es:
En el primer caso, que actualiza a 50fps, la imagen se muestra suave, tal y como es de esperar.
En el segundo caso, la imagen se desplaza a igual velocidad que en el primer caso, pero se muestra a 25fps. Se percibe un efecto de parpadeo tanto a la izquierda, como a la derecha de un ancho equivalente a los 4 pixeles de desplazamiento.
Ok. Alguno me direis ¿te das cuenta Hermes? Pero yo soy un poco terco... y no me doy por vencido. Se que teneís razón en que ese es el efecto molesto que se aprecia en vuestros TV, pero yo lo veo cómo una causa de la forma de trabajar la TV.
Al inicio ya lo comentaba: Cuando se dibujan las lineas pares, las lineas impares se toman del PASADO, asi que en mi segundo caso, el ojo esta apreciando una imagen en las lineas impares 4 pixeles por detras de la imagen mostrada en las lineas pares
Fale, ¿se puede remediar eso? ¿hay alguna forma de disimular el problema que yo entiendo que es un defecto de la forma de generar la imagen un TV y no de mostrar 25 fps?
Pues.. si. Se me ocurre que ya que el problema, es que las lineas impares que vemos, son el pasado, vamos a adelantarlas en 2 pixeles, para que nos muestre el PRESENTE.
Para ello en vez de dibujar nuestro cuadrado de una tacada, lo que hago es descomponerlo en lineas: pinto las lineas pares en la posicion x y las lineas impares en la posicion x+2 (recordad que en el ejemplo de 25 fps el cuadrado avanza de 4 en 4 pixeles)
Pongo el ejemplo en marcha y caso 1, bien y caso 2, perfecto!, se ve IGUAL de suave que el caso 1 y no parpadea NADA
O lo que es lo mismo: el problema de los 50Hz o 60Hz, es que siempre que se refresca la imagen en un TV, las lineas pares dibujan el presente y las lineas impares, el pasado (lo cual equivale a un motion blur, por cierto) lo cual indica que tal vez es mas problema de las imagenes entrelazadas que otra cosa.
PD: Lo que me llama poderosamente la atención es que un juego mediante un simple truquito, podria trabajar a 30fps y generar la informacion necesaria para tener la calidad de 60fps en una tv normal
EDITADO:
zheo escribió:Hacer un efecto blur en un juego es MUY jodido por una sencilla razón: No sabes a priori el movimiento siguiente que vas a hacer (puedes mover la cámara/jugador como tú quieras) para generar ese efecto de transición.
Si has leido esta respuesta, sabrás porque notas el efecto 30 o 60 hz en tu tv (una cosa es hablar por hablar y otra es preguntarse porqué las cosas son o no son así)
Pero te hago un quote para decirte que YO SE cómo hacer un efecto blur en un juego y es MUY sencillo de hace (y sería facil implementarlo por hardware) ,de hecho, ya he provocado ese efecto con ésta pequeña aplicacion.
la pregunta ¿para que necesitas saber el futuro si tienes el pasado y el presente? El efecto blur de una TV se crea entre la imagen presente y pasado, con eso ya eres capaz de hacerlo