Introducción a las texturas en Direct3D 11

Un recurso de textura es una colección estructurada de datos diseñados para almacenar elementos de textura. Un elemento de textura representa la unidad más pequeña de una textura que la canalización puede leer o escribir. A diferencia de los búferes, las texturas se pueden filtrar por muestras de textura, ya que las unidades de sombreador las leen. El tipo de textura afecta a cómo se filtra la textura. Cada elemento de textura contiene de 1 a 4 componentes, organizados en uno de los formatos DXGI definidos por la enumeración DXGI_FORMAT.

Las texturas se crean como un recurso estructurado con un tamaño conocido. Sin embargo, cada textura se puede escribir o no escribir cuando se crea el recurso siempre y cuando el tipo se especifique por completo mediante una vista cuando la textura esté enlazada a la canalización.

Tipos de textura

Hay varios tipos de texturas: 1D, 2D, 3D, cada uno de los cuales se puede crear con o sin mapas MIP. Direct3D 11 también admite matrices de texturas y texturas multimuestreo.

Texturas 1D

Una textura 1D en su forma más sencilla contiene datos de textura que se pueden abordar con una sola coordenada de textura; se puede visualizar como una matriz de elementos de textura, como se muestra en la ilustración siguiente. Las texturas 1D se representan mediante la interfaz ID3D11Texture1D .

ilustración de una textura 1d

Cada elemento de textura contiene una serie de componentes de color en función del formato de los datos almacenados. Al agregar más complejidad, puede crear una textura 1D con niveles de mapa MIP, como se muestra en la ilustración siguiente.

ilustración de una textura 1d con niveles de mapa mip

Un nivel de mapa mip es una textura que es una potencia de dos menor que el nivel por encima de él. El nivel superior contiene más detalle, cada nivel posterior es menor. Para un mapa mip 1D, el nivel más pequeño contiene un elemento de textura. Además, los niveles de MIP siempre se reducen a 1:1. Cuando se generan mapas MIP para una textura de tamaño impar, el siguiente nivel inferior siempre es uniforme (excepto cuando el nivel más bajo alcanza 1). Por ejemplo, el diagrama muestra una textura de 5x1 cuyo siguiente nivel más bajo es una textura de 2x1, cuyo nivel mip siguiente (y último) es una textura de tamaño 1x1. Los niveles se identifican mediante un índice denominado LOD (nivel de detalle) que se usa para acceder a la textura más pequeña cuando se representa la geometría que no está tan cerca de la cámara.

Matrices de texturas 1D

Direct3D 11 también admite matrices de texturas. Una matriz de texturas 1D también se representa mediante la interfaz ID3D11Texture1D . Una matriz de texturas 1D es conceptualmente similar a la ilustración siguiente.

ilustración de una matriz de texturas 1d

Esta matriz de texturas contiene tres texturas. Cada una de las tres texturas tiene un ancho de textura de 5 (que es el número de elementos de la primera capa). Cada textura también contiene un mapa mip de 3 capas.

Todas las matrices de texturas de Direct3D son una matriz homogénea de texturas; Esto significa que todas las texturas de una matriz de texturas deben tener el mismo formato y tamaño de datos (incluido el ancho de textura y el número de niveles de mapa mip). Puede crear matrices de texturas de diferentes tamaños, siempre y cuando todas las texturas de cada matriz coincidan en tamaño.

Texturas 2D y matrices de texturas 2D

Un recurso Texture2D contiene una cuadrícula 2D de elementos de textura. Cada elemento de textura se puede direccionar mediante un vector u, v. Dado que es un recurso de textura, puede contener niveles de mapa mip y subrecursos. Las texturas 2D se representan mediante la interfaz ID3D11Texture2D . Un recurso de textura 2D rellenado completamente es similar al de la ilustración siguiente.

ilustración de un recurso de textura 2d

Este recurso de textura contiene una sola textura de 3x5 con tres niveles de mapa mip.

Un recurso de matriz de texturas 2D es una matriz homogénea de texturas 2D; es decir, cada textura tiene el mismo formato de datos y dimensiones (incluidos los niveles de mapa mip). Una matriz de texturas 2D también se representa mediante la interfaz ID3D11Texture2D . Tiene un diseño similar a la matriz de texturas 1D, salvo que las texturas ahora contienen datos 2D, como se muestra en la ilustración siguiente.

ilustración de una matriz de texturas 2d

Esta matriz de texturas contiene tres texturas; cada textura es 3x5 con dos niveles de mapa mip.

Usar una matriz de texturas 2D como cubo de textura

Un cubo de textura es una matriz de texturas 2D que contiene 6 texturas, una para cada cara del cubo. Un cubo de texturas totalmente rellenado es similar a la ilustración siguiente.

ilustración de una matriz de texturas 2d que representan un cubo de texturas

Una matriz de texturas 2D que contiene 6 texturas se puede leer desde los sombreadores con las funciones intrínsecas del mapa de cubos, después de enlazarlas a la canalización con una vista de textura de cubo. Los cubos de textura se abordan desde el sombreador con un vector 3D que señala desde el centro del cubo de textura.

Nota:

Los dispositivos que cree con el nivel de característica 10_1 y versiones posteriores pueden admitir matrices de cubos de textura en los que el número de texturas es igual al número de cubos de textura en una matriz por seis. Los dispositivos que cree con el nivel de característica 10_0 solo admiten un cubo de textura único de seis caras. Además, Direct3D 11 no admite mapas de cubo parciales.

 

Texturas 3D

Un recurso de textura 3D (también conocido como textura de volumen) contiene un volumen 3D de elementos de textura. Dado que es un recurso de textura, puede contener niveles de mapa mip. Las texturas 3D se representan mediante la interfaz ID3D11Texture3D . Una textura 3D totalmente rellenada es similar a la ilustración siguiente.

ilustración de un recurso de textura 3d

Cuando un segmento de mapa mip de textura 3D se enlaza como una salida de destino de representación (con una vista de destino de representación), la textura 3D se comporta de forma idéntica a una matriz de texturas 2D con n segmentos. El segmento de representación concreto se elige en la fase del sombreador de geometría, declarando un componente escalar de los datos de salida como el SV_RenderTargetArrayIndex valor del sistema.

No hay ningún concepto de una matriz de texturas 3D; por lo tanto, un subrecurso de textura 3D es un único nivel de mapa MIP.

Texturas