-
14. 텍스쳐 ( Texture )Software/DirectX 2024. 5. 24. 10:05728x90
Table of Contents
1. 텍스쳐(Texture)
2. 텍스쳐 좌표(Texture Coordinate)
3. 텍스쳐 적용
4. 텍스쳐 필터링
4.1 확대(interpolation)
4.2 축소(minification)
4.3 밉맵(mipmap)
4.4 비등방(anisotropic)
5. 텍스쳐 좌표 지정모드
6. 표본 추출기(Sampler)1. 텍스쳐(Texture)
- 텍스처는 버퍼처럼 자료 원소들의 행렬이다.
- 하지만 버퍼처럼 모든 자료를 담을 순 없고, 특정 자료형식들만 담을 수 있다.
- 꼭 색상 정보만을 담지 않아도 된다. 법선 매핑에서 사용되는 텍스쳐는 원소 하나하나가 3차원 벡터 정보를 담는다.
- 렌더 대상으로서 텍스쳐를 사용하거나, 셰이더에서 색상 정보를 알기 위해 텍스쳐 정보를 추출해오는 등 다양한 방법으로 사용 될 수 있다.
- BMP, DDS, TGA, PNG 같은 이미지 파일로 저장해서 사용한다.
- 특히 DDS는 GPU가 직접 이해할 수 있는 다양한 이미지 형식을 지원한다는 점에서 3D 프로그래밍에 특화되어 있다.
2. 텍스쳐 좌표(Texture Coordinate)
- Direct3D에서는 가로 세로 방향을 u,v로 하는 uv 좌표계로 텍스쳐를 사용한다.
- 텍스쳐를 구성하는 원소들을 텍셀(texel)이라고 한다.
- 세로축인 v축이 위에서 아래로 커진다.
- [0 , 1]구간으로 정규화된 좌표를 사용한다.
- 비례 좌표기 때문에 텍스쳐 실제 크기에 관계 없이 동일한 비율로 적용이 가능하다.
- 물체에 텍스쳐를 입히려면 물체의 각 삼각형 마다 그 삼각형에 입힐 텍스쳐 이미지 상의 삼각형을 지정해야한다.
- 텍스쳐 하나를 메모리 상에 올리는 것은 비용이 크므로, 실제 응용프로그램에서는 여러 물체에 필요한 텍스쳐를 하나의 큰 텍스쳐(Atlas)에 모아서 하나로 올리고, 텍스쳐 좌표만으로 서로 다른 물체를 표현하는 방식을 사용한다.
3. 텍스쳐 적용
텍스쳐를 파이프라인에 묶기 위해서는 다음 단계를 따른다.
- 텍스쳐 파일 불러오기(마소에서 지원하는 DXTK에 여러 함수가 제공됨)
- SRV 힙 생성
- SRV 서술자 생성
- 파이프라인에 묶기
4. 텍스쳐 필터링
4.1. 확대(interpolation)
- 사용자의 시점이 특정 텍스쳐를 입힌 표면에 다가간다고 가정해보자.
- 시야에 표면의 크기가 기존보다 월등하게 커지면 텍스쳐도 그에 맞춰서 늘어나야 할 것이다.
- 이렇게 확대가 일어날 때, 정점 좌표와 텍셀 좌표가 정확하게 일치 하지 않는 부분이 발생한다.
- 이러한 텍셀들의 색을 상수보간 혹은 선형보간(Linear interpolation)을 사용해 보간한다.
- 확대 문제를 완화하기 위해서는 높은 해상도의 텍스쳐를 사용하거나, 사용자가 지나치게 물체게 접근하는 것을 막아두는 방법을 사용할 수 있다.
4.2. 축소(minification)
- 확대와 마찬가지로 축소도 문제를 일으킨다.
- 축소에서 발생하는 왜곡을 막는 기법으로는 밉맵(mipmap)이 있다.
4.3. 밉맵(mipmap)
- 밉맵은 텍스쳐 초기화 시점에서 DownSampling을 통하여 크기가 작은 버전을 여러개 만들어 놓는 것이다.
- 이를 밉맵 수준(Mipmap level)이라고 부르며, 모아 놓은 것을 밉맵 사슬(mipmap chain)이라고 한다.
- 각 밉맵의 크기는 이전 밉맵 수준의 절반이다.
- 가장 가까운 밉맵 수준을 적용한 뒤 보간을 사용하는 기법을 점 필터링이라고 한다.
- 가까운 두개의 밉맵 수준을 선형 보간해서 최종 색상을 결정하는 기법을 선형 필터링이라고 한다.
4.4. 비등방(anisotropic)
- 또 하나의 문제점으로 시점벡터와 물체 표면의 법선벡터가 클때, 텍스쳐에 왜곡이 발생한다.(물체를 비스듬히 바라볼때)
- 비등방 필터링은 이 왜곡을 해결해주지만 비용이 가장 높은 필터링이다.
5. 텍스쳐 좌표 지정모드
- [0, 1]구간 바깥의 좌표가 주어졌을 때 색상을 처리하는 방식
- 순환(Wrap), 테두리 색(border color), 한정(Clamp), 거울(mirror)방식이 있다
- Wrap : 이미지가 반복됨 - Border color : 사용자가 지정한 색상으로 돌려줌 - Clamp : 기존 uv값에 가장 가까운 색상을 돌려줌 - Mirror : 기존 이미지 반대 방향으로 반복됨
6. 표본 추출기(Sampler)
- 표본 추출기에서는 텍스쳐 자원에서 표본을 추출할 때 구체적으로 어떤 필터링 방식과 좌표 지정 모드를 선택한다.
- 표본 추출기는 쉐이더에서 사용되므로 쉐이더에 묶어야한다.
- 대체로 그래픽 프로그램에서 표본 추출기 수는 그리 많지 않다. 따라서 표본 추출기를 정적으로 사용하는 방법을 많이 사용한다.
- 정적 표본 추출기는 최대 2032개 정의할 수 있지만 충분히 많은 숫자이다.
728x90'Software > DirectX' 카테고리의 다른 글
16. 스탠실 ( Stencil ) (0) 2024.05.24 15. 블렌딩 ( Blending ) (1) 2024.05.24 13. 빛 (0) 2024.05.24 12. 조명 (1) 2024.05.24 11. D3D 그리기 연산2 (0) 2024.05.24