DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 압축 텍스처 리소스 불투명 텍스처와 1 비트 알파 텍스처 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
텍스처 포맷 DXT1 는, 불투명 또는 단일의 투과색이 있는 텍스처용이다.
각 불투명 또는 1 비트 알파 블록을 위해서(때문에), 2 개의 16 비트값 (RGB 5:6:5 포맷)과 1 픽셀 2 비트의 4 × 4 비트 맵이 저장 된다. 이것은, 16 텍셀에 대해서 합계 64 비트, 즉 4 비트/텍셀이 된다. 블록 비트 맵에는, 4 색간을 선택하는 텍셀 마다 2 비트가 있다. 4 색중 2 색은, encode 된 데이터에 저장 된다. 다른 2 색은, 선형 보간으로 저장 되는 색으로부터 파생한다. 다음 그림은 이 레이아웃을 나타내고 있다.
1 비트 알파 포맷은, 블록에 저장 된 16 비트색값을 비교하는 것으로써, 불투명 포맷과 구별된다. 이것들은, 부호 없음의 정수로서 처리된다. 최초의 색이 다음의 색보다 큰 경우는, 불투명 텍셀만이 정의되고 있는 것을 의미한다. 즉, 텍셀을 나타내는데 4 색이 사용된다. 4 색의 encode에는 2 개의 파생한 색이 있어, 전 4 색은 RGB 색공간(color space)에 균등하게 분포한다. 이 포맷은, RGB 5:6:5 포맷에 유사하고 있다. 다른 점에서는, 1 비트 알파 투명도용으로 3 개의 색은 사용되어 4 번째의 색은 투과형 텍셀을 나타내기 위해서(때문에) 확보된다.
3 개의 색의 encode에는 1 개의 파생한 색이 있어, 4 번째의 2 비트 코드는 투과형 데쿠세루 (알파 정보)를 들어갈 수 있기 위해서(때문에) 확보된다. 이 포맷은, 알파 마스크를 encode 하기 위해서 마지막 비트를 사용하는 RGBA 5:5:5:1 에 유사하고 있다.
다음 샘플 코드는, 3 색의 encode를 선택하든가, 혹은 4 색의 encode를 선택할까를 결정하기 위한 알고리즘을 나타낸다.
if (color_0 > color_1) { // Four-color block:derive the other two colors. // 00 = color_0, 01 = color_1, 10 = color_2, 11 = color_3 // These 2-bit codes correspond to the 2-bit fields // stored in the 64-bit block. color_2 = (2 * color_0 + color_1 + 1) / 3; color_3 = (color_0 + 2 * color_1 + 1) / 3; } else { // Three-color block:derive the other color. // 00 = color_0, 01 = color_1, 10 = color_2, // 11 = transparent. // These 2-bit codes correspond to the 2-bit fields // stored in the 64-bit block. color_2 = (color_0 + color_1) / 2; color_3 = transparent; }
투과형 픽셀의 RGBA 구성 요소는, 혼합전에 제로로 설정해 두는 것을 권한다.
8 바이트 블록용의 메모리층을 다음 표에 나타낸다. 최초의 인덱스가 y 축, 2 번째의 인덱스가 x 축으로 대응 하면 생각한다. 예를 들어, 텍셀 [1][2] 는 (x, y) = (2,1)로 텍스처 맵 픽셀을 참조한다.
다음의 표는, 8 바이트 (64 비트) 블록용의 메모리 레이아웃을 나타내고 있다.
워드 어드레스 | 16 비트 워드 |
---|---|
0 | Color_0 |
1 | Color_1 |
2 | Bitmap Word_0 |
3 | Bitmap Word_1 |
color_0 와 color_1 (2 극값에서의 색)의 배치를 다음에 나타낸다.
비트 | 컬러 |
---|---|
4:0 (LSB*) | 청색 성분 |
10:5 | 녹색 성분 |
15:11 | 적색 성분 |
*최하정도 비트 (LSB)
bitmap word_0 의 배치
비트 | 텍셀 |
---|---|
1:0 (LSB) | 텍셀 [0][0] |
3:2 | 텍셀 [0][1] |
5:4 | 텍셀 [0][2] |
7:6 | 텍셀 [0][3] |
9:8 | 텍셀 [1][0] |
11:10 | 텍셀 [1][1] |
13:12 | 텍셀 [1][2] |
15:14 (MSB*) | 텍셀 [1][3] |
*최상정도 비트 (MSB)
bitmap word_1 의 배치
비트 | 텍셀 |
---|---|
1:0 (LSB) | 텍셀 [2][0] |
3:2 | 텍셀 [2][1] |
5:4 | 텍셀 [2][2] |
7:6 | 텍셀 [2][3] |
9:8 | 텍셀 [3][0] |
11:10 | 텍셀 [3][1] |
13:12 | 텍셀 [3][2] |
15:14 (MSB) | 텍셀 [3][3] |
불투명 encode의 예로서 적과 흙이 극값이라고 가정한다. 빨강은 color_0, 흑은 color_1 로 한다. 4 개의 보간색을 사용해, 균일하게 변화하는 그라데이션을 형성한다. 4 × 4 비트 맵의 값을 결정하려면 , 다음에 나타내는 계산식을 사용한다.
00 ? color_0 01 ? color_1 10 ? 2/3 color_0 + 1/3 color_1 11 ? 1/3 color_0 + 2/3 color_1
비트 맵은, 다음과 같이 된다.
이 비트 맵은 다음과 같은 일련의 색이 된다.
부호 없음 16 비트 정수 (color_0)가 부호 없음 16 비트 정수 (color_1)보다 작은 경우, 이 포맷이 선택된다. 이 포맷은, 푸른 하늘을 배경으로 한 나뭇잎 등에 사용할 수 있다. 몇개의 텍셀은, 3 색의 초록의 그림자가 잎에 대해서 사용되는 동안에 투과형으로서 기록된다. 이것들 2 색은 극값에 적합해, 3 번째의 색은 보간 한 색이 된다.
그러한 화면의 예를 다음에 나타낸다.
위의 그림에 하얗게 나타나는 화면에서는, 텍셀은 투과형으로서 encode 되는 것에 주의 해야 한다. 또, 투과형 텍셀의 RGBA 구성 요소는, 혼합전에 제로로 설정하도록(듯이) 주의 해야 한다.
색과 투과성에 대한 비트 맵 encode는, 다음의 계산식을 사용해 결정된다.
00 ? color_0 01 ? color_1 10 ? 1/2 color_0 + 1/2 color_1 11 ? Transparent
비트 맵은, 다음과 같이 된다.