1. 텍스처와 자원의개괄.
• 후면 버퍼와 깊이 버퍼는 ID3D11Texture2D 인터페이스로 대표되는 2차원
텍스처 자원이다
• 텍스처 자원은 파이프라인의 단계에 직접 묶이지 않고, 텍스처가 연관된
자원 뷰를 파이프라인 단계에 묶는다. 흔한 예로 텍스처를 렌더 타겟으로
바인딩 하는 것과 텍스처를 셰이더 자원으로 바인딩 하는 것이 있다.
• Flag는 연관된 리소스 뷰에 맞게 설정한다.
D3D11_BIND_RENDER_TARGET이라면 ID3D11RenderTargetView를
사용하고, D3D11_BIND_SHADER_RESOURCE라면
ID3D11ShaderResourceView를 사용한다.
3.
2. 텍스처 좌표.
•텍스처 좌표 (u,v)로 식별되는 텍스처의 한 요소를 텍셀(texel; texture
element)이라고 부른다.
• p0,p1,p2가 한 3차원 삼각형의 정점들이고 q0,q1,q2가 그에 해당하는
텍스처 좌표들이라고 하면, 3차원 삼각형의 임의의 점 (x,y,z)에 대한
텍스처 좌표 (u,v)는 삼각형 정점들에 지정된 텍스처 좌표들을 삼각형 면을
따라 보간해서 구하는데, 이 보간에는 삼각형 정점의 보간에 쓰이는 것과
동일한 s, t매개변수가 적용된다.
• 즉, s≥0,t≥0,s+t≤1이라 할 때, 만일
(x, y, z) = p = p0 + s(p1−p0) + t(p2−p0)이면
(u, v) = q = q0 + s(q1−q0) + t(q2−q0) 이다.
• 이런 보간에 의해, 삼각형의 모든 점마다 그에 대응되는 텍스처 좌표가
결정된다.
4.
2. 텍스처 좌표.
왼쪽은3차원 공간의 한 삼각형이며, 오른쪽은 그 3차원 삼각형에 입혀질
텍스처상의 2차원 삼각형을 정의한 것이다.
5.
3. 텍스처 생성및 활성화.
• 일반적으로 텍스처 자료는 디스크에 저장된 이미지 파일에서 읽어서 ID3D11Texture2D
객체에 적재한다.
• 그러나 텍스처 자원이 렌더링 파이프라인에 직접 묶이는 것은 아니다.
• 대신 텍스처에 대한 셰이더 자원 뷰(ID3D11ShaderResourceView)를 생성하고 그 뷰를
파이프라인에 묶어야 한다.
• DX에서는 이 단계를 한번에 수행해 주는 함수가 있다.
• hlsl에서 2차원 텍스처 객체를 나타내는 형식은 Texture2D이다.
6.
4. 필터 -확대
• 통상적인 텍스처 매핑에서 텍셀, 즉 텍스처 맵의 요소들은 하나의 연속된 이미지로부터
추출하는 이산적인 색상 표본(sample)이라 할 수 있다.
• 텍셀을 면적을 가진 하나의 직사각형이라고 생각하는 것은 바람직하지 않다.
• 각 픽셀에는 정점 텍스처 좌표를 삼각형을 따라 보간해서 결정된 고유한 텍스처 좌표가
부여되어 있다.
• 따라서 확대나 축소가 일어날 때 텍셀 점과 정확히 일치하지 않는 텍스처 좌표를 가진
픽셀들이 존재하게 된다.
• 그런 픽셀들의 색을 결정하는 한 가지 방법은 픽셀 부근에 있는 텍셀들의 색들을 보간하는
것이다.
7.
4.1 확대
• 그래픽하드웨어는 두 종류의 보간 방법을 지원하는데, 하나는 상수 보간이고 또 하나는
선형 보간이다. 실제 응용에서는 거의 항상 선형 보간이 쓰인다.
• 2차원 텍스처에서는 겹선형 보간(bilinear interpolation)이라는 선형 보간 기법을 사용한다.
그림에서 보듯이, 겹선형 보간에서는 네 텍셀 사이의 한 지점을 가리키는 텍스처 좌표가
주어졌을 때 u 방향으로 1차원 선형 보간을 수행하고 v 방향으로 1차원 선형 보간을
수행해서 최종 결과를 얻는다.
8.
4.2 축소
• 축소에대해서 필터링 이외의 처리가 가능하다.
• 평균 하향표본화(downsampling)를 통해 기존 텍스처를 더 작은 맵으로 줄일 수 있다.
• 이것을 이용해서 축소를 효율적으로 근사하는 기법이 바로 밉매핑(mipmapping)이다.
• 밉매핑에서는 텍스처 초기화 시점(또는 생성 시점)에서 주어진 이미지를 하향표본화해서
텍스처의 더 작은 버전들을 만든다.
• 그런 버전들을 밉맵 수준(mipmap level)들이라고 부르며, 그러한 밉맵 수준들이 하나의 밉맵
사슬(mipmap chain)을 형성한다.
• 이후 렌더링 도중에 텍스처를 적용할 때 그래픽 하드웨어는 응용 프로그램이 제공한 밉맵
설정에 기초해서 다음 두 방식 중 하나를 적용한다.
9.
4.2 축소
1. 화면에투영된 기하구조의 해상도에 가장 잘 부합하는 하나의 밉맵 수준을 선택해서
텍스처로 사용한다.
이때 필요하다면 상수 보간이나 선형 보간이 적용된다. 이처럼 가장 가까운 밉맵 수준을
사용하는 방식을 밉맵의 점 필터링이라고 부르는데, 텍스처 적용시 상수 보간을 통해서
가장 가까운 텍셀 값을 선택하는 점 필터링과 비슷한 방식이기 때문이다.
2. 화면에 투영된 기하구조의 해상도에 가장 잘 부합하는 이웃한 두 밉맵 수준(하나는 화면
기하구조 해상도보다 큰 것, 다른 하나는 더 작은 것)을 선택한다.
그런 다음 그 두 밉맵 수준에 대해 상수 필터링이나 선형 필터링을 적용해서 두 개의
표본(텍스처 색상)을 뽑는다.
마지막으로 그 두 표본을 보간해서 최종 색상을 결정한다.
이처럼 가장 가까운 두 밉맵 수준을 선형 보간하는 방식을 밉맵의 선형 필터링이라고
부르는데, 텍스처 적용 시 가장 가까운 두 텍셀 값을 보간하는 선형 필터링과 비슷한
방식이기 때문이다.
10.
4.3 비등방 필터링
•지금까지의 필터링 외에 사용할 수 있는 필터링이 하나 더 있는데, 바로 비등방 필터링이다.
• 비등방 필터링(anisotropic filtering)은 다각형의 법선 벡터와 카메라의 시선 벡터 사이의
각도가 클 때(이를테면 다각형이 시야 창과 수직에 가까울 때) 발생하는 왜곡 현상을
완화한다.
11.
5. 텍스처와 재질
•텍스처를 재질/조명 시스템과 통합할 때에는, 텍스처 색상을 주변광과 분산광으로
변조(Modulation)하되 반영광으로는 변조하지 않도록 하는 것이 일반적이다.
• 이러한 방식을 흔히 ‘변조 후 가산[Moulate with late add]’ 라고 부른다.
12.
6. 텍스처 좌표지정 모드
• 텍스처와 상수 또는 선형 보간의 조합은 하나의 벡터 값 함수 T(u,v)=(r,g,b,a)를 정의한다.
즉, 텍스처 좌표 (u,v)∈[0,1]2이 주어졌을 때, 텍스처 함수 T는 하나의 색상 (r,g,b,a)를
돌려준다.
• 이 함수의 정의역 바깥의 좌표가 주어졌을 때의 처리 방식을 좌표 지정 모드(address
mode)라고 부르는데, Direct3D가 지원하는 좌표 지정 모드는 순환(wrap), 테두리 색(border
color), 한정(clamp), 거울(mirror) 네 가지이다.
13.
6. 텍스처 좌표지정 모드
1. 순환 지정모드
• 순환 모드에서는 이미지가 정수 경계마다 반복된다.
14.
6. 텍스처 좌표지정 모드
2. 테두리 색 모드
• 테두리 색 모드에서 바깥의 텍스처 좌표(u,v)가 입력되면 텍스처 함수는
프로그래머가 지정한 색을 돌려준다.
15.
6. 텍스처 좌표지정 모드
3. 한정 모드
• 한정 모드에서 텍스처 함수는 [0,1]2 바깥의 좌표 (u,v)에 대해 색(u0,v0)을 돌려주는데,
여기서 (u0,v0)는 [0,1]2 범위 안에서 가장 가까운 점이다.
16.
6. 텍스처 좌표지정 모드
4. 거울 모드
• 거울 모드에서는 이미지가 각 정수 경계마다 반사, 즉 반대 방향으로 반복된다.