De DirectX 9 a DirectX 10, un viaje de calidad

DirectX 10 es la nueva API de Microsoft para juegos que acabará convirtiéndose en el estándar para PC o, al menos, esa es la intención de Microsoft. Es una herramienta potente, desde luego, pero también es potente el ordenador necesario para conseguir que “ande”. Y si además quieres que corra, hoy por hoy hay que soltar una cantidad de dinero importante para conseguirlo.

Aún así, se trata de una API que demuestra como un mismo juego puede ser totalmente diferente dependiendo la versión de DirectX que utilices. Y el máximo exponente de este tema es Crysis, el juego de acción de los creadores de Far Cry. Con este ejemplo, intentaré aclarar y resumir las diferencias que hay entre la versión 9 y 10 de DirectX y como puede cambiar la forma de ver los juegos.

Lo primero, y más obvio, que hay que decir es que DirectX 10 sólo funciona con Windows Vista, el nuevo sistema operativo de Microsoft. Pero, además hay dos detalles más. En primer lugar, no funciona con todas las tarjetas gráficas, ahora mismo sólo con la última generación de nVidia (8xxx) y las tarjetas ATI más recientes.

Lo segundo es que si tenemos ambas cosas, no disfrutaremos de ello en juegos que utilicen DirectX 9, principalmente porque DirectX 10 conserva el nombre básicamente para que no nos confundamos. En realidad, esta última versión no es compatible con anteriores versiones de DirectX. Por eso, Windows Vista emula DirectX 9 en la mayoría de juegos del mercado.

¿Por qué se planteó entonces Microsoft crear una API completamente nueva para el sistema operativo? Por algo muy simple y a la vez muy complejo: las limitaciones de DirectX 9.

Y es que la gran limitación de DX9 es el “Object Overhead”, que en palabras más simples, significa que DirectX 9 utilizaba ciclos de nuestra CPU para hacer renders antes de ser enviados a la GPU. Cuando se renderiza un juego, la aplicación primero debe llamar al API y luego el API llama al driver antes de poder llegar a la GPU. Todas estas llamadas son manejadas por la CPU y eso conlleva que se cree un importante cuello de botella.

Debido a estos problemas iniciales, Microsoft se dio cuenta de que era necesario crear limitaciones de objetos y, ahora mismo, la cantidad máxima de objetos en cada frame es de aproximadamente 500 objetos. El resultado es que casi siempre los desarrolladores deben balancear cuidadosamente el juego, para que este no se “cuelgue en medio de una partida”.

Un ejemplo bastante claro es la creación de un bosque. Si prestas atención en un bosque verás que un mismo árbol se repite infinidad de veces y en diferentes perspectivas y tamaños para dar la impresión de que son muchos. Este es uno de los recursos que los programadores utilizan para poner mas cantidad de objetos en un mismo frame, tratando de mostrar un paisaje lo más realista posible. Así DirectX 10 elimina esta limitación y es posible, por ejemplo, introducir miles de árboles diferentes como muestra Crysis.

Con la desaparición de este problema, además se reduce nada más y nada menos que a la mitad el tiempo de ejecución de un proceso. Con DirectX 10 se podrán realizar cálculos de física en los GPU, aumentando drásticamente la calidad de lo que podemos ver en pantalla.

La diferencia se aprecia en la siguiente pantalla de Flight Simulator X:

Microsoft también dio algunas de las características principales:

  • Llamadas a la API más eficientes: (hasta un 10%) y menos frecuentes (se evitan muchas llamadas para cambiar renderstates y similares): Reduciendo este número se aligera la carga de CPU sobre la parte gráfica de la aplicación, lo que permite aprovechar mejor ambos sistemas.
  • Shader Model 4.0.: Se aumenta el número en general (límite de registros, de render targets, de bytes en el vertex buffer…). Además, se permite el acceso a texturas sin restricciones desde cualquier tipo de shader (en el SM3.0, se podía acceder a texturas en el Vertex Shader, pero de forma poco eficiente y restringida).
  • Geometry Shader: Este shader se coloca entre el Vertex y el Pixel Shader, y tiene una característica que no tienen los otros dos: Puede aumentar o disminuir el número de elementos que pasan a la siguiente fase. Incluso puede acceder a memoria del sistema, para guardar o cargar elementos. Teóricamente, esto permitiría crear geometría de forma procedimental, o hacer LOD de geometría en tiempo real, cosas así.

En resumidas cuentas, y dejando aparte las características técnicas y más complejas de DirectX 10 –sólo están algunas de las más importantes-, esta nueva API ofrece un cambio sustancial ya que la calidad que podremos ver en juegos como Crysis es realmente espectacular. Y es que hasta la llegada de las nuevas consolas, parecía que el PC era el nuevo rey en materia gráfica del videojuego. Ahora, con esta nueva API y el juego adecuado el PC puede superar de nuevo a las consolas de última generación.

Os dejo con un par de vídeos de Crysis muy espectaculares y que me han llamado especialmente la atención porque nos muestran dos escenas del juego. En los primeros segundos de cada vídeo vemos el juego como sería en DirectX 9 y después en DirectX 10.

[gametrailers 19968]

Como se puede observar, hay muchos más efectos visuales, aunque lo más impactante es el efecto físico -otra de las particularidades de DirectX 10- que permite cambiar la orientación de llamas y humo simplemente con el aire

[gametrailers 19966]

En este puedes observar que todo el sombreado cambia y que el número de partículas ha aumentado drásticamente, así como efectos colaterales y físicos del juego.

Cargando comentarios