Direct3D 11

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 2 de noviembre de 2014; las comprobaciones requieren 34 ediciones .

Direct3D 11 (D3D11) es un componente de la interfaz de programación de aplicaciones ( API ) de  DirectX 11, la undécima versión de Direct3D , el sucesor de Direct3D 10/10.1 . Direct3D 11 proporciona funciones para que el sistema operativo y las aplicaciones interactúen con los controladores de la tarjeta gráfica . Estas características no están vinculadas al siguiente sistema operativo en la línea de Windows ( Windows 7 ) y están disponibles en Windows Vista . Parcialmente, D3D11 funciona en tarjetas de video de nivel Direct3D 9-10.

Las primeras versiones preliminares aparecieron en noviembre de 2008. La versión final oficial se lanzó el 22 de octubre de 2009 como parte de Windows 7 . El 28 de octubre de 2009, DirectX 11 estuvo oficialmente disponible para Windows Vista y Windows Server 2008 a través de la descarga a través de Windows Update . [una]

Teselado

D3D11 agrega 3 etapas adicionales a la canalización de renderizado, cuyo propósito es teselar superficies de manera eficiente.

La canalización D3D11 incluye tres nuevas etapas entre las etapas de sombreado de geometría y vértice . Dos de ellos son programables (etapas de shader de casco y shader de dominio) y uno es configurable (etapa de teselación).

La tubería presentada opera con cuadrículas definidas por parches de superficie. Las principales primitivas de D3D11 son parches triangulares y cuadrados. La forma de cada parche está determinada por el número de puntos de control. En el sombreador de vértices, estos puntos se transforman, se despellejan y/o se transforman secuencialmente.

El shell shader se llama para cada parche. Los puntos de interrupción del parche del sombreador de vértices se utilizan como entrada. El shell shader tiene dos usos principales. El primero (opcional) es convertir puntos de interrupción de una representación a otra. Por ejemplo, le permite implementar el método presentado en Aproximación de superficies de subdivisión Catmull-Clark con parches bicúbicos . Después de este shader, los puntos de control se envían directamente más allá, sin pasar por el tesselator. Otro uso es el cálculo de un parámetro de teselado adecuado, que luego se pasa a la etapa de teselado. Este enfoque permite la teselación adaptativa, que se puede utilizar en el caso de niveles de detalle (LOD) dependientes de la vista. El parámetro de teselación se define para cada cara del parche y varía de 2 a 64. Esto significa que cada cara de un parche triangular (o cuadrado) se puede dividir en 2 (o un máximo de 64) caras.

La etapa de teselado está representada por un conjunto fijo de funciones (altamente configurables) que usan el parámetro de teselado para subdividir el parche en múltiples triángulos o cuadrantes. El teselado no tiene acceso a los puntos de interrupción: todas las decisiones de división se toman en función de los parámetros de configuración y teselado que se pasan desde el sombreador de shell. Cada vértice después de la etapa de teselación se pasa al sombreador de dominio y solo se pasan las coordenadas de parametrización.

El sombreador de dominio opera sobre las coordenadas de parametrización del parche para cada vértice por separado, aunque es posible acceder a los puntos de control transformados para todo el parche. El sombreador de dominio envía toda la información sobre el vértice (posición, coordenadas de textura, etc.) al sombreador de geometría (o a la etapa de recorte si no se especifica ningún sombreador de geometría). Esencialmente, evalúa la representación de la superficie en cada punto. En esta etapa, se puede aplicar el método de mapeo de desplazamiento.

Calcular sombreadores y memoria desordenada

Direct3D 11 presenta un nuevo tipo de sombreador, Compute Shader. El sombreador de cómputo se llama como una matriz regular de subprocesos. Los flujos se dividen en grupos. Cada grupo tiene 32 KB de memoria compartida entre los subprocesos del grupo. Así, los hilos del grupo pueden compartir resultados, mejorando su rendimiento. Además, los subprocesos pueden realizar lecturas y escrituras con acceso aleatorio a recursos gráficos: texturas, matrices de vértices, objetivos de representación. Estos accesos a la memoria no están ordenados, aunque se sincronizan diferentes instrucciones cuando es necesario.

Los sombreadores de píxeles (fragmentos) también pueden leer en una dirección arbitraria, lo que permite escribir estructuras de datos que luego se pueden usar en un sombreador de cómputo, o viceversa. Vale la pena señalar que los sombreadores de píxeles siempre han tenido acceso de lectura aleatorio a través de búsquedas de texturas.

Compute shaders también puede realizar operaciones como tablas de área sumada, transformadas rápidas de Fourier mucho más rápido que los métodos utilizados anteriormente en la GPU. Por el momento, Microsoft está investigando bibliotecas que proporcionen dichos cálculos. Microsoft cree que los algoritmos como el renderizado de A-buffer y el trazado de rayos también se pueden implementar de manera eficiente, pero por el momento no hay evidencia real de su efectividad.

Llamar a un sombreador de cómputo reemplaza todas las etapas de la canalización de procesamiento. Sin embargo, es posible mezclar sombreadores de cómputo y renderizado tradicional usando sus resultados. Por ejemplo, el procesamiento de imágenes después de la representación mediante un sombreador de cómputo (puede cargar estructuras de datos adicionales).

Representación multihilo

D3D10 solo permite pasar comandos de renderizado desde un solo subproceso (actualmente existe un modo especial de subprocesos múltiples, pero debido al bajo rendimiento, Microsoft no recomienda usarlo). Como sabes, enviar comandos de visualización a través de Direct3D implica el uso de recursos informáticos adicionales de la CPU . Dada la tendencia de aumentar el número de núcleos de CPU, se está introduciendo soporte para subprocesos múltiples más avanzados con el fin de distribuir este trabajo entre varios subprocesos, y así producirlo de manera más eficiente.

Direct3D 11 permite crear listas de visualización a partir de varios subprocesos y ejecutarlos desde el subproceso de representación principal. Además, el dispositivo que crea los recursos se ha eliminado del contexto que envía los comandos de representación. Esto permite que los recursos se creen de forma asíncrona. Los contextos diferidos se utilizan para crear listas de visualización y el contexto inmediato se utiliza para pasar comandos de representación a la GPU , incluido el manejo de listas de visualización creadas en contextos diferidos.

A diferencia de otras funciones, la representación multiproceso en Direct3D 11 se implementa mediante programación a través del controlador. Los controladores D3D10 apropiados (quizás incluso D3D9) permiten la renderización de subprocesos múltiples de manera mucho más eficiente que antes. Un cierto nivel de subprocesos múltiples estará disponible incluso sin nuevos controladores, pero aún no está claro qué restricciones habrá en este caso.

Otras características

Soporte para vinculación dinámica de sombreadores (similar a Cg). Esto le permite separar la escritura y la compilación de sombreadores de luz y material. La vinculación tardía se realiza cuando el sombreador está expuesto. Este enfoque es una solución al problema de la explosión combinatoria en el caso de varias fuentes de luz y materiales (este y algunos otros problemas se analizan en la sección 7.9 de Real-Time Rendering, 3rd Edition )

Se han agregado dos nuevos formatos de textura comprimida. BC6 admite el amplio rango dinámico de texturas RGB utilizando 1 byte por texel (en lugar de 6 bytes para texturas reales RGB de 6 bits). BC7 admite texturas RGB o RGBA de rango dinámico estrecho. También usa 1 byte por texel (como DXT5/BC3), pero proporciona una calidad significativamente mejor que los formatos de textura D3D10. Ambos formatos nuevos usan múltiples tipos de bloques: la utilidad de compresión elige el tipo de bloque apropiado en función de su contenido.

Los formatos de bloque de compresión D3D9 y D3D10 se basan en la idea de que cada bloque de texels de 4×4 contiene todos sus valores en una sola línea, y los bits de cada texel codifican una posición en esa línea. Por ejemplo, en DXT1/BC1, una línea en el espacio RGB representa dos extremos RGB, y cada elemento de textura usa dos bits para indicar qué color se usa de los cuatro puntos a lo largo de la línea.

Los nuevos formatos D3D11 admiten tipos de bloques con una, dos e incluso tres (en el caso de BC7) líneas de color. Existe un equilibrio entre el número de líneas y el número de puntos a lo largo de dicha línea, ya que cada bloque ocupa la misma cantidad de memoria. Básicamente, un bloque de 4×4 con dos líneas de color requiere 16 bits adicionales por bloque para especificar qué línea de cada texel se asoció con él (en el caso de tres líneas de color, se requerirían incluso más bits). Para reducir los requisitos de memoria, solo se admite un pequeño conjunto de posibles patrones de líneas de color. Para cada bloque, la utilidad de empaquetado selecciona la mejor opción de ese subconjunto.

Direct3D 11 tiene una especificación de textura más estricta. Los resultados de la descompresión deben ser precisos y el filtrado de subtexel/submip debe tener una precisión de al menos 8 bits.

Direct3D 11 le permite usar texturas que tienen un tamaño máximo en el rango de 8K-16K texels. Tenga en cuenta que una textura DXT1/BC1 de 16K x 16K ocupa 128 MB; no muchos juegos usarán texturas tan grandes, pero podría ser adecuado para técnicas como la megatextura . En general, un recurso ahora puede tener un tamaño de hasta 2 GB en D3D11.

El hardware puede admitir opcionalmente números reales de punto flotante de doble precisión.

Gamefest 2008 también presentó una diapositiva con muchas otras características nuevas, cuyos detalles no se explicaron:

DirectX 11 y código administrado

SlimDX y SharpDX admiten DirectX 11. XNA  - no

Motores de juegos compatibles con DirectX 11

Véase también


Notas

  1. Andrés Burnes. Lanzamiento de DirectX 11 para Windows Vista  . Voodoo Extreme 3D (28 de octubre de 2009). Consultado el 29 de octubre de 2009. Archivado desde el original el 17 de marzo de 2012.
  2. Battlefield Bad Company 2 con compatibilidad con DirectX 11 . GameTech (16 de abril de 2009). Consultado el 1 de noviembre de 2009. Archivado desde el original el 17 de marzo de 2012.

Enlaces