Introducción a las texturas
Un recurso de textura es una estructura de datos para almacenar elementos de textura, que son la unidad más pequeña de una textura en la que se puede leer o escribir. Cuando un sombreador lee la textura, se puede filtrar por muestras de textura.
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 en la que la canalización puede leer o escribir. A diferencia de los búferes, las texturas se pueden filtrar por muestras de textura a medida que las unidades del 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 puede escribirse o no escribirse cuando se crea el recurso siempre que el tipo se especifique completamente mediante una vista cuando la textura esté enlazada a la canalización.
Tipos de textura
Direct3D admite varias representaciones de punto flotante. Todos los cálculos de punto flotante funcionan con un subconjunto definido de las reglas de punto flotante de precisión flotante IEEE 754 de 32 bits.
Hay varios tipos de texturas: 1D, 2D, 3D, cada uno de los cuales se puede crear con o sin mapas mip. Direct3D también admite matrices de texturas y texturas de muestreo múltiple.
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.
En la ilustración siguiente se muestra una textura 1D:
Cada elemento de textura contiene una serie de componentes de color en función del formato de los datos almacenados. Si agrega más complejidad, puede crear una textura 1D con niveles de mapa mip, como se muestra en la ilustración siguiente.
Un nivel de mapa mip es una textura que es una potencia de dos menor que el nivel anterior. El nivel superior contiene el máximo 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 los mapas mip se generan para una textura de tamaño impar, el siguiente nivel inferior es siempre tamaño par (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 al representar geometría que no está tan cerca de la cámara.
Matrices de textura 1D
Direct3D también admite matrices de texturas. Una matriz de texturas 1D se parece conceptualmente a la siguiente ilustración.
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 cada textura de una matriz de texturas debe 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 con el 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 es direccionable por un vector u, v. Dado que es un recurso de textura, puede contener niveles de mapa mip y subrecursos. Un recurso de textura 2D rellenado completamente tiene el aspecto de la siguiente ilustración.
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). Tiene un diseño similar a la matriz de texturas 1D, excepto que las texturas ahora contienen datos 2D, como se muestra en la ilustración siguiente.
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 textura completamente rellenado tiene el aspecto de la siguiente ilustración.
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.
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. Una textura 3D totalmente rellenada es similar a la siguiente ilustración.
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.
No existe ningún concepto de una matriz de texturas 3D; por lo tanto, un subrecurso de textura 3D es un solo nivel de mapa mip.
Los sistemas de coordenadas para Direct3D se definen para píxeles y elementos de textura.
Sistema de coordenadas de píxeles
El sistema de coordenadas de píxeles de Direct3D define el origen de un destino de representación en la esquina superior izquierda, como se muestra en el diagrama siguiente. Los centros de píxeles se desplazan por (0,5f,0,5f) desde ubicaciones de enteros.
Sistema de coordenadas de elementos de textura
El sistema de coordenadas de textura tiene su origen en la esquina superior izquierda de la textura, como se muestra en el diagrama siguiente. Esto hace que las texturas alineadas con la pantalla de representación sean triviales, ya que el sistema de coordenadas de píxeles está alineado con el sistema de coordenadas de textura.
Las coordenadas de textura se representan con un número normalizado o escalado; cada coordenada de textura se asigna a un elemento de textura específico de la siguiente manera:
Para una coordenada normalizada:
- Muestreo de puntos: Texel # = floor(U * Width)
- Muestreo lineal: Texel izquierdo # = floor(U * Width), Texel derecho # = Left Texel # + 1
Para una coordenada escalada:
- Muestreo de puntos: Texel # = floor(U)
- Muestreo lineal: Texel izquierdo # = floor(U - 0.5), Right Texel # = Left Texel # + 1
Donde el ancho es el ancho de la textura (en elementos de textura).
El ajuste de direcciones de textura se produce después de calcular la ubicación de textura.