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