19/12/07

VSync

En nuestro camino para conseguir el maximo numero posible de fps en nuestro juego debemos tener en cuenta la sincronizacion vertical de la tarjeta de video con el monitor, lo que comunmente se denomina VSync (Vertical Synchronization). Para comprender que es el VSync necesitamos algunos conocimientos basicos de como funcionan las tarjetas de video.

Durante la generacion de cada fotograma, la tarjeta de video no dibuja los objetos del juego directamente en la pantalla, ya que entonces veriamos los objetos ir apareciendo uno tras otro. En lugar de eso, los objetos se dibujan en una zona especial de la memoria de video llamada back buffer, y cuando se ha terminado de pintar, el back buffer se copia a otra zona de memoria llamada frame buffer. Periodicamente el monitor actualiza la pantalla con el contenido del frame buffer. El tiempo de refresco del monitor es numero de veces que el monitor actualiza la pantalla con el contenido del frame buffer, se mide en Hz (1 Hz = 1 vez por segundo), y en la mayoria de los monitores esta entre 60 y 120 Hz. No hay que confundir por tanto la velocidad de pintado de la tarjeta de video (fps) con el tiempo de refresco del monitor (Hz), ya que son conceptos diferentes. Por muchos fps que este dando nuestra tarjeta de video, el numero maximo de fotogramas diferentes que veremos en pantalla estara limitado por el tiempo de refresco del monitor.

Tearing

El tearing es un efecto visual no deseado, que se presenta cuando el monitor y la tarjeta de video no estan sincronizados. Si mientras el monitor esta actualizando la pantalla con los datos del frame buffer la tarjeta de video cambia el contenido del frame buffer, el fotograma que el usuario vera en pantalla estara compuesto por dos trozos de fotograma distintos, la parte superior de uno y la parte inferior de otro. El VSync es un metodo ideado para resolver este problema, basado en que la tarjeta de video solo podra actualizar el contenido del frame buffer cuando el monitor se lo permita, justo despues de acabar de pintar en pantalla, es decir, se sincroniza el funcionamiento de la tarjeta de video con el monitor.

El problema del VSync

En principio, el VSync resuelve el problema de tearing, pero introduce un nuevo problema de rendimiento. Supongamos que tenemos el VSync activado, nuestro monitor tiene un tiempo de refresco de 75Hz, y nuestra tarjeta grafica esta dando 60 fps. En estas condiciones, el monitor actualiza la pantalla cada 13.33 ms y la tarjeta de video actualiza el frame buffer cada 16.66 ms. El proceso que se seguiria seria el siguiente:
  • El monitor comienza a pintar el contenido del frame buffer en pantalla y la tarjeta de video comienza a pintar en el backbuffer
  • A los 13.33 ms el monitor termina de pintar en pantalla e indica a la tarjeta de video que puede actualizar el frame buffer. Sin embargo, la tarjeta de video aun no ha terminado de pintar en el back buffer, con lo que el frame buffer no se actualiza aun. El monitor comienza a pintar en pantalla otra vez, con el frame buffer sin modificar (es decir, volvera a pintar lo mismo)
  • A los 16.66 ms la tarjeta de video termina de pintar, pero para actualizar el frame buffer debe esperar a que el monitor termine. Es decir, debe esperar (13.33 x 2 - 16.66) = 10 ms para poder actualizar el frame buffer y poder comenzar a pintar de nuevo en el back buffer. Estos 10 ms son tiempo absolutamente desaprovechado por la tarjeta grafica.
  • A los 26.66 ms el monitor termina de pintar en pantalla e indica a la tarjeta de video que puede actualizar el frame buffer. Esta vez si se produce la actualizacion del frame buffer y todo el proceso vuelve a comenzar de nuevo.
En esta situacion el numero de fps real que estamos viendo es de 37.5, ya que cada fotograma de la tarjeta de video precisa de 2 refrescos del monitor. Un numero bastante alejado de los 60 fps que obtendriamos si el VSync estuviese desactivado. Debido a esta forma de funcionamiento, con el VSync activado el numero real de fps que obtendremos sera siempre un divisor de la frecuencia de refresco del monitor (si tenemos un monitor a 60 Hz obtendremos 60, 30, 20, 15, 12, 10, etc.) dependiendo de la velocidad de la tarjeta grafica.

Triple Buffer

El triple buffer se usa para evitar la perdida de rendimiento al activar el VSync. Se basa en que la tarjeta de video utilice dos back buffers para pintar en lugar de uno solo, de forma que cuando ha terminado de pintar un frame, en lugar de esperar a que el monitor le permita actualizar el frame buffer sin hacer nada, puede continuar pintando en el otro back buffer. Activando el triple buffer obtendremos la misma velocidad que si no tuviesemos el VSync activado, y evitaremos tambien el problema del tearing. Pero como no, el triple buffer tiene tambien su contrapartida, ya que cada back buffer consume bastante memoria de video. Con una resolucion de 1600x1200x32 el tamaño de cada buffer es de unos 7.5 Mb. Aunque 7.5 Mb no parecen demasiado para una tarjeta de video con 256 o 512 Mb, el problema se agrava si queremos activar el antialiasing. Si usamos el FSAA 4x, debemos multiplicar el tamaño de cada buffer por 4, con lo que nuestros 7.5 Mb pasan a ser 30 Mb. Y no olvidemos que, como su nombre indica, con el triple buffer activado tenemos 3 buffers (el frame buffer y los dos back buffers), lo cual nos deja ya en 90 Mb... y eso ya duele mas verdad?

Conclusion

Entonces, es bueno activar el VSync o no? Pues depende del caso concreto:
  • Si tu tarjeta de video es muy rapida y siempre va mas rapido que el monitor (es decir, tiene mas fps que Hz el monitor), puedes activar el VSync para mejorar la calidad visual sin problemas de perdida de rendimiento. Solo asegurate de que tus grafica sea realmente rapida y en ningun momento del juego bajen los fps por debajo de los Hz. En este caso no deberias tener el triple buffer activo, ya que solo conseguirias consumir mas memoria sin mejora alguna.
  • Si tu tarjeta de video es lenta y va mas despacio que el monitor, yo recomendaria no activar el VSync. Si para ti el tearing resulta demasiado molesto puedes probar a activar el VSync, pero activando tambien el triple buffer para mejorar el rendimiento.
  • Si lo que quieres es hacer una prueba de rendimiento, por ejemplo para saber como de rapida es tu tarjeta de video, entonces debes desactivar VSync, en caso contrario el numero maximo de fps que obtendrias seria como mucho el numero de Hz de tu monitor.
VSync y triple buffer en CSS

En el apartado de opciones graficas del Counter Strike Source podemos activar o desactivar el VSync, pero no existe la opcion de activar el triple buffer. Sin embargo, y al menos con las tarjetas NVidia, podemos forzar el uso del triple buffer usando el panel de control de la tarjeta de video.

Vertical Synchronization
How VSync works, and why people loahte it
Unraveling the mystery of VSYNC

15/12/07

Activar la consola en CSS

La consola del Counter Strike es una ventana en la que se muestran mensajes de informacion durante el transcurso del juego y donde el usuario puede introducir comandos de configuracion.

En principio para activarla deberia bastar con pulsar la tecla "º" (la que esta a la izquierda de la tecla "1", encima del tabulador), pero hay un pequeño bug con los teclados en español que hace que la consola no se muestre correctamente.

La forma mas sencilla de activar la consola es ir a la pestaña "Mis juegos" en la ventana de Steam, pulsar con el boton derecho sobre el Counter Strike Source y seleccionar la opcion "Propiedades".


A continuacion pulsamos el boton "Establecer opciones de lanzamiento...".


Y en la ventana de opciones de lanzamiento escribimos "-console".


Con esto, la proxima vez que ejecutemos el Counter Strike nos aparecera activada la consola. Si ademas queremos activarla/desactivarla pulsando una tecla durante el juego (por ejemplo la tecla "F3"), podemos escribir el siguiente comando en la propia consola: bind "F3" toggleconsole.

13/12/07

Ping

Los terminos ping, lag y ancho de banda se usan continuamente por los gamers para indicar la velocidad de las conexiones de red, pero sabemos realmente lo que significan los terminos y que implicaciones tienen? Quizas merezca la pena hacer un pequeño repaso sobre el tema:

Lag

El termino lag o latencia se utiliza en comunicaciones para indicar el tiempo que tarda un paquete de datos en ser enviado por una aplicacion, viajar por la red y ser recibido por la aplicacion de destino. Todos los datos enviados tendran un cierto lag, por pequeño que este sea, lo que ocurre es que en la practica se suele emplear el termino solo cuando el tiempo de transmision es percibido negativamente por el usuario. Generalmente la latencia se mide en milisegundos (ms).

Ping

El ping es el metodo que suele usarse por las aplicaciones para medir su latencia. La aplicacion interesada en obtener su latencia envia un mensaje a la aplicacion de destino, otra solicitando una respuesta (mensaje Ping). En cuanto la aplicacion de destino recibe el mensaje Ping envia un mensaje de respuesta (mensaje Pong). Cuando la primera aplicacion recibe el mensaje Pong solo tiene que calcular el tiempo transcurrido para saber cuanto lag tiene.

Ancho de banda

El bandwidth o ancho de banda por su parte indica la capacidad de transferencia de la red, generalmente medido en bits por segundo. Y es en la diferencia entre ancho de banda y lag donde mas confusion suele haber. Es bastante comun pensar que una conexion a Internet con mucho ancho de banda tendra menos lag, pero lo cierto es que ambos conceptos tienen muy poco que ver. Para verlo mas claro, supongamos que nuestra conexion a Internet es un rio que lleva datos en lugar de agua. Que un rio sea muy caudaloso, es decir que lleve mucha agua (ancho de banda) no significa que sea un rio rapido (tenga poco lag). Otro ejemplo bastante bueno es suponer que nuestra conexion es un avion. Un avion con mucha capacidad (ancho de banda) puede resultar mucho mas lento (mas lag) que otro con menos capacidad de carga. Comparad sino un F18 con un Boeing 747. Supongo que parte de esta confusion viene fomentada porque los operadores de telefonia anuncian el ancho de banda como "velocidad" y no como "capacidad" como deberian.

En la practica

Desde el punto de vista de los juegos, es muchisimo mas importante tener una conexion con poco lag que una con mucho ancho de banda. La mayoria de los juegos solo necesitan unos poco Kb/s para funcionar correctamente, pero tener mucho lag puede hacer estragos en la jugabilidad, especialmente en los FPS (First Person Shooters, no confundir con frames per second). Y cual es un valor de latencia aceptable? Depende del juego en concreto. Jugando en red local en el Counter Strike Source la latencia esta en torno a los 5 ms. El objetivo deberia ser conseguir esa latencia jugando tambien por Internet, pero en la practica los tiempos aceptables estan entre los 20 y los 60 ms. De 60 a 80 el lag empieza a ser muy molesto, y todo lo que pase de 80 es muy malo, al menos en mi opinion.

Tambien es importante no confundir el lag de la red con que nuestro ordenador sea lento y no este dando suficientes fps. Si estamos jugando en red local y tenemos un lag de 5 ms, pero nuestro ordenador va a 30 fps, el tiempo de pintado entre frames sera de 33.33 ms, y sera donde este nuestro verdadero cuello de botella. Deberiamos tratar siempre de tener el mayor numero de fps posible en nuestro juego.

La mala noticia es que pocas cosas podemos hacer nosostros para mejorar nuestro lag. Lo mas basico es no tener ningun otro programa haciendo uso de la red, especialmente los P2P (emule y demas). Y eso incluye todos los ordenadores que tengamos en casa, no solo el que estemos usando para jugar. Si tenemos un router wifi podemos probar a deshabilitar el wifi y conectarnos al router mediante un cable, o podemos probar a cambiar nuestro router si sospechamos que pueda estar estropeado. Pero al final, todo depende del servicio que nos de nuestro operador de internet. Si tu conexion va mal siempre puedes cambiarte de operador, pero poco mas. Quizas en un futuro los jugadores empiecen a demandar conexiones a Internet de baja latencia, y los operadores tomen nota de ello...

It's the latency, Stupid
Bandwidth and Latency

11/12/07

Demasiados FPS?

Cuantos fps son necesarios para jugar al Counter Strike? 30? 60? 100? mas? existe un limite? Esta pregunta aparentemente sencilla puede resultar bastante complicada de responder.

Para empezar, una bonita definicion. Como cualquier gamer medio decente sabe, fps, frames per second o tambien fotogramas por segundo es el numero de imagenes que vemos en pantalla en cada segundo. Si un juego va a pocos fps los movimientos empiezan a resultar torpes y en algunos casos el juego puede resultar frustrante e injugable.

Los fps no son una medida lineal

Los fps se han convertido en el metodo estandar para medir la velocidad de ejecucion de los juegos. Sin embargo, hay un pequeño y sutil problema con el uso de este metodo: desde un punto de vista matematico, los fps no son una medida lineal. Que quiere decir esto? Veamoslo con un ejemplo.

Supongamos que tenemos dos tarjetas graficas distintas, y tras evaluar el rendimiento de ambas en nuestro juego con las sombras al minimo y con las sombras al maximo obtenemos los siguientes resultados:

Tarjeta 1 (Sombras al minimo) = 900 fps
Tarjeta 1 (Sombras al maximo) = 500 fps

Tarjeta 2 (Sombras al minimo) = 60 fps
Tarjeta 2 (Sombras al maximo) = 55 fps

La medida de fps es util para saber que tarjeta es mas rapida, pero no lo es tanto para evaluar las diferencias de rendimiento reales. Por ejemplo, diriamos que hay mas diferencia de rendimiento al activar las sombras de alta calidad en la tarjeta 1 o en la 2? Atendiendo unicamente a la medida de fps podriamos pensar que hay mas diferencia en tarjeta 1, ya que pierde nada menos que 400 fps, mientras que la 2 unicamente pierde 5...

Sin embargo, si pasamos los fps a milisegundos (ms), es decir, si calculamos el tiempo que tarda en pintar cada fotograma, puede que nos llevemos una sorpresa:

Tarjeta 1 (Sombras al minimo) = 900 fps = 1000 / 900 = 1.11 ms
Tarjeta 1 (Sombras al maximo) = 500 fps = 1000 / 500 = 2.00 ms

Tarjeta 2 (Sombras al minimo) = 60 fps = 1000 / 60 = 16.66 ms
Tarjeta 2 (Sombras al maximo) = 55 fps = 1000 / 55 = 18.18 ms

Es decir, activar las sombras complejas en la tarjeta 1 ha costado 0.89 ms, mientras que en la tarjeta 2 ha costado 1.52, con lo que la perdida de rendimiento ha sido mayor en esta ultima.

En el siguiente cuadro podemos ver la curva que describen los fps en relacion al tiempo que se tarda en pintar cada fotograma.
Cuantos fps puede detectar el ojo humano?

Vale, si, muy bonito, pero aun no sabemos cuantos fps hacen falta para jugar al Counter Strike no? En realidad la pregunta que deberiamos hacernos es "cuantos fps es capaz mi ojo de procesar?" Hay quien dira que en el cine se usan 24 fps, y que ya se ve de sobra... Lo cierto es que si nos ponemos quisquillosos, en realidad el cine va a 48 fps, ya que cada fotograma se repite 2 veces para minimizar el parpadeo percibido. Pero la cuestion es que no queremos saber a que numero de fps se ve aceptablemente bien, sino en que momento dejamos de percibir una mejora por aumentar el numero de fps. Hace unos años la USAF realizo un experimento con pilotos de cazas de combate que consistia en situarlos frente a una pantalla en una habitacion oscura y mostrar durante un breve instante de tiempo una foto de un avion. Los pilotos tenian que tratar de identificar el avion de la foto, y cada vez se mostraba la imagen durante menos tiempo. Los resultados demostraron que los pilotos eran capaces de identificar los aviones con tiempos de exposicion de las fotos de tan solo 4.5 ms, es decir, unos 220 fps. La realidad es que no se sabe donde se encuentra el limite real del ojo humano, pero lo que si es seguro es que es capaz de percibir mas de 200 fps.

En la practica

Asi pues, el ideal seria que nuestro juego corriese al menos a esos 200 fps. En la practica, y desde mi experiencia, el objetivo deberia ser que en ningun instante del juego estuviesemos por debajo de 100 fps. Resalto lo de "en ningun instante", ya que los fps no son siempre constantes, y en momentos de mucha intensidad de fuego, con granadas, humo y jugadores por todas partes el rendimiento baja considerablemente y el tiempo de frame puede incrementarse facil un par de ms. Y ya sabemos lo que un par de ms pueden hacerle a nuestros fps verdad?

How many frames per second can the human eye see?
FPS Versus Frame Time
Human Eye Frames Per Second

Gaming Hardware

Tarjetas graficas de ultima hornada, ratones con 4000 dpi, teclados retroiluminados, auriculares 5.1, alfombrillas especiales... Realmente todos estos perifericos para gamers merecen la pena o simplemente los fabricantes han encontrado un filon para alimentar la vena consumista de los gamers?


"Que pasa, que con ese raton matas mas?" La tipica frase de jugador casual al enterarse del precio de tu nuevo raton. A alguien mas le suena? Bien, no es que con un raton bueno vayas a jugar mejor, es que con uno malo puede que juegues peor.

Evidentemente, todo depende del tipo de jugador que seas (casual o hardcore) y de lo bueno que seas jugando. Cuanto mejor seas, mas sentido tiene tratar de tener el mejor hardware posible.

Creo que un buen ejemplo seria comprarse unas buenas zapatillas para ir a correr. Si nunca has hecho deporte y vas a correr por primera vez, da igual las zapatillas que uses, el limite lo encontraras en tu resistencia muscular o pulmonar. Sin embargo, para un corredor olimpico de maraton, que esta tratando de obtener su maximo potencial, las zapatillas son algo muy importante que puede ser determinante. No parece buena idea correr mas de 40Km con unas zapatillas que te quedan pequeñas verdad?

En el Counter Strike, las habilidades que se ven condicionadas por el hardware, como pueden ser la punteria, los movimientos y la rapidez de reflejos son solo una pequeña parte de la ecuacion. Tan importante como estas o mas son la estrategia y la tactica, el juego en equipo, la intuicion y la experiencia. Si un jugador no domina las ultimas, da igual que raton tenga, sera un jugador malo o mediocre, pero para un jugador que si lo hace, un buen raton puede hacer que juegue mejor. O mejor dicho, un mal raton puede hacer que juegue peor, porque falle un tiro, o porque necesite unos milisegundos mas para hacer un movimiento. El objetivo del hardware para gamers es que el limite venga siempre impuesto por tu propia capacidad, y jamas por motivos ajenos a ti.

En resumen, para un jugador casual, no tiene ningun sentido dejarse el dinero en este tipo de perifericos, pero para jugadores hardcore es imprescindible, al menos desde mi punto de vista.

Bunny Hopping

Segun la wikipedia, el bunny hopping o bunny jump es un termino usado en videojuegos para describir una tecnica de movimiento basada en desplazarse por el mapa saltando en lugar de corriendo. Debe quedar claro que el bunny jump no se trata de un hack o cheat, es algo perfectamente legal y posiblemente contemplado por los creadores del juego. Otra cosa es que existan cheats que permitan realizar los saltos de forma automatica, lo que deja inmediatamente de ser legal.

En la practica, proporciona al jugador que lo domina una ligera ventaja sobre el resto, ya que le permite moverse por el mapa con mayor rapidez y acceder a sitios a los que normalmente no podria llegar. Aunque en el Counter Strike Source es mas dificil de realizar que en el Counter Strike original o en el Quake, sigue siendo posible.

El termino flash boost por su parte, se refiere a una "perversion" en la fisica del juego, que permite a los jugadores realizar saltos enormes si son impulsados por una granada mientras estan en el aire. Es relativamente facil de conseguir, pero evidentemente hacen falta dos personas, la que lanza la granada y la que realiza el salto.

A continuacion unos cuantos videos sobre el tema, por si os ha picado la curiosidad:

Jumping to sky 1
Jumping to sky v2 #1
Jumping to sky v2 #2
Jumping to sky v2 #3
FlashJump
Trickjumping de_nuke
The World Of Jumps 2
The World Of Jumps 3
The World Of Jumps 4

Y si quereis probar vosotros mismos el bunny hopping, hay un par de videos y una pagina con tutoriales sobre el tema:

CSS bunnyhop tutorial
CSS Bunny Hopping Tutorial
BunnyHopping Made Easy
CSS Bunny Hopping Tutorial

Personalmente creo que es una tecnica bastante util, pero dificil de aprender. Para llegar a dominarla, no creo que merezca la pena obsesionarse y dedicarle demasiado tiempo de "entrenamiento" especifico. Lo que yo suelo hacer es practicar cada vez que llego a una rampa en una partida publica, y asi poco a poco vas pillandole el tranquillo. Eso si, imprescindible asignar el salto a la rueda del raton, sino es poco menos que imposible.

Hello World

Hola amigos! Bienvenidos a este blog friki sobre el Counter Strike Source. En los proximos dias ire posteando sobre diferentes temas relacionados con el Counter. Espero que os guste!

PetrusRex