텍스처 리소스는 텍셀을 저장하는 데이터 구조로, 읽거나 쓸 수 있는 텍스처의 가장 작은 단위입니다. 셰이더에서 텍스처를 읽을 때 텍스처 샘플러로 필터링할 수 있습니다.
텍스처 리소스는 텍셀을 저장하도록 설계된 구조적 데이터 컬렉션입니다. 텍셀은 파이프라인에서 읽거나 쓸 수 있는 텍스처의 가장 작은 단위를 나타냅니다. 버퍼와 달리 텍스처는 셰이더 유닛에 의해 읽힐 때 텍스처 샘플러를 통해 필터링됩니다. 텍스처 유형은 텍스처 필터링 방식에 영향을 줍니다. 각 텍셀에는 DXGI_FORMAT 열거형으로 정의된 DXGI 형식 중 하나로 정렬된 1~4개의 구성 요소가 포함됩니다.
텍스처는 알려진 크기의 구조화된 리소스로 만들어집니다. 그러나 텍스처가 파이프라인에 바인딩될 때 뷰를 사용하여 형식을 완전히 지정하는 한 리소스를 만들 때 각 텍스처는 형식화되거나 형식이 없을 수 있습니다.
텍스처 형식
Direct3D는 여러 부동 소수점 표현을 지원합니다. 모든 부동 소수점 계산은 IEEE 754 32비트 단정밀도 부동 소수점 규칙의 정의된 하위 집합에 따라 작동합니다.
1D, 2D, 3D 등 여러 가지 유형의 텍스처가 있으며, 각 텍스처는 밉맵을 사용하거나 사용하지 않고 만들 수 있습니다. Direct3D는 텍스처 배열 및 다중 샘플링된 텍스처도 지원합니다.
- 1D 텍스처
- 1D 텍스처 배열
- 2D 텍스처 및 2D 텍스처 배열
- 3D 텍스처
1D 텍스처
가장 간단한 형태의 1D 텍스처에는 단일 텍스처 좌표로 처리할 수 있는 텍스처 데이터가 포함됩니다. 다음 그림과 같이 텍셀 배열로 시각화할 수 있습니다.
다음 그림에서는 1D 텍스처를 보여 줍니다.
1D 텍스처
각 텍셀에는 저장된 데이터의 형식에 따라 다양한 색 구성 요소가 포함됩니다. 복잡성을 더하면 다음 그림과 같이 Mipmap 수준으로 1D 텍스처를 만들 수 있습니다.
mipmap 수준으로 1d 텍스처
Mipmap 수준은 바로 위 수준보다 2의 제곱만큼 작은 텍스처입니다. 최상위 수준에는 가장 세부 정보가 포함되며 각 후속 수준은 더 작습니다. 1D 밉맵의 경우 가장 작은 수준에는 하나의 텍셀이 포함됩니다. 또한 MIP 수준은 항상 1:1로 줄어듭니다.
홀수 크기의 텍스처에 대해 mipmap이 생성되는 경우 가장 낮은 수준이 1에 도달하는 경우를 제외하고 다음 하위 수준은 항상 짝수 크기입니다. 예를 들어, 다이어그램은 5x1 텍스처를 보여주며, 그 다음으로 낮은 수준은 2x1 텍스처이고, 그 다음 (마지막) 밉 수준은 1x1 크기의 텍스처입니다. 수준은 카메라에 가깝지 않은 기하 도형을 렌더링할 때 더 작은 질감에 액세스하는 데 사용되는 LOD(세부 수준)라는 인덱스로 식별됩니다.
1D 텍스처 배열
Direct3D는 텍스처 배열도 지원합니다. 1D 텍스처의 배열은 개념적으로 다음 그림과 같습니다.
이 텍스처 배열에는 3개의 텍스처가 포함됩니다. 세 텍스처의 각 텍스처 너비는 5입니다(첫 번째 레이어의 요소 수). 각 텍스처에는 3개의 레이어 밉맵도 포함됩니다.
Direct3D의 모든 텍스처 배열은 같은 유형의 텍스처 배열입니다. 즉, 텍스처 배열의 모든 텍스처는 동일한 데이터 형식과 크기(텍스처 너비 및 Mipmap 수준 수 포함)를 가져야 합니다. 각 배열의 모든 텍스처 크기가 일치하는 한 다양한 크기의 텍스처 배열을 만들 수 있습니다.
2D 텍스처 및 2D 텍스처 배열
Texture2D 리소스에는 텍셀의 2D 그리드가 포함되어 있습니다. 각 텍셀은 u, v 벡터로 주소 지정이 가능합니다. 텍스처 리소스이므로 Mipmap 수준 및 하위 리소스를 포함할 수 있습니다. 완전히 채워진 2D 텍스처 리소스는 다음 그림과 같습니다.
2D 텍스처 리소스 
이 텍스처 리소스에는 3단계의 mipmap이 있는 3x5 크기의 단일 텍스처가 포함되어 있습니다.
2D 텍스처 배열 리소스는 2D 텍스처의 동종 배열입니다. 즉, 각 텍스처의 데이터 형식과 차원은 동일합니다(mipmap 수준 포함). 다음 그림과 같이 텍스처에 이제 2D 데이터가 포함되어 있다는 점을 제외하고 1D 텍스처 배열과 비슷한 레이아웃이 있습니다.
이 텍스처 배열에는 3개의 텍스처가 포함됩니다. 각 텍스처는 3x5이고 밉맵 수준은 2개입니다.
2D 텍스처 배열을 텍스처 큐브로 사용
텍스처 큐브는 큐브의 각 면에 하나씩 6개의 텍스처를 포함하는 2D 텍스처 배열입니다. 완전히 채워진 텍스처 큐브는 다음 그림과 같습니다.
2d 텍스처 배열
6개의 텍스처가 포함된 2D 텍스처 배열은 큐브 텍스처 뷰를 사용하여 파이프라인에 바인딩된 후 큐브 맵 내장 함수가 있는 셰이더 내에서 읽을 수 있습니다. 텍스처 큐브는 텍스처 큐브의 중심에서 가리키는 3D 벡터를 사용하여 셰이더에서 처리됩니다.
3D 텍스처
3D 텍스처 리소스(볼륨 텍스처라고도 함)에는 3D 볼륨의 텍셀이 포함되어 있습니다. 텍스처 리소스이므로 Mipmap 수준이 포함될 수 있습니다. 완전히 채워진 3D 텍스처는 다음 그림과 같습니다.
3D 텍스처 Mipmap 조각이 렌더링 대상 출력(렌더링 대상 뷰 사용)으로 바인딩되는 경우 3D 텍스처는 n개의 조각이 있는 2D 텍스처 배열과 동일하게 동작합니다. 특정 렌더 슬라이스는 지오메트리 셰이더 단계에서 선택됩니다.
3D 텍스처 배열의 개념은 없습니다. 따라서 3D 텍스처 하위 리소스는 단일 Mipmap 수준입니다.
Direct3D의 좌표계는 픽셀 및 텍셀에 대해 정의됩니다.
픽셀 좌표계
Direct3D의 픽셀 좌표계는 다음 다이어그램과 같이 왼쪽 위 모서리에 있는 렌더링 대상의 원본을 정의합니다. 픽셀 센터는 정수 위치에서 (0.5f,0.5f) 오프셋됩니다.
다이어그램 
텍셀 좌표계
텍셀 좌표계의 원점은 다음 다이어그램과 같이 텍스처의 왼쪽 위 모서리에 있습니다. 이렇게 하면 픽셀 좌표계가 텍셀 좌표계와 정렬되므로 화면 맞춤 텍스처를 간단하게 렌더링할 수 있습니다.
텍스처 좌표는 정규화된 숫자 또는 배율 숫자로 표시됩니다. 각 텍스처 좌표는 다음과 같이 특정 텍셀에 매핑됩니다.
정규화된 좌표의 경우:
- 점 샘플링: 텍셀 # = floor(U * Width)
- 선형 샘플링: 왼쪽 텍셀 # = floor(U * Width), 오른쪽 텍셀 # = 왼쪽 텍셀 # + 1
배율 조정된 좌표의 경우:
- 점 샘플링: 텍셀 # = floor(U)
- 선형 샘플링: 왼쪽 텍셀 # = floor(U - 0.5), 오른쪽 텍셀 # = 왼쪽 텍셀 # + 1
여기서 너비는 텍스처의 너비(텍셀)입니다.
텍스처 주소 래핑은 텍셀 위치가 계산된 후에 발생합니다.