다음을 통해 공유


Direct3D 11의 질감 소개

텍스처 리소스는 텍셀을 저장하도록 설계된 구조적 데이터 컬렉션입니다. 텍셀은 파이프라인에서 읽거나 쓸 수 있는 텍스처의 가장 작은 단위를 나타냅니다. 버퍼와 달리 텍스처는 셰이더 유닛에 의해 읽힐 때 텍스처 샘플러를 통해 필터링됩니다. 텍스처 유형은 텍스처 필터링 방식에 영향을 줍니다. 각 텍셀에는 DXGI_FORMAT 열거형으로 정의된 DXGI 형식 중 하나로 정렬된 1~4개의 구성 요소가 포함됩니다.

텍스처는 알려진 크기의 구조화된 리소스로 만들어집니다. 그러나 텍스처가 파이프라인에 바인딩될 때 뷰를 사용하여 형식을 완전히 지정하는 한 리소스를 만들 때 각 텍스처는 형식화되거나 형식이 없을 수 있습니다.

텍스처 형식

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

1D 텍스처

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

1D 텍스처의 그림

각 텍셀에는 저장된 데이터의 형식에 따라 다양한 색 구성 요소가 포함됩니다. 복잡성을 더하면 다음 그림과 같이 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 텍스처 배열과 비슷한 레이아웃이 있습니다.

2d 텍스처 배열의 삽화

이 텍스처 배열에는 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 텍스처 리소스 의 그림

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

3D 텍스처 배열의 개념은 없습니다. 따라서 3D 텍스처 하위 리소스는 단일 Mipmap 수준입니다.

질감