#77 Te voy a explicar gráficamente qué es un bajón, y por qué la expresión "frames per second", a día de hoy, es completamente inútil.
a) Introducción. FPS vs frametimes.
Generalmente los frames se han medido siempre por "cuantía por segundo". Esta unidad ha demostrado ser inútil porque dentro de un segundo pueden ocurrir muchas cosas y, por sí sola, no muestra en ningún caso si la experiencia es o no es fluida. De esto me di cuenta jugando al Crysis... título muy criticado por muchas razones, pero que a 30-50fps es más o menos jugable, cosa que no pueden decir la mayoría de juegos (al menos, no en pc).
¿Qué son los frametimes? Es el tiempo que tarda un frame en ser procesado y enviado. Así, 60fps está compuesto por 60 frames con un frametime de 16,6 ms. Si hablamos de 50ms, hablamos de 20 fps, etc.
b) Estadística. Media y desviación típica.
Aquí puedes ver por qué la cifra de FPS es irrelevante:
En ambas columnas tendríamos el mismo framerate (30 fps). Peeero, en el primero tenemos una distribución totalmente homogénea y, en cambio, en el segundo tenemos una distribución de frametimes heterogénea. Sí, tenemos los mismos 30 frames al final del segundo, pero como no están bien distribuidos, notaremos saltitos a la hora de jugar. Es importante entender que notarlos o no notarlos depende de la percepción de cada uno. Hay gente que puede jugar con vsync sin problemas, a pesar de que introduce 2-3 segundos de lag, entre 33 y 50ms, mientras que otros no pueden jugar porque el retraso inducido, que donde más se nota es en el ratón, les hace la experiencia insoportable).
c) En juegos:
Esto es Crysis jugando entre 40 y 60 fps:
El juego parece fluido porque no hay saltos de frametime.
Aquí vemos un salto de frametime:
Pensarás... "joder, si sólo son 70ms". El problema no es que sean "sólo" 70ms... es que esos 70ms implican que estarás 4 frames seguidos sin cambiar de escena y, al hacerlo, te está cortando toda la experiencia. Curiosamente esos 70ms no se mostrarán en el framerate (la variación será muy pequeña, pasarás de 65 a 62fps), cuando la experiencia ya te la ha rebentado. Piensa que eso se puede repetir cada 15 segundos, no tiene por qué ser algo aislado.
¿Y qué pasa con vsync, y las consolas?
En consola suele (o eso tenía entendido yo) estar el vsync siempre activado (en pc es una opción, salvo cutre-ports). Esto tiene sus cosas buenas y sus cosas malas. En lugar de nombrar aquello que la mayoría sabemos, voy a nombrar algo que la gente desconoce: vsync sólo permite fracciones exactas de la frecuencia de refresco del monitor (o televisión). Si tenéis 60hz, el framerate ÚNICAMENTE puede ser 60fps, 30fps, 20fps y 15fps. Nunca será ninguna cuantía intermedia. O sea, que si el sistema que utilicéis (que en pc también pasa, y por eso están inventando tecnologías para paliarlo, como el adaptive vsync de NVIDIA) pasa de 60fps a 59fps, y tenéis vsync activado... pasaréis de 60 a 30fps, lo que es un ostión considerable en la jugabilidad. Si la consola está entre 60 y 59fps, por lo que tenéis uno o varios saltos cada pocos segundos... es una catástrofe.
Es por eso que si tienes un salto 80 ms, por mucho que rebajes el techo de frames, te seguirá jodiendo igual. Cuando limitas de 60 a 30 fps, lo que haces es que estás espaciando los frames. En lugar de tener 1 frame cada actualización de refresco (16.6ms), lo tienes cada 2 (33.3ms). ¿Qué pasa? Un salto de 80ms te sigue destrozando la jugabilidad. Hombre claro, en los benchmarks se nota menos, porque como estás bajando los tiempos la media no te la destroza tanto... pero a nivel de jugabilidad te da lo mismo ir a 300fps o a 30fps.