1. 개요
Texture Compression이미지 압축 포맷 중, 주로 3D 그래픽의 텍스처용으로 사용되는 것들을 의미한다 특성상 무손실 압축 포맷은 없고, 거의 모두 손실 압축 포맷이고 인코딩/디코딩 단계에서 그래픽 하드웨어에서 직접 연산이 가능하도록 SIMD에 최적화 된 구조를 가지고 있다.
90년대 후반경 3D 그래픽 카드들이 등장하면서 개발되었으며, 같은 VRAM 용량이라면 무압축 포맷보다 더 큰 텍스처들을 사용할 수 있는 등의 장점으로 인해 바로 대중화되었고, 비슷한 시기의 게임 콘솔에도 채택되기에 이른다. 이후 콘솔이나 PC, 모바일 등 3D 그래픽을 표시할 수 있는 거의 모든 기종들에서 지원하고, 또 널리 사용되고 있다.
텍스처 압축 포맷은 디코딩이 빨라야 하고, 원하는 형태로 텍스처를 잘라 쓸 수 있도록 랜덤 액세스가 용이하여아 하며[1], 그러면서도 사람들이 수용할 수 있는 높은 이미지 퀄리티가 필요하다. 디코딩 회로는 대부분 GPU에 내장되어 텍스처 맵핑을 할때 실시간으로 디코딩된다.
이미지 손실 압축 포맷이 대부분 그렇듯이, 실사풍 텍스처는 압축해도 딱히 티가 잘 나진 않지만, 팬시풍의 그림이나 도트 노가다를 한 그림 등 색을 적게 사용하는 텍스처는 이미지 퀄리티의 하락이 눈에 쉽게 띈다는 단점이 있다. 그래서 과거에는 3D 그래픽에 활용할 텍스처만 압축을 하고, 2D 그래픽(2D 게임이나, UI 등)에 사용할 텍스처는 압축을 하지 않고 그대로 사용하는 경우가 많았지만, 이후 텍스처의 용량이 커지고, 텍스처 압축 프로그램에서 최대한 덜 손실되어 보이도록 하는 알고리즘을 도입하는 등 기술적으로 한계를 어느 정도 보완 가능해지면서 2D 그래픽에 사용하는 텍스처도 압축하고 있는 추세이다.
2. 텍스처 압축 포맷의 종류
- FXT1: 3dfx에서 자사의 Voodoo 시리즈용으로 개발한 포맷. Voodoo 시리즈의 몰락으로 인해 현재는 사용되지 않는다. 사실 당시에도 S3TC에 비해 이미지 퀄리티가 떨어지는 편이었다.
- S3 Texture Compression(S3TC,DXTC,BCn[2]): 2023년에도 DirectX 표준으로 널리 쓰이는 방식. S3 Graphics에서 자사의 Savage3D 그래픽 카드용으로 개발한 포맷. DirectX 6.0과 OpenGL 1.3에서 라이센싱된 것을 시작으로, 닌텐도의 게임큐브와 마이크로소프트의 엑스박스를 시작(플레이스테이션 시리즈는 플레이스테이션 3부터 채택되었다)으로 콘솔에도 채택되면서 PC와 콘솔 게임의 텍스처 압축 포맷의 사실상 표준에 가까운 지위를 누리고 있는 포맷. 세부 포맷으로 DXT1부터 DXT5까지 존재하나 대부분 알파 채널이 없는 텍스처는 DXT1, 있는 텍스처는 DXT5를 사용한다.
이 포맷의 압축 알고리즘은 S3가 특허로 등록했기 때문에, 2000년대 이후 S3는 사실상 GPU 경쟁에서 도태되어 몰락했지만 워낙에 많이 사용되는 이 포맷 때문에 라이센스비 챙겨가는것 만으로 먹고 살았으며, 이를 노리고 VIA나 HTC등에서 회사를 인수했을 정도. 2017년에 특허가 만료되었다. - PVRTC(PowerVR Texture Compression): PowerVR용으로 개발된 포맷. PowerVR이 주로 iOS 디바이스에서 사용되었던 만큼, iOS의 표준 텍스처 포맷이며 자체 설계 GPU로 넘어간 2020년 현재도 사용되고 있다.
- ETC(Ericsson Texture Compression): 에릭슨에서 개발한 포맷. OpenGL ES의 표준 텍스처 압축 포맷으로, 주로 안드로이드의 표준 압축 포맷으로 사용되며, 닌텐도 3DS의 표준 텍스처 압축 포맷으로도 사용된다. 다만 다른 포맷과 비교하여 이미지 품질이 떨어지거나 알파 채널을 지원하지 않는 등의 약점이 있으며, 이후 ETC2라는 신규 포맷으로 개선하였지만 OpenGL ES 3.0 이상을 지원하는 디바이스에서만 사용이 가능하다.
- ASTC(Adaptive Scalable Texture Compression): ARM과 AMD가 공동으로 개발한 포맷. 2012년에 처음 선을 보인 비교적 최신 포맷으로, 기존 포맷들의 약점을 개선하여 이미지 품질과 압축 효율을 끌어올린 포맷이다. 안드로이드와 iOS 양쪽 모두 사용이 가능하지만 OpenGL ES 3.2 이상을 지원하는 디바이스에서만 사용이 가능하며, 갤럭시 S6나 아이폰 6 이후 발매된 대부분의 기종에서 지원된다. NVIDIA Tegra K1 이후에도 지원하며, 테그라 X1을 사용하는 닌텐도 스위치에서도 지원한다.
- NTC(Neural Texture Compression): NVIDIA 개발, DLSS처럼 딥러닝 인공지능으로 효율을 높여 결과적으로 더 높은 해상도와 화질을 쓸 수 있다고 한다.#[3]
[1] 다른 이미지 압축 포맷과 비교하여 텍스처 압축 포맷의 최대 특성이다. 따라서 압축 알고리즘도 다른 이미지 압축 포맷과 다르게 랜덤 액세스를 할 수 있는 알고리즘으로 제한된다.[2] S3TC의 DirectX 라이센싱 버전을 DXTC(DirectX Texture Compression), DX10부터 개선/확장된 규격은 BCn(Block Compression)라고 부른다. DirectX가 대세가 되면서는 사실상 이쪽 명칭이 원래 명칭보다 많이 불려지는 상황.[3] BCn과의 비교만 있지만, ASTC나 ETC2가 저 정도 극적인 향상을 보인 사례가 없기 때문에 ASTC나 ETC2와 비교해도 결과가 크게 달라질 가능성은 낮다.