텍스처 압축

텍스처 압축(Texture Compression)은 컴퓨터 그래픽스에서 텍스처 데이터의 크기를 줄이는 기술이다. 이는 주로 3D 그래픽스 애플리케이션, 특히 비디오 게임에서 메모리 사용량을 최적화하고, 데이터 전송 대역폭을 줄이며, 렌더링 성능을 향상시키기 위해 사용된다.

필요성

현대 그래픽스는 고해상도 및 고품질 텍스처를 요구하며, 이로 인해 방대한 양의 데이터가 발생한다. 이러한 대량의 텍스처 데이터는 다음과 같은 문제점을 야기할 수 있다.

  • 메모리 사용량 증가: GPU의 비디오 메모리(VRAM)는 제한적이며, 압축되지 않은 고해상도 텍스처는 쉽게 VRAM을 소모하여 다른 리소스 할당을 어렵게 만들거나 시스템 메모리로 스와핑을 유발하여 성능 저하로 이어진다.
  • 데이터 전송 대역폭: CPU에서 GPU로, 또는 스토리지에서 시스템 메모리로 텍스처 데이터를 전송하는 데 필요한 대역폭이 커진다. 이는 로딩 시간 증가 및 렌더링 파이프라인의 병목 현상을 유발할 수 있다.
  • 렌더링 성능 저하: GPU가 더 많은 데이터를 처리하고 캐싱해야 하므로, 메모리 접근 지연 시간이 증가하고 캐시 효율이 떨어진다.

텍스처 압축은 이러한 문제점들을 해결하여, 제한된 하드웨어 자원 내에서 더 많은 텍스처를 사용하고 전반적인 그래픽스 성능을 개선하는 데 필수적인 역할을 한다.

작동 원리

텍스처 압축은 대부분 손실 압축(Lossy Compression) 방식을 사용한다. 이는 약간의 시각적 품질 손실을 감수하고서라도 데이터 크기를 크게 줄이는 데 초점을 맞춘다. 일반적인 압축 방식은 텍스처를 작은 블록(예: 4x4 픽셀 블록)으로 나누어 각 블록을 독립적으로 압축하는 방식이며, 이는 GPU가 압축된 데이터를 직접 효율적으로 읽고 해제할 수 있도록 설계된다. 즉, 텍스처 압축은 압축된 상태로 GPU 메모리에 저장되며, 렌더링 시점에 하드웨어에 의해 실시간으로 압축이 해제되어 사용된다.

주요 압축 방식들은 다음과 같은 특성을 가진다.

  • 블록 기반 압축: 텍스처를 작은 사각형 블록으로 분할하여 각 블록 내에서 색상 정보를 효율적으로 표현한다.
  • 색상 팔레트 또는 보간: 각 블록 내의 색상 범위를 대표하는 소수의 색상(엔드포인트)을 저장하고, 이들 사이의 보간을 통해 다른 픽셀의 색상을 유추하여 데이터를 줄인다.
  • 알파 채널 처리: 색상 채널과 별도로 알파(투명도) 채널을 압축하거나, 압축 형식에 따라 알파 채널 지원 여부가 달라진다.

주요 텍스처 압축 형식

다양한 하드웨어 플랫폼 및 그래픽스 API에 따라 여러 텍스처 압축 형식이 존재한다.

  • S3TC (S3 Texture Compression) / DXT (DirectX Texture) / BCn (Block Compression n):

    • 마이크로소프트의 DirectX 및 OpenGL에서 널리 사용되는 표준 압축 형식이다.
    • BCn은 DXT의 일반화된 명칭으로, BC1(DXT1), BC2(DXT3), BC3(DXT5) 등이 있으며, 알파 채널 지원 여부 및 압축 효율에 따라 나뉜다. BC6H, BC7 등은 HDR(High Dynamic Range) 데이터나 더 높은 품질의 압축을 지원한다.
    • 주로 PC 그래픽카드에서 하드웨어 가속이 지원된다.
  • ETC (Ericsson Texture Compression):

    • 주로 모바일 기기 및 임베디드 시스템에서 사용되는 OpenGL ES 표준 압축 형식이다.
    • ETC1은 알파 채널을 지원하지 않지만, ETC2는 알파 채널 지원 및 더 나은 품질을 제공한다.
  • PVRTC (PowerVR Texture Compression):

    • Imagination Technologies의 PowerVR GPU 아키텍처에서 주로 사용되는 압축 형식으로, 애플의 iOS 기기(아이폰, 아이패드)에서 많이 활용된다.
    • 고정된 비트레이트와 높은 압축률을 제공한다.
  • ASTC (Adaptive Scalable Texture Compression):

    • ARM과 AMD가 개발한 최신 표준으로, OpenGL ES, Vulkan, DirectX 등 여러 API에서 지원된다.
    • 가변 블록 크기와 비트레이트를 통해 높은 유연성과 뛰어난 품질 대 압축률을 제공하며, 현재 가장 진보된 텍스처 압축 형식 중 하나로 평가받는다. RGB 및 RGBA는 물론, HDR 및 3D 텍스처까지 광범위하게 지원한다.

장점

  • 메모리 사용량 절감: 텍스처 데이터를 획기적으로 줄여 GPU 메모리를 절약하고, 더 많은 텍스처를 로드할 수 있게 한다.
  • 대역폭 감소: 메모리에서 텍스처를 읽어오는 데 필요한 데이터 양이 줄어들어 전송 대역폭 요구량이 낮아진다.
  • 성능 향상: 메모리 접근 효율이 높아지고 캐시 미스(cache miss)가 줄어들어 전반적인 렌더링 성능이 향상된다.
  • 로딩 시간 단축: 게임이나 애플리케이션 시작 시 필요한 텍스처 데이터 로딩 시간이 줄어든다.

단점 및 고려사항

  • 품질 저하 (압축 아티팩트): 손실 압축의 특성상 원본 텍스처 대비 약간의 시각적 품질 손실이 발생하며, 특히 미묘한 그라데이션이나 날카로운 가장자리에서 압축 아티팩트(artifact)가 나타날 수 있다.
  • 압축 시간: 텍스처를 압축하는 데에는 시간이 소요되며, 이는 주로 콘텐츠 제작 파이프라인(빌드 시간)에 영향을 미친다. GPU는 압축 해제를 실시간으로 처리하므로 런타임 성능에는 큰 영향을 주지 않는다.
  • 형식 호환성: 플랫폼 및 하드웨어에 따라 지원하는 압축 형식이 다르므로, 여러 플랫폼을 지원하는 경우 각각에 맞는 텍스처를 준비해야 할 수 있다.

활용 분야

텍스처 압축은 주로 다음과 같은 분야에서 필수적으로 사용된다.

  • 비디오 게임: PC, 콘솔, 모바일 등 모든 플랫폼에서 게임 자산의 크기를 줄이고 성능을 최적화하는 데 핵심적인 기술이다.
  • 실시간 3D 렌더링 애플리케이션: CAD, 시뮬레이션, VR/AR 등 대량의 텍스처를 사용하는 모든 실시간 3D 그래픽스 환경에서 활용된다.
  • 모바일 그래픽스: 제한된 메모리와 전력 자원을 가진 모바일 기기에서 고품질 그래픽스를 구현하는 데 특히 중요하다.
둘러보기

더 찾아볼 만한 주제