다음을 통해 공유


불투명 및 1비트 알파 텍스처(Direct3D 9)

텍스처 형식 DXT1은 불투명하거나 단일 투명 색이 있는 텍스처용입니다.

각 불투명 또는 1 비트 알파 블록에 대해 16비트 값(RGB 5:6:5 형식) 2개와 픽셀당 2비트인 4x4 비트맵이 저장됩니다. 이를 모두 합치면 16개 텍셀에 대해 64비트 또는 텍셀당 네 비트입니다. 블록 비트맵에는 네 가지 색 중에서 선택할 수 있는 텍셀당 2비트가 있습니다. 네 가지 색 중 두 가지는 인코딩된 데이터에 저장됩니다. 나머지 두 색은 선형 보간을 통해 저장된 두 가지 색에서 파생됩니다. 이 레이아웃은 다음 다이어그램에 표시되어 있습니다.

비트맵 레이아웃 다이어그램

1비트 알파 형식은 블록에 저장된 두 가지 16비트 색 값과 비교하여 불투명 형식과 구별됩니다. 이러한 값은 부호 없는 정수로 처리됩니다. 첫 번째 색이 두 번째 색보다 큰 경우, 이는 불투명 텍셀만 정의하였음을 뜻합니다. 즉, 네 가지 색을 사용하여 텍셀을 나타낸다는 것입니다. 4색 인코딩에는 파생된 색 두 가지가 있고 네 가지 색 모두는 RGB 색 공간에 동등하게 배포됩니다. 이 형식은 RGB 5:6:5 형식과 유사합니다. 그렇지 않은 경우 1비트 알파 투명도에 대해 세 가지 색을 사용하고 네 번째 색은 투명 텍셀을 표시하기 위해 남겨둡니다.

3색 인코딩에는 파생된 색이 하나 있고 네 번째 2비트 코드는 투명 텍셀(알파 정보)를 나타내기 위해 남겨둡니다. 이 형식은 알파 마스크 인코딩에 최종 비트가 사용되는 RGBA 5:5:5:1과 유사합니다.

다음 코드 예제에서는 3색 또는 4색 인코딩 선택 여부를 결정하는 알고리즘을 보여줍니다.

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 구성 요소를 0으로 설정하는 것이 좋습니다.

다음 표는 8바이트 블록의 메모리 레이아웃을 나타냅니다. 첫 번째 인덱스는 y 좌표에 해당하고 두 번째 인덱스는 x 좌표에 해당하는 것으로 가정합니다. 예를 들어 Texel[1][2]는 (x y) = (2,1)의 텍스처 맵 픽셀을 가리킵니다.

이 테이블에는 8비트(64비트) 블록의 메모리 레이아웃이 포함되어 있습니다.

단어 주소 16비트 단어
0 Color_0
1 Color_1
2 비트맵 Word_0
3 비트맵 Word_1

 

두 극단에 있는 색인 Color_0 및 Color_1은 다음과 같이 배치됩니다.

비트
4:0(LSB*) 파란색 구성 요소
10:5 녹색 구성 요소
15:11 빨간색 구성 요소

 

*최하위 비트

비트맵 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)

비트맵 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]

 

불투명 색 인코딩의 예

불투명 인코딩 예로, 빨간색과 검은색이 극단에 있다고 가정합니다. 빨간색은 color_0이고 검은색은 color_1입니다. 이들 사이에 균등하게 분산된 그라데이션을 이루는 보간된 색이 4가지입니다. 4x4 비트맵에 대한 값을 확인하려면 다음과 같이 계산하면 됩니다.

00 ? color_0
01 ? color_1
10 ? 2/3 color_0 + 1/3 color_1
11 ? 1/3 color_0 + 2/3 color_1

비트맵은 다음 다이어그램과 같습니다.

확장된 비트맵 레이아웃을 보여 주는 다이어그램

이는 다음과 같이 일련의 색으로 표시됩니다.

참고

이미지에서 픽셀(0,0)이 왼쪽 위에 나타납니다.

 

불투명 인코딩 그라데이션 그림

1비트 알파 인코딩의 예

부호 없는 16비트 정수 color_0이 부호 없는 16비트 정수 color_1보다 작은 경우, 이 형식을 선택합니다. 이 형식을 사용할 수 있는 예로 푸른 하늘을 배경으로 하여 표시된 나뭇잎을 들 수 있습니다. 일부 텍셀을 투명하게 표시할 수 있지만, 녹색 음영 세 개를 여전히 나뭇잎에 사용할 수 있습니다. 두 가지 색은 극단을 수정하고 세 번째 색은 보간된 색입니다.

다음 일러스트레이션은 그러한 사진의 예입니다.

1비트 알파 인코딩 그림

이미지가 흰색으로 표시되는 경우 텍셀은 투명으로 인코딩됩니다. 또한 투명 텍셀의 RGBA 구성 요소는 혼합하기 전에 0으로 설정해야 합니다.

색 및 투명도의 비트맵 인코딩은 다음과 같이 계산하여 결정합니다.

00 ? color_0
01 ? color_1
10 ? 1/2 color_0 + 1/2 color_1
11   ?   Transparent

비트맵은 다음 다이어그램과 같습니다.

확장된 비트맵 레이아웃 다이어그램

압축된 텍스처 리소스