S3 텍스쳐 압축

S3 Texture Compression (S3TC). 텍스쳐에 특화된 손실압축 알고리즘으로, 좀 더 정확하게는 DXT1~DXT5까지의 다섯 종류의 거의 비스무리하지만 서로 다른 알고리즘들을 묶어 이른다. 좀 심하게 말하면 압축이라기보다는 양자화된 이미지를 어떻게 비트로 묶어 표현할까 하는 포맷에 불과하며, 비슷한 아이디어는 이전에도 꽤 존재하고 있었다(1970년대의 block truncation coding 같은 기법은 이 알고리즘을 1비트 테이블에 적용한 것이라 할 수 있다).

DirectX(DXTC)와 OpenGL(GL_EXT_texture_compression_s3tc 확장)에서 모두 지원하며, 그런 주제에 소프트웨어 특허가 걸려 있어서(…) 애플사 등이 데꿀멍하는 데 공헌했다1). 거의 Marching cubes 알고리즘과 비슷한 정도의 민폐를 끼치고 있다고 봐도 될 듯. 본래 특허권은 S3 그래픽스에게 있었으나, 현재는 HTC에 인수된 상태이다.

상세

모든 S3 텍스쳐 압축 알고리즘은 본래대로라면 384비트(RGB)나 512비트(RGBA)로 표현해야 하는 4×4 픽셀 블록을 64비트(DXT1) 또는 128비트(DXT2~5)로 압축하는 방법이다. 따라서 압축률은 항상 일정하며(4:1이거나 6:1) 메모리 접근을 예측하기 매우 쉽기 때문에 병렬화나 최적화에 유리하다. 6:1 압축률을 사용할 경우 어떤 텍스쳐는 텍스쳐를 가로 세로 두 배로 늘리고서 크기가 원래보다 줄어 드는 기적도 보일 수 있다. 물론 블록 안의 색깔이 간단하게 양자화가 안 된다면 정확도는 매우 떨어진다.

실제 포맷은 다음과 같이 구성된다:

DXT2와 DXT4는 DXT3과 DXT5와 동일하지만 색상 부분에서 미리곱한알파 포맷을 사용한다. 이 포맷은 DirectX 10과 OpenGL에서는 지원하지 않는다.