
¿Qué es DirectX?
DirectX es una API creada por Microsoft para que podamos ejecutar videojuegos en el PC, ya que solo se ejecuta en Windows. Dentro de las API, también encontramos a OpenGL y Vulkan, que están desarrolladas para ejecutarse en Mac o Linux.
Ahora bien, ¿qué es una API? Es como el intermediario entre el motor gráfico del juego y los drivers de tu GPU; de hecho, estos drivers deben interactuar con el kernel del sistema operativo.
Fijaros si es tan importante la API, que es la principal culpable de que no podamos jugar a títulos de consolas en nuestro PC. Es por ello que debemos tener emuladores que hagan uso de DirectX para que podamos jugar a videojuegos de otras plataformas.
¿Y qué pasa con Windows y Xbox? Por ello estamos explicando todo sobre DirectX 12, que se convirtió en la primera API de la historia en ser soportada en 2 plataformas distintas: Windows y Xbox.
También os digo, tanto desafío no ha sido cuando quien está detrás es el mismo casero: Microsoft. Al final, es como Apple funciona en su día a día cuando combina iOS con OS X a la hora de sincronizar y crear un ecosistema.
Porqué DirectX 12 ha cambiado todo: conoce las novedades
Para entender por qué DirectX 12 revolucionó el mundo del gaming en PC, debemos repasar los fundamentos de esta API.
Utilización de más núcleos
Fuente: PCWorld
Os habréis fijado que los videojuegos más recientes establecen como requisitos recomendados 8 núcleos en una CPU, ¿verdad? No es una cuestión azarosa, y es que con DirectX 11 solo se aprovechaban hasta 4 núcleos; de ahí tanto mito que ha traído afirmaciones como “no necesitas más que un Core i5 o Ryzen 5 para jugar”.
La carga de trabajo se distribuye de forma uniforme entre los núcleos de la CPU, así que usar un procesador con 6 u 8 núcleos es interesante, también el Hyper-Threading.
Y si no os lo creéis, arriba os dejo la prueba que PCWorld realizó con un Intel Core i7-4770K multi-hilo y mono-hilo. DirectX 12 mejora el rendimiento una barbaridad por aprovechar el multi-core.
La GPU asume más carga de trabajo
Fuente: Testing Games
Recuerdo que, antes de la salida de DirectX 12, el procesador tenía un impacto brutal en los FPS del videojuego. Pues bien, hay muchas comparativas que demuestran que, tener la mejor CPU del mercado mainstream y jugar en 1440p o más… no mejora los FPS.
La “game changer” es la tarjeta gráfica, creando un gran debate sobre la potencia gráfica de las últimas generaciones y los posibles cuellos de botella que se generan.
Es más, AMD, Intel y NVIDIA han tenido que reforzar el desarrollo software en sus filas, actualizando mucho los drivers de GPU. Aspectos como la computación asincrónica ha provocado que ahora se use más GPU que CPU.
Rápidamente entran en contexto las “draw calls”, que con DirectX 12 son mucho más flexibles. Cada Draw call que proviene de la aplicación tiene su estado, y cada una necesita datos y punteros asociados, siendo independientes de otras calls o states.
Con este diseño de API en el renderizado, el uso de distintos hilos para los draw calls hace que la memoria de la GPU sea mucho más eficiente.
Control en el desarrollo
Ahora los desarrolladores pueden personalizar más cómo el motor gráfico o el videojuego se nutre de los recursos del PC, algo que estaba limitado en DirectX 11. Aquí el problema es cuándo NVIDIA o AMD patrocinan un videojuego y éste es más optimizado para la GPU de una marca que para la de otra.
NVIDIA siempre logra conseguir un buen rendimiento en todos los juegos, mientras que AMD lo pasa peor cuando el juego es patrocinado por NVIDIA. La única esperanza son los motores gráficos como Unreal Engine 5 u otros que son ajenos a estos 2 gigantes.
Introducción de los objetos de estado de canalización (PSO)
Una de las grandes optimizaciones de DirectX 12 está en cómo la GPU renderiza los objetos 3D que vemos en cada escena. Se dice que dentro de la canalización de GPU encontramos distintos “estados” que son independientes entre sí.
El problema de DirectX 11 es que planteaba un sistema secuencial:
- Defino un objeto.
- Hasta que no temrine ese objeto, no puedo empezar con el siguiente.
Esto exigía muchos shaders (CUDA Cores o Stream Processors en GPU NVIDIA o AMD), además de no aprovechar bien el hardware de la GPU.
DirectX 12 reemplaza esos estados por los PSO, que, en resumidas cuentas, el videojuego crea los que considera necesarios y se puede alternar entre ellos. Dentro de los PSO encontramos el código para shaders, el vortex o pixel shader, la geometría; la mayoría de objetos de un juego.
Los famosos Mesh y Tasks Shaders
Es una de las grandes novedades de las GPUs más modernas, ya que DirectX 12 ha provocado su aparición. Con DirectX 11 teníamos etapas de sombreados poco eficientes, así que estos sombreados aparecieron en Turing con NVIDIA para beneficiarse de las bondades de DX12.
El Mesh shader hace lo mismo que un sombreador de geometría, solo que hace uso de distintos hilos al mismo tiempo. Por otro lado, el Task Shader se caracteriza por dejar en manos del usuario la entrada y salida de sombreadores.
Pongamos un ejemplo para hacerlo más visual:
- Una escena de un videojuego tiene miles de objetos 3D que tienen que renderizarse.
- Antes, cada objeto necesitaba una draw call de la CPU.
- Con los Task Shaders se puede enviar una lista de objetos a la CPU.
- El Task Shader procesa esa lista en paralelo y asigna carga de trabajo al Mesh Shader, que trabaja conjuntamente.
- Finalmente, esa escena es enviada al rasterizador para convertirla en 2D o 3D.
En efecto, es una medida para reducir la carga de trabajo de la CPU, así como las peticiones que se realizan a ésta.
DirectX Raytracing (DXR)
Sin duda, una de las grandes novedades y “el gran culpable” de que los juegos se hayan hecho tan dependientes de GPU: la creación del Ray Tracing. Fue desarrollado conjuntamente con Microsoft, aunque la iniciativa fue de NVIDIA.
Fijaos si consume tantos recursos de la GPU, que NVIDIA creó los RT Cores para todas las tareas derivadas de los cálculos de los rebotes de rayos, así como AMD creó los Ray Accelerators para lo mismo.
Variable Rate Supersampling y Content Adaptive Shading
Estas últimas novedades de DirectX 12 fueron presentadas por NVIDIA conjuntamente con las GeForce RTX 20. Empezando por el CAS, se trata de un sombreado individual en los mosaicos de la pantalla, permitiendo a la GPU incrementar la tasa de sombreado en áreas que son más destacables (el centro de la pantalla, normalmente).
El VRS es un sombreado que se adapta al contenido, haciendo énfasis en aquellos objetos en movimiento y reduce la de los objetos estáticos.
DirectX 12 y DirectX 12 Ultimate no son lo mismo
Hemos explicado lo más importante de DirectX 12, pero DX12 Ultimate se caracteriza por un soporte multiplataforma (Xbox Series) para que los desarrolladores de juegos optimicen mejor los títulos de Xbox y PC.
El proceso de portabilidad de una plataforma a otra es tedioso, por lo que DX 12 Ultimate mejora muchísimo este problema unificando Xbox y PC. Digamos que esta versión es un DX 12 convencional vitaminado.
Igualmente, DX 12 Ultimate está también integrado por AMD, no os preocupéis por ese lado.
La mejor forma de aprovecharte de esta increíble API es a través de una GPU moderna, y nosotros las tenemos todas, ¡AMD, NVIDIA e Intel!