¿Qué hay de nuevo en DirectX 12?

DirectX ha estado con nosotros durante 25 años, proporcionando a los desarrolladores las herramientas para crear juegos increíbles. La última versión, DX12, se lanzó en 2015, pero en los últimos años, Microsoft ha expandido la biblioteca de software para cubrir el trazado de rayos y el aprendizaje automático y, finalmente, la gestión de datos.

Grandes títulos de próxima generación como Cyberpunk 2077, Far Cry 6 y Watch Dogs: Legion están usando algunos de estos extras de DirectX 12. Entonces, ¿qué son exactamente? ¿Qué pueden hacer estas mejoras y cómo mejorarán los juegos para todos nosotros?

Todas las buenas preguntas y lo tenemos cubierto: ¡siga leyendo para descubrirlo!

¿Qué es exactamente DirectX 12?

Comencemos con una explicación rápida de qué es DirectX . Tome cualquier juego moderno, ya sea uno de los últimos éxitos de taquilla o una pequeña oferta independiente, y encontrará que ha sido codificado en un lenguaje de propósito general, como C ++. Todos los gráficos, el sonido y la mecánica del juego están en miles o millones de líneas de instrucciones: tome estos datos, multiplíquelos con esos datos, coloque el resultado aquí , y así sucesivamente.

Pero gran parte de este trabajo será común, sin importar cuál sea el juego o en qué plataforma se juegue. Entonces, para facilitar el proceso de hacer un juego, Microsoft creó un conjunto de API de bajo nivel en 1995. Piense en ellas como una enorme colección de libros, en la que se establecen todo tipo de reglas y estructuras sobre cómo emitir instrucciones y qué tipos de datos usar, además de ofrecer comandos simplificados que pueden usarse en lugar de largas secuencias de código.


Una pequeña selección de la montaña de archivos que componen DirectX

DirectX proporciona API para gráficos, sonido, video, música y dispositivos de entrada, prácticamente todo lo que necesitará para jugar un juego en una PC. Los controladores de los dispositivos que generan o utilizan estas funciones multimedia traducirán las instrucciones de la API, convirtiéndolas en secuencias de código que el hardware entiende.

Microsoft ha actualizado continuamente esta biblioteca masiva durante los últimos 25 años, y la última versión llamada DirectX 12, se lanzó al público a fines de julio de 2015, con el lanzamiento de Windows 10. Pero como se mencionó anteriormente, sigue recibiendo adiciones …

Trazado de rayos DirectX

La primera incorporación al colectivo DirectX 12 fue una estructura de software para el trazado de rayos, el “santo grial” de los gráficos y algo que ha sido una fuente casi constante de asombro y crítica, en igual medida.

DXR, también conocido como DirectX Raytracing, apareció por primera vez a fines de 2018 y se creó junto con Nvidia, AMD e Intel.

Nvidia fue la primera en ofrecer soporte de hardware para él, con sus GPU basadas en Volta, a pesar de que estos chips no tenían ninguna característica específica para manejar el trazado de rayos. Eso cambió con el lanzamiento de las tarjetas gráficas GeForce RTX con tecnología Turing en septiembre de 2018, y el equipo de marketing de Nvidia promovió en gran medida a RTX como el siguiente paso en la evolución de los gráficos.

AMD hizo lo mismo en noviembre de 2020 con el lanzamiento de su arquitectura RDNA 2, como se usa en las tarjetas gráficas Radeon RX 6000, las consolas Xbox Series X / S y PlayStation 5.


La arquitectura Turing de Nvidia lucía el primer hardware de trazado de rayos en una GPU de escritorio

Ya hemos cubierto la diferencia entre el trazado de rayos y la rasterización tradicional, por lo que nos centraremos específicamente en lo que está haciendo DXR.

Durante décadas, los juegos 3D han estado utilizando una variedad de técnicas para simular cómo aparecerá el color y el brillo de un objeto, según el impacto de las fuentes de luz y las sombras. Pero siempre ha sido una especie de truco: una estimación de cómo la luz realmente interactúa con las superficies. El trazado de rayos funciona siguiendo el camino de un rayo de luz y viendo con qué objetos interactúa. Luego, en base a la información sobre esa superficie, se calcula el color y la intensidad de la luz.

El rayo puede reflejarse, absorberse o refractarse (es decir, pasa a través, pero en ángulo), por lo que el proceso puede continuar siguiendo al rayo mientras rebota alrededor de la escena. Con el hardware actual, hacer esto para un rayo no es muy difícil, pero para que produzca resultados realistas, cada píxel en el cuadro necesita al menos un rayo para ser proyectado y trazado.

Y si el marco tiene una resolución de 1920 x 1080 píxeles, eso resultaría en un poco más de 2 millones de rayos. Esa no es una pequeña cantidad de trabajo que manejar, por lo que cualquier cosa que se pueda hacer para ayudar se vuelve obligatoria, en lugar de opcional.


El trazado de rayos es un trabajo duro, incluso en juegos simples como Minecraft.

Existen varias técnicas, llamadas estructuras de aceleración , que pueden emplearse para ayudar a acelerar el proceso de seguimiento de los rayos a través de la escena. DXR establece las reglas generales detrás de estas estructuras, dividiéndolas en dos tipos: nivel inferior y nivel superior. Las estructuras de aceleración de nivel inferior (BLAS, para abreviar) contienen datos sobre las primitivas, las formas que se utilizan para construir el entorno.

Configurar cada BLAS lleva tiempo, pero proporcionan un sistema rápido para verificar si un rayo interactúa o no con una forma. Sin embargo, recrear todos los diferentes BLAS para cada nuevo fotograma lleva mucho tiempo, y aquí es donde entran en juego los de nivel superior (TLAS).

En lugar de contener toda la información sobre la geometría de las formas, TLAS contiene punteros (referencias a uno o más BLAS específicos) o instancias (varias referencias al mismo BLAS). TLAS también contiene datos sobre cómo las primitivas en BLAS pueden haberse transformado (por ejemplo, movidas, rotadas, escaladas) y otros aspectos, como las propiedades materiales de las primitivas (por ejemplo, transparencia).

Esto hace que TLAS sea mucho más rápido de configurar que BLAS, pero el uso excesivo de ellos afecta el rendimiento. DXR no establece qué metodología se debe utilizar para crear las estructuras de aceleración; deja eso al hardware / controlador para que interprete las instrucciones de la API para crearlas.


Una colección de primitivas y sus volúmenes delimitadores (arriba) y la jerarquía asociada (abajo)

AMD y Nvidia usan jerarquías de volumen delimitador (BVH) y estas son administradas en su totalidad por la GPU. ¿Por qué? Debido a que sus procesadores contienen circuitos especializados para atravesar tales estructuras (llamado recorrido BVH ), acelerando el proceso para determinar si un rayo se acerca a una primitiva determinada.

La idea detrás de ellos es que los volúmenes están organizados con respecto a cómo se establecen las primitivas desde la perspectiva de la cámara, de modo que el primer volumen que se cruza con un rayo es el que se analiza más a fondo; los demás se rechazan automáticamente. El algoritmo de prueba luego verifica a través de capas sucesivas de volúmenes hasta que se alcanza el último nivel.

La canalización de DXR requiere que se cree primero el BLAS / TLAS y luego, para cada píxel de un fotograma, ejecutar un sombreador para generar un rayo. Este sombreador luego usa la estructura de aceleración para determinar si golpea directamente una superficie o no, y las GPU de trazado de rayos también tienen unidades adicionales para acelerar esto también.

El resultado de la comprobación de la intersección del rayo-primitivo depende de las instrucciones que se hayan codificado para que tengan lugar. Se pueden ejecutar uno o más de los siguientes sombreadores:

• Sombreador de contacto
• Sombreador de cualquier contacto
• Sombreador más cercano
• Sombreador de fallo

Los primeros y los últimos son obvios: si el rayo golpea o falla un primitivo, entonces el sombreador devolverá un color específico, o incluso activará otro rayo. Los sombreadores de cualquier impacto se pueden activar si el rayo atraviesa varias cosas, lo que resulta útil para manipular superficies translúcidas como agua o vidrio. Closest-hit hace lo que sugiere el nombre y activa la rutina en función de la primitiva más cercana al rayo, y se puede utilizar para determinar el color de una sombra, por ejemplo.

Este ciclo de generar un rayo, comprobar si hay una intersección y averiguar el color puede repetirse tantas veces como sea necesario para lograr resultados cada vez más realistas. Sin embargo, todo esto escalado sobre millones de rayos haría que el rendimiento de un juego se arruinara.

Por lo tanto, la mayoría de las implementaciones de DXR implican un enfoque híbrido: use los gráficos Direct3D normales y calcule las tuberías para crear la escena, aplique texturas, iluminación general y efectos de posprocesamiento, y cambie a la tubería DXR para cosas muy específicas, como reflejos o sombras. .

Otra técnica común que se utiliza para mantener el impacto en el rendimiento lo más bajo posible es limitar la cantidad de rayos proyectados en la escena, generalmente se hace usando un rayo por bloque de píxeles, en lugar de un rayo por píxel, o solo usando un rayo primario, y no rastrea los rebotes.

La desventaja de estos enfoques es que el resultado final contiene muchos artefactos o ruido.


El resultado de usar un solo rayo primario para cada píxel.

Hay muchas soluciones posibles para contrarrestar esto, conocidas colectivamente como eliminación de ruido . Con las tarjetas gráficas, esto generalmente se hace con sombreadores para muestrear y luego filtrar el cuadro completo (diremos más sobre esto en un momento).

Ahora que las últimas consolas y tarjetas gráficas tienen funciones de trazado de rayos, Microsoft claramente continuará desarrollando y expandiendo DXR, para brindar más control y flexibilidad en cuanto a cómo se generan los rayos desde los sombreadores y cómo administrarlos. La primera actualización de la API apareció en mayo de 2020, agregando características de grupo bajo el título de DXR Tier 1.1 . A diferencia de la mayoría de las actualizaciones de DirectX, estas adiciones no requieren nuevo hardware, solo controladores actualizados.

DirectML

La siguiente mejora, DirectML , estuvo disponible en la actualización de Windows 10 de mayo de 2019. Este tiene que ver con el aprendizaje automático , un término vago que se utiliza para describir una amplia gama de paradigmas y algoritmos de programación.

En el caso de la API de Microsoft, proporciona una estructura uniforme con la que acelerar el procesamiento de modelos de inferencia en una GPU. Al igual que DXR, no especifica exactamente cómo debe hacerlo el hardware, simplemente escribe tu código y deja que los controladores lo manejen por ti.


Las redes neuronales son un elemento importante para el aprendizaje automático

El aprendizaje automático solía ser el dominio exclusivo de las potentes computadoras con múltiples CPU, pero a medida que las GPU se han vuelto más capaces, se han hecho cargo de este rol. Cuando Nvidia lanzó Volta a mediados de 2017, introdujeron una nueva función de hardware en sus chips: Tensor Cores .

Estas unidades manejan exclusivamente las llamadas operaciones tensoriales, una rama de las matemáticas que implica manejar grandes conjuntos de números relacionados al mismo tiempo. Los tensores se utilizan mucho en las operaciones de redes neuronales, uno de los elementos clave en los modelos de inferencia.

Una GPU no necesita tener núcleos tensores para admitir DirectML; de hecho, ni siquiera necesita una GPU. Todo esto es gracias a una función de Direct3D 12 llamada meta comandos . Estos son objetos de código que permiten a los proveedores de hardware utilizar funciones específicas en sus dispositivos para realizar los cálculos.


No, no necesita una tarjeta gráfica de $ 2,500 para realizar el aprendizaje automático

Entonces, aunque se dice que DirectML es independiente del hardware (es decir, es ajeno a la naturaleza del hardware que maneja las instrucciones), los metacomandos proporcionan un medio para que una GPU use su propia forma única de hacer las cosas.

En el caso de Nvidia y sus GPU Volta / Turing / Ampere, si los metacomandos están configurados de la manera correcta, entonces los núcleos Tensor se activarán y procesarán las matemáticas; si no, entonces la GPU vuelve a ejecutar los sombreadores en los núcleos “estándar”. Y si no están disponibles, la CPU se encarga de las operaciones.

Todo esto está muy bien, pero ¿qué pueden hacer exactamente los desarrolladores con DirectML?

Hay tres aplicaciones particulares a destacar:

• Anti-aliasing
• Escalado y la llamada ‘super-resolución’
• Denoising

Ninguno de estos requiere DirectML, pero la combinación de las características de la API y el uso de metacomandos significa que Intel, AMD y Nvidia pueden proporcionar algún tipo de aceleración de hardware para estas técnicas. En el caso de este último, ya han estado usando sus Tensor Cores para un algoritmo propietario llamado Deep Learning Super Sampling (DLSS).


DLSS en acción

DLSS permite que un juego se ejecute a una resolución más baja y obtenga todos los beneficios de rendimiento que aporta, pero presenta el cuadro renderizado final con una resolución mucho mayor. Esto puede parecer un simple proceso de escalado, como lo usan los reproductores de Blu-ray cuando convierten una película en DVD a una salida HD.

Pero las redes neuronales pueden proporcionar resultados con mejor calidad porque pueden ajustar el color de los píxeles para tener en cuenta correctamente el movimiento, en función de dónde estaban los objetos y hacia dónde se mueven. Los gustos de DLSS pueden producir resultados sorprendentes y DirectML se puede utilizar para producir algoritmos similares. Esta técnica ha adquirido el nombre de Super Resolución y será especialmente útil en juegos que utilizan mucho DXR

Al reducir la resolución del cuadro, se requieren menos rayos para sombrear la escena y, por lo tanto, el impacto en el rendimiento del uso del trazado de rayos se vuelve más aceptable. Luego, volver a escalar la imagen para el monitor significa que no tiene que mirar un desorden pixelado.


Eliminación de ruido del aprendizaje automático en acción.

DirectML también se puede utilizar para aplicar eliminación de ruido de alta calidad, por lo que se pueden emitir incluso menos rayos sin afectar demasiado la calidad de la imagen. En la imagen de arriba, puede ver una imagen con trazado de rayos a la izquierda, donde solo se ha utilizado un rayo primario por píxel, y luego el mismo proceso nuevamente, pero con la red neuronal de Intel Open Image Denoiser aplicado, a la derecha.

Desde su lanzamiento, la API de aprendizaje automático ha recibido dos actualizaciones, lo que brinda una gran cantidad de operaciones adicionales y compatibilidad con tipos de datos adicionales. A diferencia de DXR, por el momento ningún juego parece usar DirectML para nada, pero no pasará mucho tiempo antes de que lo haga.

DirectStorage

La tercera mejora que vamos a cubrir aún no se ha lanzado, y aún no ha llegado a la etapa de vista previa para desarrolladores. Eso significa que los detalles aún son escasos, además de lo que Microsoft nos ha dicho a través de su blog de desarrolladores . DirectX DirectStorage es otra API, pero no está dedicada a los gráficos.

Esta biblioteca de software se creó originalmente para las consolas Xbox Series X / S y se está llevando a las computadoras con Windows 10 para ofrecer ventajas similares. DirectStorage permitirá que los juegos y otros programas tengan un acceso más directo a los recursos en una unidad de almacenamiento principal que la forma en que se hacen las cosas actualmente.

Cuando juegas hoy a un juego de PC, todas las texturas y modelos necesarios para crear los gráficos se copian primero desde el almacenamiento local y se escriben en la memoria del sistema. Luego, todo esto se copia nuevamente y se escribe en la memoria de la tarjeta gráfica.


Los juegos de mundo abierto necesitan acceder constantemente a miles de texturas y modelos.

Esto, en sí mismo, no es un gran problema, ya que la transferencia desde el almacenamiento local a la RAM suele ser la parte más lenta de toda la secuencia. Sin embargo, un título AAA moderno puede tener una enorme cantidad de recursos en el disco, por lo que, en lugar de intentar copiar todo lo que necesita o podría necesitar, el juego solo solicita pequeñas porciones.

Esto es especialmente cierto en los juegos de mundo abierto, donde se solicitan nuevas texturas y modelos de forma regular. Cada vez que esto sucede, la CPU tiene que procesar las llamadas solicitudes de E / S (entrada / salida), por lo que si hay muchas solicitudes constantemente, la CPU se mantendrá bastante ocupada ocupándose de todas ellas. Esto, a su vez, limita la cantidad de recursos de cómputo del sistema disponibles para todo lo demás; para el juego, esto podría ser el manejo de IA, búsqueda de rutas, código de red, monitoreo de entrada, etc., pero también tiene un impacto en los recursos del juego, también.

En la actualidad, muchos títulos almacenan archivos de texturas, sonidos y modelos en un formato comprimido (especialmente si se entregan digitalmente). Antes de que se puedan usar dichos recursos, la CPU debe descomprimirlos y, si ya está ocupado manejando muchas solicitudes de E / S, la transferencia de datos desde el almacenamiento a la tarjeta gráfica simplemente se atasca.

Experimentamos tales cosas en forma de tiempos de carga prolongados o tartamudeos durante el juego, y cualquier cosa que se pueda hacer para mejorar estos asuntos solo puede ser algo bueno.

Los trucos clave que DirectStorage emplea para ayudar son agrupar las solicitudes de E / S en lotes, en lugar de manejarlas en serie, y dejar que los juegos decidan cuándo necesitan que se les diga que se ha completado una solicitud. La CPU todavía tiene que superar todo esto, por supuesto, pero ahora puede aplicar varios subprocesos en paralelo a la tarea.

Otra razón por la que se necesita este cambio es la adopción de SSD NVMe más rápidos para el almacenamiento local. Estos son increíblemente rápidos , con enormes cantidades de ancho de banda de datos, en comparación con las unidades SATA. Los últimos tardan bastante tiempo en completar una solicitud de E / S, mientras que los primeros pueden atravesarlos.

DirectStorage probablemente no proporcionará ningún impulso para PC y juegos más antiguos, pero para las máquinas y títulos más recientes, el uso de esta API nos ayudará a brindarnos tiempos de carga más rápidos, transmisión de datos más rápida y un poco más de espacio para respirar en la CPU. ¡Todo gracias a una nueva biblioteca de software!

Desafortunadamente, los desarrolladores no podrán tener en sus manos DirectStorage para las pruebas beta hasta el próximo año, y no hay indicios de cuándo se lanzará al público.

Mientras tanto, es posible que haya escuchado que Nvidia está desarrollando algo que llaman RTX IO . Este sistema no es el mismo DirectStorage con un nombre propietario, ya que se trata de tener un medio para omitir los recursos de copia a la memoria del sistema. En cambio, un juego podría transferir datos directamente desde la unidad de almacenamiento a la memoria local de la tarjeta gráfica.

Sin embargo, está diseñado para usarse junto con la próxima API de Microsoft, para reducir aún más la cantidad de solicitudes de E / S que administra la CPU. Y cuando un proveedor ha comenzado algo, otros lo siguen pronto.

Cuando 12 se convirtió en Ultimate

Antes de cerrar este vistazo a las mejoras de próxima generación de DirectX 12, vale la pena comentar sobre una actualización de DirectX que Microsoft lanzó en marzo de 2020.

En iteraciones DX anteriores, las versiones menores siguieron la convención de numeración de versiones. Por ejemplo, DirectX 11 salió a la luz en el otoño de 2009, 11.1 en 2012 y 11.2 un año después. Sin embargo, DirectX 12 permaneció como ’12’ durante casi cinco años, hasta que anunciaron DirectX 12 Ultimate .

Esta revisión trajo actualizaciones significativas para Direct3D y DirectX Raytracing (que ahora hemos cubierto), así que echemos un vistazo rápido a las nuevas características del primero:

• Sombreado de tasa variable (VRS)
• Sombreadores de malla
• Realimentación del muestreador

El primero básicamente permite a los desarrolladores controlar la frecuencia con la que se aplican los sombreadores a una escena completa, a parte de ella o incluso a una primitiva individual. Normalmente, los sombreadores se aplican a cada píxel de un cuadro, pero el sombreado de velocidad variable le permite seleccionar un bloque de píxeles (por ejemplo, 2 x 2) y ejecutar los sombreadores en él.


VRS en Civilization VI: sombreador por píxel (rojo) frente a sombreador por 4 píxeles (azul)

Aunque esto da como resultado una disminución en la calidad visual, el beneficio de rendimiento es potencialmente enorme, por lo que si no necesita algo que se vea súper preciso porque está en la distancia o se mueve muy rápido, disminuir la tasa de sombreado es algo sensato. .

Los sombreadores de malla son una mejora lógica de los sombreadores de vértices y geometría, las herramientas que se utilizan para mover y escalar los objetos y el entorno en una escena.


Esta demostración de Asteroids muestra la ventaja de los sombreadores de malla

Tradicionalmente, esta área de procesamiento de vértices ha sido bastante rígida en términos de flexibilidad y control de programación, pero los sombreadores de malla la empujan hacia el ámbito de los sombreadores de cálculo.

El beneficio para nosotros estará en la forma de tener modelos y escenarios más complejos en nuestros juegos, sin sufrir un menor rendimiento. Esto es algo que hemos escuchado antes, a lo largo de los años, especialmente con los sombreadores de teselación y geometría, pero esta vez es una mejora genuina.


La ventaja de la memoria al usar la retroalimentación del muestreador

Sampler Feedback funciona con un tema similar: dar al desarrollador más información y control, pero sobre qué texturas están usando. Las ventajas que esto puede traer potencialmente es reducir la cantidad de texturas que deben transmitirse desde la memoria a la GPU, y donde un juego ha renderizado objetos como texturas, permite que se utilicen de manera más efectiva y, por lo tanto, más rápida.

La característica final de DirectX 12 Ultimate no es un nuevo truco de gráficos o una API para acelerar el manejo de datos. Microsoft ha unificado sus API para Windows y la plataforma Xbox en una biblioteca cohesiva; en teoría, esto debería facilitar mucho la creación de un nuevo título que requerirá un trabajo mínimo para trasladarlo de un sistema a otro.

Esta fue la idea detrás de la Xbox original, pero la 360 se alejó de esto (al igual que la One, pero en menor medida), al usar un diseño de hardware y software que no era demasiado parecido a una PC. Con las Series X y S, los componentes internos están casi tan cerca de ser una PC, sin serlo realmente, por lo que tenía sentido que el software siguiera su ejemplo.

Lo que es bueno para los desarrolladores es bueno para nosotros

Aunque todo lo que hemos cubierto aquí es realmente para que los desarrolladores lo utilicen y aprovechen, somos nosotros los que finalmente nos beneficiamos, aunque pasará algún tiempo antes de que todas estas características sean comunes en los juegos.

Si bien el enfoque sigue siendo crear gráficos cada vez más realistas, especialmente en lo que respecta al trazado de rayos, Microsoft ha estado atento al rendimiento. Esto se debe a que cada vez es más difícil para los proveedores de hardware crear nuevos productos que sean significativamente más potentes que sus predecesores, por un precio que atraiga a la mayoría de los consumidores.

No todos pueden permitirse ni quieren gastar $ 1,000 en una tarjeta gráfica, solo para ejecutar juegos en su configuración más alta y aún así obtener buenas velocidades de cuadro. Y los editores normalmente quieren que sus títulos lleguen a tantos consumidores como sea posible, en lugar de ser solo para unos pocos.

Todo lo cual significa que DirectX 12 Ultimate, y todas sus ingeniosas mejoras, se utilizarán para crear juegos más atractivos que todos podamos disfrutar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *