Logo DX10Una de las mayores evoluciones en la industria de los juegos ya se encuentra aquí. El sólo hecho de que Microsoft haya lanzado un nuevo sistema operativo es de por sí interesante, pero esta vez no viene solo, porque junto con su nuevo Windows Vista, la empresa de Redmond introdujo un nuevo API, desarrollado desde cero.

En un principio esta nueva generación tenía como nombre Windows Graphic Foundation (WGF 1.0), pero al momento de su lanzamiento junto a Windows Vista, se decidió mantener el antiguo nombre, aunque no comparte códigos con las versiones anteriores de Direct X. La estructura de estas librerías de programación de videojuegos sufrió importantes cambios, el primero y más habitual es que será más rápido que los anteriores, decimos habitual porque cada DirectX que sale nuevo dicen lo mismo.

caja VistaPor otro lado debido a que hay importantes cambios en la forma interna de su funcionamiento y que el DirectX 10 es exclusivo para el Windows Vista, la retrocompatibilidad con anteriores versiones de DirectX será algo limitada. Por decirlo en otras palabras, DirectX 10 no será compatible ni con los programas DirectX 9, pero llevará una especie de emulador que servirá para mantener a todos los títulos actuales funcionando en nuestros equipos, eso sí, al ser una emulación el rendimiento no será el mismo.

Claro que hoy en día todos nos cuestionamos los requerimientos de este nuevo sistema operativo, y hasta las grandes empresas dudan en instalarlo; pero no estamos aquí para ver si es bueno o malo, cada cual tomará sus propias decisiones, la nota está centrada principalmente en Direct X 10(DX10) y las ventajas que trae al mundo gaming esta nueva API.

Interiorizándonos

DX logo2La Interfaz de Programación de Aplicaciones, (Application Programming Interface = API), es un conjunto de funciones o sub aplicaciones de bajo nivel residentes en bibliotecas (generalmente dinámicas) que permiten que una aplicación utilice estas funciones por debajo del sistema operativo, sin que este ultimo genere una pérdida de performance en los programas que hacen uso intensivo de 3D principalmente.

Originariamente, se incluyó DirectX para que los desarrolladores pudiesen tener acceso a varios aspectos de una placa de video, tarjeta de sonido y dispositivos de entrada (mouse, teclado, joypad, etc) sin la necesidad de programar individualmente para cada hardware. Fue una solución para unificar todos los dispositivos dentro de un paquete general que pueda controlar todos los dispositivos que se adjuntaban a una PC, de esta manera los programadores podían enfocarse al diseño de los programas y no a su interactividad con los periféricos, y la evolución de los mismos.

DirectX esta compuesto de varios sub API´s, entre las que se incluyen DirectSound, DirectInput y DirectMusic. El componente que ha tenido mayor evolución ha sido Direct3D, debido al gran desarrollo de las tarjetas de video.

Las funciones API se dividen en las siguientes:

  • Depuración y manejo de errores
  • E/S de dispositivos
  • DLLs, procesos e hilos
  • Comunicación entre procesos
  • Manejo de la memoria
  • Monitoreo del desempeño
  • Manejo de energía
  • Almacenamiento
  • Información del sistema
  • GDI (interfaz gráfica) de Windows
  • Interfaz de usuario de Windows

Con esto ya disponemos de una leve noción de la importancia de DX, pero como comente en el principio de esta nota, veremos que novedades trae esta nueva generación de API´s. Como así ver realmente si las promesas de Microsoft sobre las ventajas y la necesidad de adquirir nuevo hardware van de la mano.

El DX10 es otra versión de DirectX, eso está claro, pero es necesario contrastar sus atributos con los de su antecesor, DX9, para poder entender la importancia del cambio. Mal que mal, DX9 apareció en el 2002 y aunque en su momento fue un gran adelanto, han aparecido tecnologías nuevas que lo han convertido paulatinamente en obsoleto.

DX9 dx10

La gran limitación de DX9 es el “Object Overhead”, debido a esto, es necesario plantear un API que corrija este problema. En palabras simples, DX9 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. Estas llamadas son manejadas por el CPU y eso utiliza recursos muy valiosos y limitados, tengamos en cuenta que cada vez que pasamos por un API, o proceso intermedio, el CPU, no solo tiene que organizar el proceso, sino que traducir (en algunos casos) la información de un lenguaje a otro. Ambas características convierten al Object Overhead en un importante cuello de botella.

Dentro de este proceso hay limitaciones de cuántos objetos puedes mostrar en la imagen en un momento dado en un frame (cuadro). La cantidad máxima de objetos en cada frame actualmente es de aproximadamente 500 objetos. Lo anterior obliga que los desarrolladores deban balancear cuidadosamente el juego, para que este no se congele en medio de una partida. Por más que pensemos que 500 objetos es un límite generoso, la progresiva complejidad de los escenarios de los juegos, orientadas a ofrecer una experiencia más envolvente, ha terminado por requerir más que esa cifra, y dicha limitación la podemos ver simplemente en los juegos que tienen paisajes, junglas, etc. Si prestamos atención veremos que un mismo árbol se reproduce infinidad de veces y en diferentes perspectivas y tamaños para dar la impresión de que son muchos, cuando en realidad es el mismo, este es un recurso de los programadores para poder poner mas cantidades de objetos diferentes en un mismo frame, y de esa forma sortear la inconveniencia y tratar de mostrar un paisaje lo más realista posible. DirectX 10 eliminará esta limitación y será posible, por ejemplo, introducir miles de árboles distintos en un frame dado.crisys2

Con la desaparición del Overhead veremos además una reducción en el tiempo de ejecución de los juegos. Actualmente DirectX 9 y el driver producen el 40% del tiempo de la ejecución de un proceso, DirectX10 reducirá a la mitad esa proporción y permitirá poner más objetos únicos en un frame. Aún podremos encontrar límites en cuanto a cantidad de objetos pero ya no será el API el factor limitante sino sólo el GPU y la imaginación de los desarrolladores.

Claro que no solamente se reducirá la carga al CPU, en los procesos, sino que también se podrán realizar cálculos de física en los GPU, aumentando drásticamente la calidad de lo que podemos ver en pantalla.

Limitaciones de un Pipeline Fijo

La siguiente limitación de DirectX 9 y las GPUs actuales es la naturaleza de sus pipelines, que es orientado a una función fija. En una GPU los Procesadores de Vertex constituyen un conjunto separado de los Procesadores de Pixeles, y dependiendo de la escena puede darse el caso que un conjunto esté utilizado al 100% mientras el otro está en reposo. El hecho de que los shaders cumplan una tarea específica redunda, entonces, en una permanente subutilización de recursos.

Una de las nuevas características de DirectX 10 es una nueva etapa en el pipeline, llamado Shader de Geometría. Este nuevo shader se incorpora a la idea de un pipeline unificado y será una nueva etapa en este componente. La gracia del Shader de Geometría es que ayudará a tener escenas más complejas, al permitir que el desarrollador del juego tome formas simples (puntos, líneas o triángulos) y generar objetos complejos a su alrededor. Este nuevo atributo permitirá nuevos e interesantes efectos como son el el Mapping Displacement en tiempo real y Motion Blur real, y no como se realiza hasta el momento, simplemente sacando de foco parte de la imagen.

Stream Out

Esta es una función nueva también en la arquitectura de DirectX 10 y se encuentra asociada a los Shaders de Geometría. El Stream Out permite guardar información de los Vertex shaders o de los Geometry shaders en el buffer y habilita la opción de múltiples pasadas en el Geometry shader, aligerando la carga de transacciones en la GPU y buscando directamente en la memoria de la placa de video los datos ya procesados.

Arquitectura Unificada

Estructura de Shaders Unificados

pipelineDX10 pipelinenvidia DX10

Como dijimos antes, actualmente los Pixel y Vertex shaders existen en conjuntos separados. Sin embargo, para ser compatible con DirectX 10 el hardware deberá pasar a ser completamente unificado. Esto significa que cualquier shader unificado debe ser capaz de funcionar como Vertex Shader, Pixel Shader o Geometr Shader indistintamente y según la ocasión lo requiera. De este modo ya no habrá tarjetas con X pixel shader e Y vertex shaders. Simplemente tendrá N shaders unificados y con esta modificación toma gran importancia a que velocidad los Shader trabajan, y de esta manera podamos usar toda la potencia de la VGA para procesar vértices o bien pixeles, evitando tener recursos desaprovechados.

Mayor nivel de detalles

Para desplegar una imagen, el API interpreta y ejecuta las instrucciones con que un desarrollador le “describe” una figura. Con DX10 esta interpretación y ejecución resultará en formas más detalladas y realistas. Veamos por ejemplo el nivel de realismo en la cara de algunos personajes en Crysis (juego DX10 por venir).

Caras Crisys

Si comparamos las fotografías, que DirectX 10 agrega un nuevo nivel de realismo a los juegos haciendo a los personajes más reales. Otro ejemplo, en donde una misma figura es interpretada y procesada por DX9 (a la izquierda) y por DX10 (a la derecha)

pez1 pez2
DirectX 9 “simula” detalles con técnicas como mapping normal mientras DirectX 10 incrementa el nivel de detalles en los personajes y materiales.

sombrasEn DirectX 9 la sombra es generada en el CPU, reduciendo el rendimiento del sistema en conjunto con cada nuevo objeto con sombra que aparezca en la imagen. En DirectX 10, la sombra puede ser generada y renderizada completamente en la GPU, aprovechando su capacidad de hacer cálculos en paralelos con enorme potencia.

Avion

CRYSIS *new trailer*
03:22

Características principales

Las más importantes son:
- 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. También se permitirá el Geometry Instancing como es debido, dibujando muchos objetos repetidos (soldados, por ejemplo) con una única llamada a la API.

- Se especifican con mayor claridad algunas de las características de los dispositivos, por ejemplo se pide el modelo de Shaders unificados; esto significa que los shaders de la tarjeta son polivalentes, y pueden actuar como Vertex, Pixel, o el nuevo Geometry, según las necesidades.

- Shader Model 4.0. Se aumenta el número de muchas cosas (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: Una mejora muy interesante. 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 procedural, o hacer LOD de geometría en tiempo real, cosas así.

Compatibilidad PC & Xbox 360 (en proceso) – Un único sistema para las dos plataformas, esto permitirá a usuarios de cualquiera de las 2 plataformas interactuar en mundos virtuales en línea sin inconvenientes y hasta participar de competencias, algo que yo veía particularmente lejos en el tiempo, ya es una realidad. La plataforma que no distingue si eres un PC o una XBox

Desmitificando

Claro que no todo es color de rosa para este nuevo API, Tim Sweeney (uno de los fundadores de Epic) en una conferencia, puso en tela de juicio si esta tecnología ciertamente representará un avance tan grande en la industria. “Unreal Engine 3 hará un uso extensivo de DirectX 10, así como muchos juegos nuestros y de nuestros socios, que saldrán en 2007. Pero, aparte del bombardeo publicitario, DirectX 10 no es tan diferente de DirectX 9, por tanto, principalmente, verás beneficios en el rendimiento con DirectX 10, en lugar de diferencias visuales llamativas”, expuso Sweeney.

Bien, como verán en este informe, solo falta que salgan los nuevos juegos con soporte de DX10 para poder ver realmente si es conveniente pasarnos de tecnología e invertir una gran suma de dinero para poder jugar a los últimos juegos.

Hoy por hoy las consolas son las que mandan, son las más rápidas, y con mejor gráfica que se puede apreciar. La PC siempre tarda varias generaciones en realizar saltos para posicionarse como la reina absoluta en materia de juegos y, claro está, en la gráfica de los mismos … y creo que esto está muy cerca, gracias a DX10.

Imagenes en DX10
Alanalan2
paisajedx10UT2k7paisaje2