DirectX 10, la verdadera nueva next-gen
He pensado en hacer una serie de artículos sobre DirectX 10 que llega justo con el revuelo de la salida al mercado de Wii y PS3, aunque en realidad el salto tecnológico que va a suponer es, en mi opinión, muy superior al de ambas consolas.
He partido el artículo, pues me ha salido bastante largo, y al final no se si se quedará en dos o tres partes, en la primera explicaré qué es DirectX10, que diferencias trae con respecto a DirectX9. En el segundo haré una pequeña introducción al nuevo Pipeline que introduce DirectX 10, qué mejoras suponen los Shaders unificados (ya se intuye del primer artículo) y una comparativa con screenshots de DirectX 10. En el último artículo comentaré qué podemos esperar de DirectX 10.1, por qué esas mejoras no estan en DirectX 10 y qué supondrá desde el punto de vista visual y en el performance. Finalmente en ese artículo haré mi análisis subjetivo y comparativo entre PC y las consolas, intentando centrarme en la estrategia de Microsoft.
Antes de nada habría que empezar contestando muy brevemente a la pregunta ¿qué es DirectX?, pues bien, se puede decir que DirectX nació como una herramienta de abstracción que aísla el Software (SW) que usa el sonido, los gráficos y los dispositivos de entrada como Joystick, volantes y demás, del Hardware (HW) que hace el trabajo. Es una interfaz (API) que se “monta” encima de los drivers de cada uno de los dispositivos, con el objetivo de aislar al software cliente (juegos, por ejemplo) de los drivers.
Esta aproximación, aunque cómoda para los programadores e impulsadota de un SW más estándar (los desarrolladores no se preocupan del HW, sólo de DirectX) no deja de estar sujeta a ciertas restricciones que la propia API provoca al SW, es decir, nos podemos encontrar con casos teóricamente posibles desde el punto de vista de la capacidad del HW pero que la propia API no es capaz de gestionar, suponiendo con ello un problema insalvable.
Obviamente, todos esos cambios no se harán de espaldas a los principales fabricantes de tarjetas gráficas y será con ellos con quienes se negocie la salida de cada una de las tecnologías. Esto para el usuario final es muy bueno por que su elección se reducirá a conocer que extensión de DirectX que cumple el HW que desea comprar y el desempeño final de ese HW.
Los desarrolladores, por otro lado, no se tendrán que preocupar de que sus motores aprovechen tecnologías que usa una familia concreta de tarjetas gráficas y los usuarios no verán infrautilizado su HW por que algunos estudios no aprovechan al 100% la potencia de las gráficas no implementando determinadas características de sus tarjetas gráficas.
Este nuevo modelo y la estrecha relación de DirectX 10 con el SO, hace del todo imposible que Windows XP pueda ejecutar DirectX 10 y por tanto será exclusivo de Windows Vista (además del componente de marketing que tiene la exclusividad en Win Vista y la necesidad que crea en el usuario de actualizarse a Vista). Veremos también, como la compatibilidad hacia atrás de DirectX 10 con DirectX 9 no será directa y se hará a través de un emulador, esta versión se llamará DirectX 9L.
Entonces, cuales eran las restricciones principales que DirectX 9 suponía para los desarrolladores? Y cuales son las nuevas características que oferta DirectX 10?
El Juego, para cada uno de los objetos que debe renderizar en una la escena, hace uso de la API, esta a su vez llama al Driver de Video que será el SW que hace uso de nuestra tarjeta de video. El problema está en que todas estas llamadas API+DRIVER deben ser gestionadas por la CPU, pudiendo llegar a tener un coste del 40% del tiempo de ejecución. Con DirectX 10 este cuello de botella se ha reducido a menos de la mitad.
Obviamente, este problema no es menor si tenemos un gran número de objetos (como personajes, una silla, un coche … etc) en escena, pues cada uno de esos objetos necesitan un tratamiento específico y llamadas al API y al Driver. Actualmente la limitación que causa la API esta en aproximadamente 500 objetos, con DirectX 10 se esperan poder tener hasta miles de objetos en una misma escena.
Esta limitación de objetos en escena hace sufrir la inmersión del jugador en el entorno y se espera que tengamos escenas realmente impresionantes con la nueva tecnología, mucho más cercanas a la realidad.
Otra de las restricciones en DirectX 9 y las GPUs actuales es el hecho de tener caminos de Pipeline fijos, de nuevo me explico mejor:
Actualmente las tarjetas de video disponen de dos componentes principales a la hora de gestionar los objetos, vertices y puntos de una escena, esos dos componentes son el Vertex Sader y el Píxel Shader. Para que nos hagamos una idea, los objetos son tratados primero por el Vertex Shader y después estos son pasados por el Píxel Shader en el camino a la renderización final y por el que cada punto es tratado dependiendo de una serie de factores como el ambiente, la luz… y un largo etcétera (todo esto, simplificando bastante!).
Pues bien, el número de elementos de ejecución tanto para los Vertex Shader como los Píxel Shader son uno de los puntos a favor de cada una de las tarjetas gráficas. Para hacernos una idea, actualmente la ATI X1900XTX cuenta con ocho unidades Vertex y cuarenta y ocho (16*3) para píxel, en cuanto que una NVIDIA 7950GT tiene 24 pixel Shaders y ocho Vertex Shader (mas info aquí). En un caso real (como el presentado en la gráfica de abajo) no es de extrañar que suceda que en un momento concreto necesitemos muchos Píxel Shader pero pocos Vertex y viceversa. Con el estado actual de las cosas y puesto que contamos con un Path fijo, esta situación es inevitable, pero si en vez de tener unidades especializadas en cada una de las tareas, simplemente tuviéramos unidades de ejecución genéricas, podríamos reutilizarlas y no tenerlas infrautilizada algunas, mientras que otras están saturadas..
En el siguiente artículo contaré qué son los Shaders Unificados, qué es Shader 4.0 y veremos ejemplos del salto tecnoglógico que supone DirectX 10 con respecto a DirectX 9.