텍스처 좌표
Direct3D는 u축이 이미지의 가로 방향이고 v축이 이미지의 세로 방향인 텍스처 좌표계를 사용한다. 텍스처를 구성하는 요소들을 텍셀(texel)이라고 부른다. 텍스처 좌표는 [0, 1]의 구간으로 정규화된 좌표성분들을 사용하는데 텍스처 이미지의 크기와는 독립적인 구간의 좌표들을 다룰 수 있게 하기 위한 것이다.
물체에 텍스처를 입히려면, 물체의 각 3차원 삼각형마다 그 삼각형에 입힐 텍스처 이미지상의 삼각형을 지정해야 한다.
정점에 지정된 텍스처 좌표들을 3차원 삼각형 면을 따라 삼각형 정점들과 동일한 s, t매개변수로 보간해서 텍스처 좌표 (u, v)를 구한다.
실제 응용에서는 여러 종류의 서로 무관한 이미지들을 하나의 커다란 텍스처 맵 (이를 텍스처 대지도(texture altas)라고 부른다)에 모아 두고 각 부분 이미지를 서로 다른 여러 물체에 적용하기도 한다. 각 삼각형에 텍스처의 어떤 부분이 입혀질 것인지는 바로 텍스처 좌표가 결정한다.
텍스처 대지도를 사용하면 한 번의 그리기 호출로 좀 더 많은 기하구조를 그릴 수 있으므로 성능이 향상된다. 각 물체의 텍스처 좌표를 해당 부분 텍스처에 맞게 조정함을써 한 번의 그리기 호출로 나무 상자와 풀, 벽돌을 모두 그릴 수 있다.
텍스처 자료 원본
실시간 그래픽 응용 프로그램에서 즐겨 쓰이는 이미지 파일 형식은 GPU가 직접 이해할 수 있는 다양한 이미지 형식들을 지원한다는 장점이 있는 DDS(DirectDraw Surface format)이다. 특히 DDS는 GPU가 직접 압축을 해제할 수 있는 이미지 압축 형식들을 지원한다.
본질적으로 DDS는 GPU를 위해 만들어진 이미지 형식이다. 예를 들어 DDS 텍스처는 3차원 그래픽 개발에 쓰이는 다음과 같은 기능들을 지원한다.
- 밉맵
- GPU가 직접 해제할 수 있는 압축 형식
- 텍스처 배열
- 입방체 맵
- 입체(볼륨) 텍스처
텍스처들을 장면에 빠르게 입히려면 텍스처들을 모두 GPU 메모리에 담아 두어야 한다. 메모리 요구량을 낮추기 위해, Direct3D는 여러 압축 텍스처 형식들을 지원한다.
필터
텍스처의 이미지보다 크게 화면에 출력되어야 할 경우 텍스처의 확대(magnification)가 일어난다. 적은 수의 텍셀들로 더 많은 수의 픽셀들을 채우게 된다. 텍셀 점과 정확히 일치하지 않는 텍스처 좌표를 가진 픽셀들이 생기는데 그런 픽셀들의 색을 결정하는 한 가지 방법은 픽셀 부근에 있는 텍셀들의 색들을 보간하는 것이다.
이를 위해 그래픽 하드웨어는 두 종류의 보간 방법을 지원하는데, 하나는 상수 보간, 하나는 선형 보간이다. 실제 응용에서는 거의 항상 선형 보간이 쓰인다.
축소에서는 너무 많은 텍셀이 너무 적은 픽셀들에 사상된다. 이 경우에도 대체로 픽셀의 텍스처 좌표가 텍스처 맵의 그 어떤 텍셀 점과도 일치하지 않으며, 따라서 축소에서도 여전히 상수 보간 필터링이나 선형 보간 필터링이 적용된다.
축소를 효율적으로 근사하는 기법이 바로 밈매핑이다. 텍스처 초기화 시점에서 주어진 이미지를 하향표본화해서 텍스처의더 작은 버전들을 만든다. 그런 버전들을 밉맵 수준(mipmap level)들이라고 부르며, 그러한 밉맵 수준들이 하나의 밉맵 사슬을 형성한다. 즉, 평균을 이용한 하향표본화로 밉맵 수준들을 생성하는 작업은 렌더링 이전에 미리 수행되는 것이다.
그래픽 하드웨어는 응용 프로그램이 제공한 밉맵 설정에 기초해서 다음 두 방식 중 하나를 적용한다.
- 화면에 투영된 기하구조의 해상도에 가장 잘 부합하는 밉맵 수준 하나를 선택해서 텍스처로 사용한다. 이때 필요하다면 상수 보간이나 선형 보간을 적용한다. 이처럼 가장 가까운 밉맵 수준을 사용하는 방식을 밉맵의 점 필터링이라고 부른다.
- 화면에 투영된 기하구조의 해상도에 가장 가까운 이웃한 두 밉맵 수준을 선택한다. 그런 다음 그 두 밉맵 수준에 각각 상수 필터링이나 선형 필터링을 적용해서 텍스처 색상을 하나씩 뽑는다. 마지막으로, 그 두 텍스처 색상을 보간해서 최종 색상을 결정한다. 이런 방법을 선형 필터링이라고 부른다.
이 외에 비등방 필터링이 있는데, 이를 이용하면 다각형의 법선 벡터와 카메라의 시선 벡터 사이의 각도가 클 때 발생하는 왜곡 현상이 완화된다. 비용이 가장 비싸다.
텍스처 좌표 지정 모드
텍스처 좌표 (u, v) ∈ [0, 1]^2이 주어졌을 때 텍스처 함수 T는 하나의 색상(r, g, b, a)를 돌려준다. 이 함수의 정의역 바깥의 좌표가 주어졌을 때의 처리 방식을 좌표 지정 모드(address mode)라고 부른다. Direct3D가 지원하는 것은 네 가지이다.
- 순환(wrap) 모드에서는 이미지가 정수 경계마다 반복된다.
- 테두리 색상(border color)모드에서 텍스처 함수는 [0, 1]^2 구간 바깥의 각 텍스처 좌표 (u, v)에 대해 프로그래머가 지정한 색상을 돌려준다.
- 한정(clamp) 모드에서 텍스처 함수는 [0, 1]^2 구간 바깥의 각 텍스처 좌표 (u, v)에 대해 색상 T(u0, v0)을 돌려주는데, 여기서 (u0, v0)는 (u, v)에 가장 가까운 [0, 1]^2 구간 안의 점이다.
- 반사(mirror) 모드에서는 이미지가 정수 경계마다 반사, 즉 반대 방향으로 반복된다.
'그래픽스 > DirectX 12' 카테고리의 다른 글
[DirectX 12 3D게임 입문] Chapter 10 : 혼합 (1) | 2023.12.05 |
---|---|
[DirectX 12 3D게임 입문] Chapter 8.16 : 조명 - 연습문제 (0) | 2023.11.29 |
[DirectX 12 3D게임 입문] Chapter 7.9: Direct3D의 그리기 연산 제2부 - 연습문제 (0) | 2023.11.21 |
[DirectX 12 3D게임 입문] Chapter 6.13: Direct3D의 그리기 연산 - 연습문제 (0) | 2023.11.16 |
[DirectX 12 3D게임 입문] Chapter 5.7 ~ 5.12: 렌더링 파이프라인 - 테셀레이션 단계들 ~ 출력 병합기 단계 (1) | 2023.11.14 |