¿Cuál es la diferencia entre DirectX 11 y DirectX 12?

¿Cuál es la diferencia entre DirectX 11 y DirectX 12?

DirectX 12 debutó hace dos años, prometiendo aumentos significativos de rendimiento y latencia en todos los ámbitos. Esto incluye una mejor utilización de la CPU, más cerca del acceso al metal, así como una serie de nuevas características, sobre todo el trazado de rayos o DXR (DirectX Ray-tracing). Pero qué es exactamente DirectX 12 y cómo es diferente de DirectX 11. Echemos un vistazo.

Qué es DirectX: Es una API

Al igual que Vulkan y OpenGL, DirectX es una API que te permite ejecutar videojuegos en tu ordenador. Sin embargo, a diferencia de sus homólogos, DX es una plataforma propietaria de Microsoft y sólo es compatible con Windows. OpenGL y Vulkan, por otro lado, se ejecutan en Mac, así como Linux.

Ahora, ¿qué hace una API gráfica como DirectX? Actúa como un intermediario entre el motor del juego y los controladores gráficos, que a su vez interactúan con el kernel del sistema operativo. Una API de gráficos es una plataforma donde se calculan el diseño y la mecánica reales del juego. Piensa en ello como MS Paint donde el juego es la pintura y la aplicación de pintura es la API. Sin embargo, a diferencia de paint, el programa de salida de una API de gráficos solo es legible por la API utilizada para diseñarla. En general, una API está diseñada para un sistema operativo específico. Esa es la razón por la que los juegos de PS4 no se ejecutan en la Xbox One y viceversa.

DirectX 12 Ultimate es la primera API de gráficos que interrumpe esa regla. Se usará tanto en Windows como en la Nueva Generación xbox Series X. Con DX12 Ultimate, MS básicamente está integrando las dos plataformas.

DirectX 11 vs DirectX 12: ¿Qué significa para los jugadores de PC

Hay tres ventajas principales de la API de DirectX 12 para jugadores de PC:

Mejor escalado con CPU multinúcleo


Sobrecarga de CPU con DX11 y 12 (menor es mejor)

Una de las principales ventajas de las API de bajo nivel como DirectX 12 y Vulkan es la utilización mejorada de la CPU. Tradicionalmente con DirectX 9 y 11 juegos basados, la mayoría de los juegos sólo utiliza 2-4 núcleos para las diversas mecánicas: Física, IA, draw-calls, etc. Algunos juegos incluso se limitaron a uno. Con DirectX 12 que ha cambiado. La carga se distribuye de forma más uniforme en todos los núcleos, lo que hace que las CPU multinúcleo sean más relevantes para los jugadores.

Máxima utilización del hardware

Muchos de vosotros podrían haber notado que al principio, las GPU AMD favorecieron los títulos de DirectX 12 más que las partes estándar de NVIDIA. ¿Por qué?

La razón es una mejor utilización. Tradicionalmente, NVIDIA ha tenido mucho mejor soporte para controladores, mientras que el hardware AMD siempre ha sufrido por la falta de ellos. DirectX 12 agrega muchas tecnologías para mejorar la utilización, como el proceso asincrónico, lo que permite ejecutar varias etapas de la canalización simultáneamente (leer: programación y gráficos). Esto hace que el apoyo del conductor deficiente sea una preocupación menos apremiante.

Más cerca del soporte del metal

Otra ventaja importante de DirectX 12 es que los desarrolladores tienen más control sobre cómo su juego utiliza el hardware. Anteriormente esto era más abstracto y fue atendido principalmente por los controladores y la API (aunque algunos motores como Frostbyte y Unreal proporcionaron herramientas de bajo nivel también).

Ahora la tarea recae en los desarrolladores. Tienen un acceso más cercano al juego, lo que significa que la mayoría de las responsabilidades de representación y la asignación de recursos son manejadas por los motores del juego con cierta ayuda de los controladores gráficos.

Esta es una espada de doble filo, ya que hay múltiples arquitecturas GPU en la naturaleza y para los desarrolladores indie, es imposible optimizar su juego para todos ellos. Por suerte, motores de terceros como Unreal, CryEngine y Unity hacen esto por ellos y sólo tienen que centrarse en el diseño.

Cómo DirectX 12 mejora el rendimiento al optimizar la utilización del hardware

Una vez más, hay tres avances principales de la API que facilitan esta ganancia:

Objetos de estado de la acción

En DirectX 11, los objetos de la canalización de GPU existen en una amplia gama de estados, como Sombreador de vértices, Sombreador de casco, Sombreador de geometría, etc. Estos estados a veces son interdependientes entre sí y el siguiente sucesivo no puede progresar a menos que se defina la etapa anterior.

Cada uno de los objetos de DirectX 11 debe definirse individualmente (en tiempo de ejecución) y el siguiente estado no se puede ejecutar hasta que se haya finalizado el anterior, ya que requieren diferentes unidades de hardware (sombreadores vs ROPs, TMUs, etc.). Esto efectivamente deja el hardware infrautilizado dando como resultado una mayor sobrecarga y llamadas de dibujo reducidas.

DirectX 12 reemplaza los diversos estados por objetos de estado de canalización (PSO) que se finalizan en la propia creación. Estos PSO incluyen el código de bytes para todos los sombreadores, incluidos los sombreadores de vértices, píxeles, dominio, casco y geometría, y se pueden convertir en cualquier estado según los requisitos sin depender de ningún otro objeto o estado. Los PSO se pueden cambiar dinámicamente de un lado a otro de los registros mediante la transferencia de una pequeña cantidad de datos.


Sombreadores de malla y tarea de NVIDIA (Turing uarch)

Las GPU NVIDIA Turing con la ayuda de DirectX 12 presentan sombreadores de tareas y sombreadores de malla. Estos dos nuevos sombreadores reemplazan las diversas etapas de sombreador engorrosas implicadas en la canalización DX11 para un enfoque más flexible.

El sombreador de malla realiza la misma tarea que los sombreadores de dominio y geometría, pero internamente utiliza un modelo multiproceso en lugar de un único subproceso. El sombreador de tareas funciona de forma similar. La principal diferencia aquí es que mientras que la entrada del sombreador del casco eran parches y la salida del objeto teselado, la entrada y la salida del sombreador de tareas están definidas por el usuario.

En la escena siguiente, hay miles de objetos que deben representarse. En el modelo tradicional, cada uno de ellos requeriría una llamada de dibujo única de la CPU. Sin embargo, con el sombreador de tareas, se envía una lista de objetos que utilizan una sola llamada de dibujo. A continuación, el sombreador de tareas procesa esta lista en paralelo y asigna trabajo al sombreador de malla (que también funciona sincrónicamente) después de lo cual la escena se envía al rasterizador para la conversión de 3D a 2D.

Este enfoque ayuda a reducir significativamente el número de llamadas de dibujo de CPU por escena, aumentando así el nivel de detalle.

Los sombreadores de malla también facilitan la eliminación de triángulos no utilizados. Esto se hace usando el sombreador de amplificación. Se ejecuta antes del sombreador de malla y determina el número de grupos de subprocesos de sombreador de malla necesarios. Prueban las diversas mallas para posibles intersecciones y visibilidad de la pantalla y luego llevan a cabo el sacrificio requerido. El sacrificio de geometría en esta etapa de renderizado temprano mejora significativamente el rendimiento.

Los shaders de malla y casco de NVIDIA también aprovechan dx12

Sombreador de amplificación de imagen

Cola de comandos

Con DirectX 11, solo hay una cola a la GPU. Esto conduce a una distribución desigual de la carga a través de varios núcleos de CPU, esencialmente paralizando CPU multiproceso.

Esto se alivia un poco mediante el uso de un contexto diferido, pero incluso entonces, en última instancia, sólo hay una secuencia de comandos que conducen a la CPU en la etapa final. DirectX 12 presenta un nuevo modelo que utiliza listas de comandos que se pueden ejecutar de forma independiente, lo que aumenta el multiproceso. Esto incluye dividir la carga de trabajo en comandos más pequeños que requieren diferentes recursos, lo que permite la ejecución simultánea. Así es como funciona el proceso asincrónico dividiendo los comandos de proceso y gráficos en colas independientes y ejecutándolos simultáneamente.

Enlace de recursos

En DirectX 11, el enlace de recursos era muy abstracto y conveniente, pero no el mejor en términos de utilización de hardware. Dejó muchos de los componentes de hardware sin usar o inactivos. La mayoría de los motores de juegos usarían “objetos de vista” para asignar recursos y enlazarlos a varias fases de sombreador de la canalización de GPU.

Los objetos se enlazarían a ranuras a lo largo de la canalización en el momento de la extracción y los sombreadores derivarían los datos necesarios de estas ranuras. El inconveniente de este modelo es que cuando el motor del juego necesita un conjunto diferente de recursos, los enlaces son inútiles y deben reasignarse.

DirectX 12 reemplaza las vistas de recursos por montones de descriptores y tablas. Un descriptor es un objeto pequeño que contiene información sobre un recurso. Estos se agrupan para formar tablas de descriptores que a su vez se almacenan en un montón.

Idealmente, una tabla de descriptores almacena información sobre un tipo de recurso mientras que un montón contiene todas las tablas necesarias para representar uno o varios fotogramas. La canalización de GPU tiene acceso a estos datos haciendo referencia al índice de tabla descriptora.

Como el montón de descriptores ya contiene los datos descriptores necesarios, en caso de que se necesite un conjunto diferente de recursos, se cambia la tabla descriptora, que es mucho más eficaz que volver a enlazar los recursos desde cero.

Otras características que vienen con el DirectX 12 son:

  • DirectX Raytracing (DXR): Esta es esencialmente la compatibilidad con la API para el seguimiento de rayos en tiempo real que NVIDIA llama tan amorosamente RTX.
  • Sombreado de velocidad variable: el sombreado de sombreado de velocidad variable permite que la GPU se centre en áreas de la pantalla que son más “visibles” y afectadas por fotograma. En un tirador, este sería el espacio alrededor de la cruz. Por el contrario, la región alrededor del borde de la pantalla está en su mayoría desenfocada y puede ser ignorada (hasta cierto punto).Permite a los desarrolladores centrarse más en las áreas que realmente afectan a la calidad visual aparente (el centro del marco en la mayoría de los casos) mientras reducen el sombreado en las periferias.
  • VRS es de dos tipos: sombreado adaptable de contenido y sombreado adaptable de movimiento: CAS permite el sombreado individual de cada uno de los mosaicos de pantalla de 16×16 (renderizado en mosaico), lo que permite a la GPU aumentar la velocidad de sombreado en las regiones que se destacan mientras se reducen en el resto.
  • El sombreado adaptativo de movimiento es como suena. Aumenta la velocidad de sombreado de los objetos que están en movimiento (cambiando cada fotograma) al tiempo que reduce la de los objetos relativamente estáticos. En el caso de un juego de carreras, el coche tendrá un mayor sombreado, mientras que el cielo y las regiones off-road se les dará una prioridad reducida.
  • Compatibilidad con Varias GPU: DirectX 12 es compatible con dos tipos de compatibilidad con varias GPU, a saber, implícita y explícita. Implícito es esencialmente SLI/XFX y deja el trabajo al controlador de proveedor. Explícito es más interesante y permite al motor del juego controlar cómo funcionan las dos GPU en paralelo. Esto permite escalar y mezclar y combinar diferentes GPU incluso de diferentes proveedores (incluyendo su dGPU e iGPU).

Otra ventaja importante es que las imágenes VRAM de las dos GPU no se reflejan y se pueden apilar para duplicar la memoria de vídeo. Esto y un total de otras características hacen de DirectX 12 una actualización importante al lado del software de los juegos de PC.

DirectX 12 Ultimate: ¿En qué se diferencia de DirectX 12?

DirectX 12 Ultimate es una actualización incremental sobre el DirectX 12 existente (nivel 1.1). Su principal ventaja es la compatibilidad multiplataforma: tanto la próxima generación de Xbox Series X como los últimos juegos de PC lo aprovecharán. Esto no solo simplifica la portabilidad multiplataforma, sino que también facilita a los desarrolladores la optimización de sus juegos para el hardware más reciente.

Para cuando llegue la Xbox Series X a finales de este año, los desarrolladores de juegos ya habrán tenido suficiente tiempo con hardware usando la misma API de gráficos (Turing de NVIDIA), simplificando el proceso de portabilidad y optimización. Al mismo tiempo, esto también permitirá una mejor utilización del hardware de PC más reciente, mejorando así el rendimiento. Con todo, es otro paso de Microsoft para unificar las plataformas de juegos xbox y PC.

Aparte de eso, presenta DirectX Raytracing 1.1, Sampler Feedback, Mesh Shaders y Variable Rate Shading. Los dos últimos ya fueron soportados por las GPU RTX Turing de NVIDIA (y se explican anteriormente), pero ahora serán ampliamente adoptadas en juegos y desarrolladores más nuevos.

Texture Sampler Feedback: TSF es algo en lo que MS está realmente estresando. En palabras simples, mantiene un seguimiento de las texturas (mapas MIP) que se muestran en el juego y que no lo son. Por lo tanto, los no utilizados se desalojan de la memoria, lo que resulta en un beneficio neto de hasta 2,5 veces al uso general de VRAM. En la imagen anterior, se puede ver, que a la derecha (sin TSF), todos los recursos de textura para el globo se cargan en la memoria. Con TSF a la izquierda, solo se mantiene la parte que es realmente visible en la pantalla mientras se eliminan los bits no utilizados, lo que ahorra memoria valiosa.

Esto también se puede hacer a través de marcos (temporalmente). En una imagen relativamente estática, los objetos de la distancia pueden reutilizar el sombreado en varios fotogramas, por ejemplo, en cada dos o cuatro fotogramas e incluso más. El rendimiento gráfico guardado se puede utilizar para aumentar la calidad de los objetos cercanos o lugares que tienen un impacto más evidente en la calidad.

DXR 1.1 es una actualización menor sobre la versión 1.0 existente:

  • Raytracing ahora está totalmente controlado por GPU y no requiere llamadas de dibujo de la CPU, lo que reduce la sobrecarga de la CPU y mejora el rendimiento.
  • Los nuevos sombreadores de trazado de rayos se pueden cargar cuando sea necesario, dependiendo de la ubicación del jugador en el mundo del juego.
  • El trazado de rayos en línea es una de las principales adiciones a DirectX 12 Ultimate. Proporciona a los desarrolladores más control sobre el proceso de trazado de rayos. Está disponible en cualquier etapa de la canalización de representación y es factible en los casos en que la complejidad del sombreado es mínima.
0 0 votes
Puntuación de la entrada
Subscribe
Notify of
0 Comentarios
Inline Feedbacks
View all comments
A %d blogueros les gusta esto: