Typing diary

텍스처 압축 포맷 본문

그래픽스, 게임 수학

텍스처 압축 포맷

Jcon 2025. 7. 23. 02:42

고해상도 텍스처 사용이 증가하면서 따라 VRAM, 디스크 공간, 로딩 시간 등 하드웨어 자원 부담이 커지고 있다. PNG나 JPEG와 같은 일반 이미지 포맷은 저장 용량 측면에 초점을 맞춘 압축 방식을 제공하지만, GPU가 실시간으로 텍스처 데이터를 읽고 쓰는 시점에서는 오히려 비효율적이다. 이 때문에 GPU 전용 압축 포맷이 필수적이며, 텍스처 압축(Texture Compression)은 이러한 요구를 충족시키기 위해 등장했다.

텍스처 압축을 적용하면 VRAM과 런타임 메모리를 절감할 수 있을 뿐 아니라, 버스 트래픽을 최소화해 렌더링 오버헤드를 완화하고, 디스크 I/O 및 디코딩 비용을 줄여 로딩 속도를 향상할 수 있다. 또한 설치 패키지와 패치 파일의 전체 크기도 크게 감소한다.


이미지 압축과의 차이점

출처: https://www.youtube.com/watch?v=BeEjoTa9sSo

일반 이미지 포맷(JPEG·PNG)은 “한 번 압축 후 전체를 해제”하는 절차를 전제로 한다. 반면 텍스처 압축 포맷은 GPU가 압축된 상태 그대로 임의의 texel(texture‑pixel)에 접근할 수 있도록 설계된다. 이를 가능하게 하기 위해서는 셰이더 단계에서 실시간 하드웨어 디코딩을 수행하고, 필요한 블록만 메모리에 펼치는 블록 단위 접근 방식을 채택하여 캐시 효율을 높여야 한다.

 


DXT(DirectX Texture)

이름 그대로 Direct3D API 표준으로 사용하는 포맷이다. 4x4픽셀 블록 단위로 손실압축을 수행하며 압축비율은 4:1~8:1로 고정되어 있다.

블록 기반 손실압축?
픽셀을 하나의 블록으로 묶어 블록 단위의 압축하는것을 의미한다. 블록 단위의 압축은 원하는 텍셀 좌표가 속한 블록만 가져와 복원하면 기 때문에 렌더링 과정의 오버헤드가 줄어들고, 또한 각 블록이 서로 독립적이기 때문에 병렬 처리에 친화적이다. 대부분의 텍스쳐 압축 포맷에서 사용한다.
DXT는 4×4 픽셀을 하나의 블록으로 묶어 64비트로 저장하며, 결과적으로 픽셀당 4비트(4bpp)를 사용한다.

출처: https://www.youtube.com/watch?v=BeEjoTa9sSo

DXT는 블록마다 두 개의 대표 색상을 RGB565 형식으로 저장한 뒤, 각 픽셀을 2‑bit 인덱스로 보간하여 네 가지 색상 중 하나를 선택하여 픽셀을 저장한다.

 

ETC2

ETC2는 Ericsson에서 제안한 포맷으로 OpenGL ES 3.0 이상을 지원하는 안드로이드 기기에서 기본 제공된다. 사람의 눈이 채도 변화에는 둔감하고 밝기 변화에는 민감하다는 특성을 이용하여, 완전한 색상(채도)은 낮은 해상도로 저장하고, 밝기 변화(휘도)는 높은 해상도로 저장한 후, 나중에 이를 조합하여 최종 이미지를 만든다. RGB 모드의 경우 4 bpp, 알파 포함 시 8 bpp로 저장된다.

 

ASTC 

ASTC는 텍스처 압축 포맷 중 현재 가장 권장되는 방식이다. 가장 큰 특징은 블록 사이즈를 직접 지정할 수 있다는 점이다. 기존 DXTC, PVRTC, ETC와 같은 포맷들은 블록 사이즈가 4x4로 고정되어 있었던 반면, ASTC는 이 기준이 128비트이며, 이 비트를 4x4, 12x12 등 다양한 블록 크기에 할당할 수 있다. 특히 노말 맵과 같이 정교한 표현이 필요한 경우, ETC와 비슷한 용량으로 비교했을 때 ASTC 4x4 블록이 훨씬 더 뛰어난 퀄리티를 제공한다.

 


정리

유니티 공식문서을 확인해 보면 유니티에서 지원하는 압축 포맷에 대해 플랫폼, 품질, 성능을 비교해 놓은 자료를 확인할 수 있다(https://docs.unity3d.com/kr/2020.3/Manual/class-TextureImporterOverride.html). 각 포맷마다 특징과 용도가 다르기 때문에 상황에 따라 적절한 포맷을 결정하는것이 중요하다. 특히, 성능과 품질은 항상 반비례 관계라는 것을 잊지 말자. 


 

출처 

https://www.youtube.com/watch?v=BeEjoTa9sSo

https://mgun.tistory.com/m/1385

 

DXT 압축

우선 기본적으로 PC게임에서 DXT(DirectX Texture) 픽셀 포맷을 많이 사용한다.이 DXT 포맷은 Direct3D API 표준이며 이름 또한 DirectX Texture 이다.그렇다면 이 DXT는 어떤 장점이 있고 어떤 특성이 있기에 DX

mgun.tistory.com

https://i-believe-in-me.tistory.com/191

'그래픽스, 게임 수학' 카테고리의 다른 글

Verlet알고리즘으로 PhysicsBone 구현하기!  (1) 2025.07.09
드로우 콜(Draw Call)  (1) 2025.06.04
Raytracing  (0) 2022.08.21
Backface Culling  (0) 2022.08.21
행렬식(determinant)  (0) 2022.08.21