Direct3D 11의 텍스처 소개

텍스처 리소스는 텍셀을 저장하도록 구조화된 데이터 모음입니다. 텍셀은 파이프라인에서 읽거나 쓸 수 있는 텍스처의 최소 단위를 나타냅니다. 버퍼와 달리 텍스처는 셰이더 단위에서 읽으므로 텍스처 샘플러에서 필터링할 수 있습니다. 텍스처의 유형은 텍스처의 필터링 방식에 영향을 미칩니다. DXGI_FORMAT 열거형에 정의된 DXGI 형식 중 하나로 정렬된 구성 요소가 텍셀 하나당 1 ~ 4개 포함됩니다.

텍스처는 알려진 크기의 구조화된 리소스로 생성됩니다. 그러나 텍스처가 파이프라인에 바인딩될 때 보기를 사용해 유형이 완전히 지정되면 리소스가 만들어질 때 각 텍스처에 유형이 있거나 없을 수 있습니다.

텍스처 형식

1D, 2D, 3D 등 여러 유형의 텍스처가 있으며, 각각 Mipmap을 사용하거나 사용하지 않고 만들 수 있습니다. Direct3D 11은 텍스처 배열 및 다중 샘플링된 텍스처도 지원합니다.

1D 텍스처

가장 단순한 형태의 1D 텍스처에는 단일 텍스처 좌표로 주소를 지정할 수 있는 텍스처 데이터가 포함됩니다. 이는 다음 그림과 같이 텍셀 배열로 시각화할 수 있습니다. 1D 텍스처는 ID3D11Texture1D 인터페이스로 표시됩니다.

1D 텍스처 그림

저장되는 데이터 형식에 따라 텍셀 하나당 수많은 색상 구성 요소가 포함됩니다. 다음 그림과 같이 Mipmap 수준으로 1D 텍스처를 생성할 수 있다는 점에서 더욱 복잡합니다.

Mipmap 수준이 있는 1D 텍스처 그림

Mipmap 수준은 바로 위 수준보다 2의 거듭 제곱만큼 작은 텍스처입니다. 맨 위 수준에 가장 많은 정보가 담겨 있고 한 수준 낮아질 때마다 정보 양이 줄어듭니다. 1D Mipmap에서 최소 수준에는 1텍셀이 포함됩니다. 게다가 MIP 수준은 항상 1:1로 줄어듭니다. 홀수 크기의 텍스처에 Mipmap이 생성되면 바로 아래 수준은 항상 짝수 크기(최저 수준이 1에 도달한 경우는 예외)입니다. 예를 들어 다음 그림의 5x1 텍스처를 보면, 바로 아래 수준은 2x1 텍스처이고 그 다음(마지막) mip 수준은 1x1 크기의 텍스처입니다. 이 수준은 카메라에서 가깝지 않은 기하 도형을 렌더링할 때 더 작은 텍스처에 액세스하는 데 사용되는 LOD(level-of-detail)라는 인덱스로 식별됩니다.

1D 텍스처 배열

Direct3D 11은 텍스처 배열도 지원합니다. 1D 텍스처 배열은 ID3D11Texture1D 인터페이스로도 표시됩니다. 이론적으로 1D 텍스처의 배열은 다음 그림과 같이 보입니다.

1D 텍스처 배열 그림

이 텍스처 배열에는 세 개의 텍스처가 포함되어 있습니다. 이 세 개 텍스처의 폭은 각각 5(첫 번째 계층의 요소 개수)입니다. 각 텍스처에는 3 계층 Mipmap도 포함되어 있습니다.

Direct3D의 모든 텍스처 배열은 같은 유형의 텍스처 배열입니다. 즉 텍스처 배열의 모든 텍스처는 동일한 데이터 서식과 크기(텍스처 폭과 Mipmap 수준 개수 포함)로 구성되어야 합니다. 각 배열에 속한 모든 텍스처의 크기가 일치하면 서로 다른 크기의 텍스처 배열을 만들 수 있습니다.

2D 텍스처와 2D 텍스처 배열

Texture2D 리소스에는 텍셀의 2D 그리드가 포함되어 있습니다. 각 텍셀은 a u, v 벡터로 주소를 지정할 수 있습니다. 이는 텍스처 리소스이므로 Mipmap 수준과 하위 리소스를 포함할 수 있습니다. 2D 텍스처는 ID3D11Texture2D 인터페이스로 표시됩니다. 완전히 채워진 2D 텍스처 리소스는 다음 그림처럼 보입니다.

2D 텍스처 리소스 그림

이 텍스처 리소스에는 3 Mipmap 수준의 3x5 텍스처가 하나 포함되어 있습니다.

2D 텍스처 배열 리소스는 동일한 유형의 2D 텍스처 배열입니다. 즉 각 텍스처의 데이터 서식과 차원(Mipmap 수준 포함)이 동일합니다. 2D 텍스처 배열은 ID3D11Texture2D 인터페이스로도 표시됩니다. 다음 그림과 같이 이제 텍스처에 2D 데이터가 포함된다는 점을 제외하면 1D 텍스처 배열의 레이아웃과 비슷합니다.

2D 텍스처 배열 그림

이 텍스처 배열에는 세 개의 텍스처가 포함되며 각 텍스처는 2 Mipmap 수준의 3x5입니다.

2D 텍스처 배열을 텍스처 큐브로 사용

텍스처 큐브는 각각 큐브의 한 면에 해당하는 6개 텍스처를 포함한 2D 텍스처 배열입니다. 완전히 채워진 텍스처 큐브는 다음 그림처럼 보입니다.

텍스처 큐브를 나타내는 2d 텍스처 배열 그림

6개 텍스처를 포함하는 2D 텍스처 배열은 큐브-텍스처 보기로 파이프라인에 바인딩된 후 큐브 맵 기본 기능이 있는 셰이더 내에서 읽을 수 있습니다. 셰이더에서 텍스처 큐브는 텍스처 큐브의 중앙에서부터 시작되는 3D 벡터로 주소가 지정됩니다.

참고

10_1 기능 수준 이상으로 만드는 디바이스는 텍스처 수가 배열의 텍스처 큐브 수와 6배 같은 텍스처 큐브 배열을 지원할 수 있습니다. 10_0 기능 수준으로 만든 디바이스는 6개의 얼굴로 구성된 단일 텍스처 큐브만 지원합니다. 또한 Direct3D 11은 부분 큐브맵을 지원하지 않습니다.

 

3D 텍스처

볼륨 텍스처라고도 하는 3D 텍스처 리소스에는 텍셀의 3D 볼륨이 포함되어 있습니다. 텍스처 리소스이기 때문에 Mipmap 수준이 포함될 수 있습니다. 3D 텍스처는 ID3D11Texture3D 인터페이스로 표시됩니다. 완전히 채워진 3D 텍스처는 다음 그림처럼 보입니다.

3D 텍스처 리소스 그림

3D 텍스처 Mipmap 슬라이스가 렌더링 대상 출력으로 바인딩되면(렌더링 대상 보기 이용) 3D 텍스처가 n개 슬라이스가 있는 2D 텍스처 배열과 동일하게 동작합니다. 특정 렌더링 조각은 출력 데이터의 스칼라 구성 요소를 SV_RenderTargetArrayIndex 시스템 값으로 선언하여 기하 도형 셰이더 단계에서 선택됩니다.

3D 텍스처 배열의 개념이 없기 때문에 3D 텍스처 하위 리소스는 단일 Mipmap 수준입니다.

질감