Bueno el motivo de este post es informar a los usuarios de la comunidad que todavia no se han enterado de las ventajas que nos traerá el nuevo directx 10.
Introducción
Una de las mayores evoluciones en la industria de los juegos esta por venir. El sólo hecho de que Microsoft vaya a lanzar un nuevo sistema operativo es de por sí un evento mayúsculo, pero esta vez no viene solo, porque junto con su nuevo Windows Vista, la empresa de Redmond introducirá un nuevo API, desarrollado desde cero.
No tan rápido ¿Que es un API?
La Interfaz de Programación de Aplicaciones, o su acrónimo en inglés Application Programming Interface (API), es un conjunto de funciones residentes en bibliotecas (generalmente dinámicas) que permiten que una aplicación corra bajo el sistema operativo Windows.
Originalmente, se incluyó DirectX en Windows para que los desarrolladores pudiesen tener acceso a varios aspectos de una tarjeta gráfica, tarjeta de sonido y dispositivos de entrada (mouse, teclado, joypad, etc) sin la necesidad de programar individualmente para cada hardware .
DirectX esta compuesto de varios sub API, 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
Ahora que ya sabemos lo que es un API podemos imaginarnos la importancia de DirectX 10, pero... ¿Es sólo otra versión de DirectX? ¿Qué grandes mejoras específicamente trae? ¿Es una movida de Microsoft para que todos tengamos que renovar nuestro Hardware?
Esas y otras dudas, quedarán claras como el agua en los siguientes párrafos.
¿Sólo otra versión de DirectX?
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 fué un agran adelanto, en el intertanto han aparecido tecnologías nuevas que lo han ido haciendo paulatinamente obsoleto.
DirectX 9 Overhead
Una de las limitaciones mas grandes de DX9 es el "Object Overhead", una condición que crea un cuello de botella para los desarrolladores de juegos. Debido a lo anterior, es necesario plantear un API que corrija este problema.
¿Qué queremos decir con "Object Overhead"? En palabras simples, DX9 utilizaba ciclos de procesador para completar tareas necesarias para hacer renders antes de ser enviados a la tarjeta de video. Cuando se renderea un juego, la aplicación primero debe llamar al API y luego el API llama al Driver antes de poder llegar a tu GPU. Estas llamadas son manejadas por el CPU y eso utiliza recursos muy valiosos y limitados, pero además alarga el camino que debe recorrer la información para que el proceso sea exitoso. 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 dado. Los objetos pueden ser cualquier cosa en un juego, un personaje o un árbol por ejemplo. La cantidad máxima de objetos en cada frame actualmente es de alrededor de 500 objetos, cualquier cosa sobre eso produce un gran cuello de botella a nivel de CPU. Lo anterior obliga que los desarrolladores de contenido deban balancear cuidadosamente el juego para evitar cuellos de botella producidos por el API y el CPU. Pese a que uno podría pensar que 500 objetos es un límite generoso, la progresiva complejización de los escenarios de los juegos, orientadas a ofrecer una experiencia más envolvente, ha terminado por requerir más que esa cifra.
Para dar una idea de la limitación anterior, pensemos poe ejemplo en un juego cuya acción transcurra en un bosque. Sabemos que en un bosque real hay miles de arboles y arbustos distintos, pero debido a la limitación de DX9, la mejor representación de un bosque que el API actual puede ofrecer consiste en la repetición de un mismo árbol con mínimas variaciones entre uno y otro. Es una salida ingeniosa para subsanar la limitación, pero el escenario no alcanza a ser realista. DirectX 10 eliminara esta limitación y será posible por ejemplo introducir miles de arboles distintos en un frame dado.
¿Qué nos entregara DirectX 10 a cambio?
DirectX 10 nos permitirá poner más objetos únicos en un frame lo que nos mostrará ambientes más realistas y más inmersivos. Aún podremos encontrar limites 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.
Con la desaparición del Overhead veremos además una reducción en el tiempo de ejecución de los juegos. Calculen que actualmente DirectX 9 y el driver producen el 40% del tiempo de ejecución, DirectX10 reducirá a la mitad esa proporción.
El hecho de que los cálculos que antes pasaban por el CPU ahora puedan ejecutarse directamente en el GPU, liberará una cierta cantidad de potencia en la plataforma, pero además permitirá ejecutar en el GPU cálculos no necesariamente relacionados con gráficos, como son las aplicaciones de GPGPU de entre las cuales destaca el cálculo de físicas.
La siguiente diapositiva explica, según el punto de vista de Nvidia, la mejora que se producirá en los cálculos físicos, debido más que nada a que estos cálculos son un proceso altamente paralelizado, ideal para aprovechar la fuerza bruta de un GPU. Como podemos ver de las 3 etapas del proceso del calculo de físicas el que menos paralelismo tiene es de un 70%.
http://img150.imageshack.us/img150/1...lgpuqq9gx4.jpg
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, etonces, en una permanente subutilización de recursos.
http://img150.imageshack.us/img150/3...onalqq0nc3.jpg
¿Como soluciona esto DirectX10?
Nuevos Shaders de Geometria
Una de las nuevas características de DirectX 10 es una nueva etapa en el pipeline este se llama 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 mas complejas, al permitir que el desarrollador del juego a 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.
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.
Arquitectura Unificada
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 capaces de hacer de todo.
Lo anterior permitirá que dependiendo de la escena, podamos usar toda la potencia de la VGA para procesar vértices o bien pixeles, evitando tener recursos desaprovechados y redoblando a cambio los recursos disponibles para la operación en curso.
http://img150.imageshack.us/img150/3...dx10ok1gc9.jpg
Comparativa entre arquitectura DirectX 9 y DirectX 10
http://img150.imageshack.us/img150/2...ningvv9is6.jpg
http://img150.imageshack.us/img150/2...ningdk3ti8.jpg
Beneficios para Gamers
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, sin nececidad de complejizar la manera como se caracteriza el objeto. Veamos por ejemplo el nivel de realismo en la cara de algunos personajes en Half Life 2 (DX9) y Crysis (juego DX10 por venir).
Fotografía 1: DirectX 9 (Half Life 2)
http://www.chilehardware.com/modules...061024/hl2.jpg
Fotografía 2: DirectX 10 (Crysis)
http://www.chilehardware.com/modules...icture2my6.png
Pueden ver las diferencias con sus propios ojos, si comparamos las fotografías, que DirectX 10 agrega un nuevo nivel de realismo a los juegos haciendo a los personajes más reales. Ustedes pueden ver el increíble detalle de la imagen de Crysis, con expresiones faciales, marcas en la cara, el bigote, los ojos todo esto suma a un mayor realismo
Veamos otro ejemplo, en donde una misma figura es interpretada y procesada por DX9 (a la izquierda) y por DX10 (a la derecha)
http://www.chilehardware.com/modules...icture3pg2.png http://www.chilehardware.com/modules...icture4hm2.png
DirectX 9 "simula" detalles con técnicas como mapping normal mientras DirectX 10 incrementa el nivel de detalles en los personajes y materiales. Fíjense por favor en los detalles del pez a la derecha, las puntas en el "lomo" del bicho son mucho más prominentes y el efecto de profundidad está mucho mejor logrado.
Procesamiento de Sombras
La siguiente imagen nos muestra coloreada en verde la proyección que hace una figura para generar la sombra, característica que evidentemente cambia según el origen de la luz. En DirectX 9 la sombra es generada en el CPU, reduciendo el rendimiento del sistema en conjunto con cada nuevo personaje con sombra que aparezca en la imagen. En DirectX 10, la sombra puede ser generada y rendeada completamente en la GPU aprovechando su capacidad de hacer cálculos en paralelos con enorme potencia.
http://www.chilehardware.com/modules...icture5nq6.png
Escenas mas complejas y ambientes mas complejos
El siguiente ejemplo servirá para ilustrar el realismo que DX10 puede imprimirle a un escenario. Aunque el ejemplo está algo exagerado y hemos visto a DX9 desplegar escenas de mucho mayor calidad, al menos en este caso la exageración contribuye a hacer más evidente el cambio.
Wallpaper rendereado en DirectX9
http://www.chilehardware.com/modules...icture6nn2.png
Wallpaper rendereado en DX10
http://www.chilehardware.com/modules...icture7ld8.png
En las 2 fotografías que vemos arriba, vemos un wallpaper de Windows Vista con un lago y montañas, esta es la concepción del artista. Estas fueron rendeadas usando Microsoft Flight Simulator X en DirectX 9 y DirectX 10 respectivamente. Las diferencias son aparentes. A primera vista vemos que el agua se ve mucho más real, con espuma y olas. DirectX 10 hace posible efectos volumétricos, lo que se traduce en nubes más gruesas y mas prominentes, mientras que la dispersión de luces aumenta el efecto del lado oscuro de la montaña. También notaran que el bosque se ve mucho mas prominente y con mas detalle en la imagen con DirectX 10. Finalmente se pueden dar cuenta que DirectX 10 permite reflejos mas exactos de la montaña incluso en aguas mas turbulentas
Escenarios dinámicos
En las imágenes podemos ver como crecen las plantas alrededor de la cripta a medida que pasa el tiempo en el juego. DirectX 10 facilita al motor del juego a cambiar dinámicamente la apariencia de la cripta a medida que pasa el tiempo. Esto permite que los escenarios en el juego evolucionen a medida que pasa el tiempo mientras pasa el tiempo, así reemplazando los ambientes estáticos de manera única estimulando el crecimiento natural y el paso del tiempo.
http://www.chilehardware.com/modules...iodinamico.jpg
DirectX 9 no es capaz de crear nueva geometría en el GPU. Tampoco es capaz de almacenar resultados intermedios de geometría, por ejemplo, escenarios entre la 1era imagen y la última no podría haber sido generados en el GPU usando DirectX 9.
Motion blurring
En las imágenes superiores lo que vemos es un ejemplo realista de motion blur, que son posibles gracias a DirectX 10. En versiones anteriores de DirectX para realizar el motion blur los desarrolladores tomaban la imagen y la difuminaban posteriormente, mientras que en DirectX 10 darían el aspecto de motion blur de forma dinámica, simulando justamente como si fuera una cámara y modificando el tiempo de exposición, lo que dará un resultado mucho mas realista.
http://www.chilehardware.com/modules...cture12db9.png http://www.chilehardware.com/modules...cture13sl8.png
Conclusión
Como habrán podido comprobar, la evolución del API no es una simple medida de fuerza bruta, sino que hay diferencias estructurales de por medio. No sólo cambia "cuánto se hace" sino que "qué se hace" y "dónde se hace" también. Esta reubicación y reorganización de la cadena productiva permitirá salvar obstáculos que estaban estrangulando el desarrollo de los juegos e impedían dar el salto al siguiente nivel.
Sin embargo, lo que se ha cubierto en este artículo se enfoca más que nada en los potenciales usos del API, pero falta comprobar lo realmente importante: Qué y cómo harán los fabricantes de GPU para implementar y explotar estar características. Y eso, queridos usuarios, es una batalla que nos dará muchas horas de entretención para los meses venideros.
-Fuente: Chile hardware -