in

DirectX 10

La próxima generación del conjunto de librerías de Microsoft se acerca. Según se estima, esta actualización será mucho más impactante que las anteriores. Los motivos los podrán encontrar en las siguientes líneas
La mayoría de ustedes habrá oído alguna vez la palabra DirectX. El común de los usuarios desconoce su función y sólo se limitan a instalarlo. Es que, en verdad, tampoco es necesario conocer de qué se trata. Con que ayude a que los juegos se ejecuten es suficiente.
Ahora les surgió la duda, ¿verdad?. Entonces podríamos despejarla diciendo que DirectX es un conjunto de APIs destinadas al manejo -mediante la programación- de los aspectos relacionados con la multimedia. En tanto que un API (Application Programming Interface o Interfaz de programación de aplicaciones) es un conjunto de recursos de programación -como funciones, rutinas, etc- encargado de interactuar con un dispositivo en particular.
El paquete DirectX incluye APIs como Direct3D (para gráficos 3D), DirectSound (para sonidos), DirectPlay (para comunicaciones de red), entre otras. La última versión disponible para el usuario común es la DirectX 9.0c, cuyas especificaciones incluyen, por ejemplo, el soporte para Shader Model 3.0. Hago esta aclaración porque, debido a que nos acercamos al lanzamiento de DirectX 10, una versión de prueba ha sido distribuida entre la comunidad de programadores para ir conociendo sus funcionalidades y corrigiendo los errores encontrados. Para conocer más acerca del Shader Model 3.0 y de los shaders en general (recomiendo hacerlo, ya que los mencionaremos varias veces en esta nota), remítanse al articulo “Pixel y Vertex Shaders”, en esta misma sección.
Otro detalle que vale la pena dejar en claro es que el API de gráficos 3D de DirectX 10 tiene distintas denominaciones, ya que el nombre definitivo todavía no ha sido confirmado. Por ello, es posible que lo encuentren como Windows Graphics Foundation, DirectX Next o Direct3D 10. Aunque esta reseña está estrictamente relacionada con este API, nos referiremos al paquete en su conjunto con el nombre de DirectX 10.

Hace un largo tiempo que Microsoft lanzó la primera versión de DirectX: estamos hablando de DirectX 3. A ésta le siguieron DirectX 5, 6 y 7, cada uno con distintas variaciones de funcionamiento, que lograron colocar a DirectX como un estándar dentro del entorno Windows. La verdadera revolución comenzó a partir de DirectX 8, con la inclusión de las instrucciones para shaders. Hasta ese momento, los programadores estaban atados a las funciones predeterminadas que podía llevar a cabo la GPU. En cambio, a partir de esta versión, la libertad a la hora de desarrollar escenas en tres dimensiones creció exponencialmente, gracias al concepto de “shaders programables”. Pero seguía habiendo una limitación, y ésta estaba dada por los recursos de programación implicados: variables, constantes, registros. Más precisamente, por la cantidad de cada uno de ellos. Con la salida de DirectX 9.0c (hubo varias versiones entre medio) este problema ya no suponía una complicación para el programador. De hecho, aún hoy no existen aplicaciones que aprovechen las capacidades que el Shader Model 3.0 -incluido en DirectX 9.0c- tiene para ofrecer.
No todo es tan alentador como suena. Incluso en la última revisión de DirectX, existen serias limitaciones. Si bien actualmente el “cuello de botella” pasa por el potencial de los procesadores gráficos, hay cuestiones de funcionamiento interno de estas librerías que, de no actualizarse, podrían llegar a resultar una complicación en el futuro. Aquí es donde entra en juego DirectX 10, que solucionará estos contratiempos llegado el momento. Pero antes de referirnos a él, veamos en detalle las mencionadas limitaciones.

La primera se conoce como el problema del small batch. En el proceso de renderizado (dibujado) de una escena 3D, la aplicación llama en primera instancia al API, que a su vez se comunica con el controlador de video, el cual hace llegar las instrucciones a la GPU. Todos estos procesos previos están manejados por la CPU, lo que se traduce como una pérdida de valiosos ciclos de la misma (se estima que este trámite consume hasta un 40% de tiempo de ejecución). La consecuencia llega al momento de mostrar simultáneamente muchos objetos “únicos”en pantalla: la cifra máxima se calcula en 500 por cuadro en un determinado momento. Cualquier otro número mayor produciría un cuello de botella con la CPU, causando un notable impacto en el rendimiento. Esto obliga a los programadores a balancear la carga de procesamiento, y para ello recurren a diversas técnicas. Por ejemplo, en el caso de los árboles de un bosque en un videojuego, lo que se hace es repetir un único modelo de árbol una cantidad de veces estipulada, con ligeras variaciones entre cada uno. Pero está claro que es una falla que necesita de un arreglo inmediato, considerando los tiempos que corren.
La otra gran limitación se sitúa en el funcionamiento de los shaders. Actualmente, en el campo de los ordenadores (no así en la Xbox 360), cada GPU tiene un número fijo de procesadores de pixeles (motores Pixel shader) y otro -bastante menor- de procesadores de vértices (motores Vertex shader). Por razones de arquitectura, estas elementos trabajan por separado, en mayor o menor medida, dependiendo de la escena a dibujar. El tema es que, en los últimos tiempos, los juegos de ordenador han incrementado mucho el uso de shaders. La verdadera cuestión sale a relucir cuando, a raíz del enorme trabajo demandado por la aplicación, los motores de un mismo tipo son exigidos a fondo, mientras que el resto espera a que concluyan su labor los primeros para entrar en funcionamiento. Para dar un ejemplo claro, esta situación se observa en escenas que requieren mucho procesamiento de vértices, por lo cual la unidad de Vertex Shader realiza su parte y la de Pixel Shader queda ociosa. El mismo caso puede considerarse a la inversa, tomando como referencia los pixeles.
Este desaprovechamiento de recursos es otra de las cuestiones que DirectX 10 vendrá a corregir, con el soporte para los shaders unificados. Hablaremos más sobre ellos en la siguiente página.

Con las desventajas descriptas, un modelo que contemple la unión de los procesadores de vértices y pixeles en una sola unidad no suena muy descabellada. Es más, es mucho más coherente que ubicarlos por separado. A esto nos referimos cuando hablamos de shaders unificados. Sin embargo, en DirectX 10 se planea soporte incluir otro tipo de shader, que estaría en la misma unidad que los procesadores para Pixel y Vertex shaders. El mismo se conoce como Geometry shader, y conforma uno de las mejoras más interesantes introducidas en esta nueva versión de DirectX.
El Geometry shader es una nueva etapa en el pipeline de composición de la imagen. Se encarga, básicamente, de recibir triángulos y manipularlos mediante los datos de sus vértices. Una vez terminado el proceso, se lo pasa a la unidad de Pixel shader para su posterior “rellenado” de color. En otros términos, vendría a ser un motor de Vertex shader bastante más complejo. Gracias al Geometry shader, efectos como la deformación en tiempo real serán mucho más precisos y vistosos. Uno de los más conocidos, el efecto de desenfoque (Motion blur) también resulta beneficiado por este shader.
Con el Geometry shader incorporado en la unidad de shaders unificados, el salto de tecnología se hace más pronunciado. Ya no se trata de tener a los motores de Pixel shader por un lado y a los de Vertex shader por otro. Todo está en un sólo lugar. Pero se necesita haya orden para un funcionamiento armónico. De esto se encarga la Unidad arbitro (vean la figura adjunta), que recibe todas las instrucciones destinadas a la GPU y las reorganiza en distintos hilos de ejecución (threads), según los recursos que más se necesiten (Pixel, Vertex o Geometry shaders) para el procesamiento de la escena. Esto asegura que, en una aplicación con una robusta utilización de shaders, se aproveche de la mejor manera cada una de las partes de la unidad de shaders unificados.
Con esta nueva funcionalidad, la GPU dejaría de ser sólo un chip de procesamiento de imágenes, para convertirse en algo mucho más poderoso, que podría encargarse de otras tareas. Estamos hablando de, por ejemplo, cálculos físicos, de inteligencia artificial, animaciones y otras más. Algo así como un chip que integra a la CPU y a la GPU. Está claro que por el momento es sólo teórico, pero se oye impresionante, ¿no?.
ATI es la empresa que dio el primer gran paso en este sentido, al fabricar para la Xbox 360 la primera GPU con shaders unificados. En su línea X1000 puso en práctica una arquitectura híbrida, una especie de “paso previo” hacia la unificación que se implementará en el próximo R600. Con la experiencia ganada a través de la colaboración con Microsoft para su consola, se espera que los shaders unificados para la futura GPU de ATI sean más eficientes.
¿Cómo encaja DirectX 10 en todo esto? Pues, siendo el primer API en brindar la plataforma necesaria para utilizar las ventajas de esta unificación de shaders. Esto no significa que requiera un hardware con estas características para utilizarla. Una GPU con las unidades por separado también es compatible, aunque se necesita que esté presente la correspondiente al Geometry shader, para que se puedan completar todas las etapas del pipeline.

DirectX 10, junto al modelo de shaders unificados, constituyen el futuro inminente en el campo del procesamiento de gráficos tridimensionales. Por supuesto que el hardware tendrá que evolucionar en forma acorde para no limitar a los programadores a la hora de trabajar con este API. En tal caso, no hace falta reiterar que las posibilidades son enormes, mucho mayores a lo que se estipula hoy en día.
Lamentablemente, existen algunos factores que oscurecen un poco todo lo bueno que se viene hablando sobre DirectX 10. Uno de ellos es su integración con Windows Vista. Según parece, Microsoft no tiene planes para que Windows XP tenga soporte para este nuevo API, por lo que el traspaso hacia este sistema operativo se convierte en algo obligatorio para aprovechar todas las bondades mencionadas en este articulo. Luego, obviamente, también sería necesario una tarjeta gráfica y un videojuego, ambos pensados para exprimir el potencial de DirectX 10. La propia Microsoft asegura que este API será hasta ocho veces más rápido que su antecesor a la hora de cumplir su función.
Ya que hablamos de DirectX 9.0, se sabe que la versión 10 no será retro-compatible con el mismo. Por ello, Windows Vista también incluirá a DirectX 9.0L, para mantener el soporte con los procesadores gráficos capaces de manejar los shaders 2.0. Ambas librerías coexistirán en el sistema operativo, de forma tal que se mantendrá la compatibilidad con los juegos que utilicen las “viejas” funciones.
No hay dudas de las intenciones de Microsoft. Con un Windows XP afianzado (a pesar de las constantes críticas referidas a la seguridad), resulta difícil convencer a los usuarios para que actualicen sus equipos y adopten Windows Vista. Pero esta maniobra de incluir a DirectX 10 en su sistema operativo y quitar su compatibilidad con versiones previas, así como la de obtener exclusividad de funcionamiento por parte de algunos desarrolladores de videojuegos, habla del objetivo de esta firma de imponer a Vista en el mercado como la mejor alternativa, por encima del XP.
Por lo pronto, DirectX 10 promete mejoras que parecían inimaginables hace un tiempo atrás. Todo parece indicar que el realismo en un juego de ordenador tendrá un avance muy significativo, siempre y cuando los desarrolladores hagan sus deberes como corresponde. Lo cierto es que estamos presenciando el comienzo de algo grande, muy grande. Si es como dice Microsoft, a principios del año que viene -fecha de salida de Vista- empezaremos a palpitar las capacidades de DirectX 10, el próximo gran salto generacional de este API. Motivos para entusiasmarse no faltan.

Reportar

¿Qué te pareció?

Escrito por editorwp_6720

2 Comments

Leave a Reply

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

El retorno de Earthworm Jim

Las firmas de electrónica son urgidas a mejorar la “accesibilidad”