모바일 게임 텍스처 포맷(ASTC vs ETC2) 비교 및 플랫폼별 최적 압축 설정법

모바일 게임 텍스처 포맷(ASTC vs ETC2) 비교 및 플랫폼별 최적 압축 설정법

모바일 3D 게임 개발에서 텍스처(Texture)는 전체 빌드 용량(APK/IPA)과 런타임 비디오 메모리(VRAM)의 60~80% 이상을 차지하는 가장 무거운 에셋입니다. 특히 스마트폰은 고해상도 디스플레이(FHD+, QHD)를 지원하면서도 PC/콘솔 대비 대역폭(Memory Bandwidth)과 쿨링 성능이 제한되어 있어, 텍스처 메모리를 제대로 압축하지 않으면 메모리 초과 크래시(OOM - Out of Memory), 기기 발열로 인한 스로틀링(Thermal Throttling), 배터리 소모 급증 현상이 발생합니다. 본 포스팅에서는 현재 모바일 업계의 표준으로 자리 잡은 ASTCETC2 포맷의 구조적 차이를 심층 비교하고, 유니티(Unity) 및 언리얼(Unreal) 엔진 환경에서 텍스처 유형별 최적의 압축 세팅 가이드를 공유합니다.

모바일 3D 게임 그래픽 렌더링 및 텍스처 압축 하드웨어 파이프라인
▲ 모바일 GPU 아키텍처에 최적화된 블록 단위 텍스처 압축(Block Compression) 파이프라인

1. 모바일 텍스처 압축 포맷의 발전과 하드웨어 디코딩 원리

일반적인 이미지 압축(PNG, JPEG)은 파일 저장 용량만 줄여줄 뿐, 게임 실행 시 GPU 메모리(VRAM)에 올라갈 때는 압축이 풀려 원본 비압축(RGBA32) 상태로 로드됩니다. 예를 들어 2048x2048 크기의 RGBA 32bit 텍스처 한 장은 파일 용량이 작더라도 VRAM에 16MB를 그대로 점유합니다.

반면 모바일 하드웨어 텍스처 압축(GPU Texture Compression)은 GPU 칩셋 내부의 전용 디코더(Texture Sampler)가 압축된 상태의 메모리를 직접 읽어 실시간으로 픽셀을 렌더링합니다. 따라서 VRAM 사용량과 메모리 대역폭을 동시에 70~90% 이상 획기적으로 절감할 수 있습니다.

1.1 주요 모바일 압축 포맷 계보

  • ETC1 (Ericsson Texture Compression 1): OpenGL ES 2.0 표준. 알파 채널(Alpha)을 지원하지 않아 투명 텍스처 사용 불가(레거시).
  • PVRTC (PowerVR Texture Compression): 과거 iOS 전용 포맷. 2의 거듭제곱(Power of Two) 정사각형 텍스처만 지원하며 경계선 번짐(Bleeding) 아티팩트가 심함(레거시).
  • ETC2 (Ericsson Texture Compression 2): OpenGL ES 3.0 필수 표준. 독립적인 알파 채널(EAC) 지원 및 준수한 품질 제공.
  • ASTC (Adaptive Scalable Texture Compression): ARM과 Khronos가 공동 개발한 차세대 업계 표준. 블록 크기를 세분화하여 압축률과 화질을 유연하게 제어 가능.

2. ASTC vs ETC2 핵심 스펙 및 성능 심층 비교

고해상도 게임 텍스처 퀄리티 및 모바일 퍼포먼스 튜닝
▲ 텍스처 블록 크기별 비트레이트(bpp)와 화질 균형(Quality vs Performance Trade-off)
포맷 및 블록 크기 비트레이트(bpp) 2048x2048 VRAM 주요 적용 대상 및 특징
RGBA 32bit (비압축) 32.00 bpp 16.0 MB (100%) 손실 없는 완벽한 원본 필요 시 (극소수 UI 텍스트)
ETC2 (RGBA 8bit) 8.00 bpp 4.0 MB (25.0%) GLES 3.0 지원 구형 안드로이드 기기 호환용
ASTC 4x4 8.00 bpp 4.0 MB (25.0%) 최고 화질 주인공 캐릭터, 정밀 노멀맵(Normal Map)
ASTC 5x5 5.12 bpp 2.56 MB (16.0%) 일반 캐릭터, 주요 몬스터, 핵심 UI 아이콘
ASTC 6x6 3.56 bpp 1.78 MB (11.1%) 모바일 게임 표준 권장 포맷 (배경, 프랍, 일반 텍스처)
ASTC 8x8 2.00 bpp 1.0 MB (6.25%) 지형(Terrain), 원경 배경, 라이트맵(Lightmap)
ASTC 10x10 / 12x12 1.28 / 0.89 bpp 0.64 / 0.44 MB (< 4%) 단색성 마스크 맵, VFX 파티클 텍스처, 저사양 기기 타깃

3. 에셋 유형별 최적 압축 포맷 가이드라인

3.1 알베도 / 베이스 컬러 (Albedo / Base Color)

  • 주인공 및 주요 NPC: ASTC 5x5 (텍스처 디테일과 VRAM의 최적 균형점).
  • 배경 오브젝트 및 지형: ASTC 6x6 또는 ASTC 8x8 (배경은 화면 차지 비중 대비 디테일 집중도가 낮으므로 높은 압축률 적용).
  • UI 그래픽: 복잡한 일러스트는 ASTC 4x4, 텍스트가 포함된 UI는 블록 깨짐을 방지하기 위해 RGBA 32bit 또는 ASTC 4x4 선별 적용.

3.2 노멀 맵 (Normal Map)

  • 노멀 맵은 각 픽셀의 벡터 방향을 표현하므로, 일반적인 RGB 압축을 적용하면 블록 경계선에서 심각한 라이팅 계단 현상(Banding)이 발생합니다.
  • 엔진 설정에서 Texture Type을 반드시 Normal Map으로 지정하고, 압축 포맷은 최소 ASTC 4x4 또는 ASTC 5x5를 적용해야 매끄러운 셰이딩을 얻을 수 있습니다.

3.3 마스크 팩 텍스처 (ORM: Occlusion, Roughness, Metallic)

  • R(AO), G(Roughness), B(Metallic) 채널을 하나로 합친 팩 텍스처는 채널 간 상관관계가 없어 압축 시 색상 간섭(Cross-talk) 아티팩트가 생기기 쉽습니다.
  • ETC2에서는 거칠기(Roughness) 맵이 심하게 깨지는 현상이 발생하므로, ASTC 4x4 또는 5x5를 적용하여 개별 채널의 정밀도를 보존해야 합니다.

4. 유니티 & 언리얼 엔진 실무 설정 팁

4.1 유니티(Unity) 권장 설정

  • Project Settings: Android 타깃의 기본 텍스처 압축 포맷(Default Texture Compression Format)을 ASTC로 설정합니다. (현재 출시되는 안드로이드 기기의 99% 이상 및 iPhone 6 이후 모든 iOS 기기가 ASTC 하드웨어 가속을 완벽 지원합니다.)
  • Mipmap Generaton: 3D 공간에 배치되는 모든 텍스처는 Generate Mip Maps를 반드시 활성화합니다. (VRAM이 약 33% 증가하지만, 카메라 거리에 따라 작은 텍스처를 샘플링하여 텍스처 캐시 미스를 방지하고 렌더링 성능을 극대화합니다.)
  • Compression Quality: 개발 단계에서는 빌드 속도를 위해 Fast로 작업하고, 릴리즈(Release) 최종 빌드 시에는 Normal 또는 High로 설정하여 블록 노이즈를 최소화합니다.

4.2 언리얼 엔진(Unreal Engine) 권장 설정

  • Android 패키징 시 타깃 텍스처 포맷을 ASTC 단일 프로파일로 빌드하여 APK 용량과 배포 복잡도를 줄입니다.
  • 텍스처 그룹(Texture Group)의 LODBiasMaxTextureSize를 플랫폼별 디바이스 프로파일(Device Profile)과 연동하여 저사양 기기에서는 텍스처 해상도를 동적으로 다운스케일링합니다.

5. 결론 및 모바일 텍스처 최적화 체크리스트

모바일 텍스처 최적화는 단순히 용량을 줄이는 작업이 아니라, 하드웨어 대역폭 병목을 해소하여 안정적인 60FPS 유지와 디바이스 수명 연장을 달성하는 핵심 엔지니어링입니다. 프로젝트를 빌드하기 전 다음 5가지 항목을 점검하시기 바랍니다.

  • ASTC 통일: 안드로이드와 iOS 모두 ASTC를 기본 압축 포맷으로 표준화하였는가?
  • 블록 크기 다변화: 중요도에 따라 캐릭터(5x5), 배경(6x6~8x8), 파티클(10x10)로 블록 크기를 분기하였는가?
  • 비압축 텍스처 전수 조사: 프로젝트 내에 실수로 RGBA 32bit로 남아있는 무거운 텍스처가 없는지 프로파일러로 검수하였는가?
  • 정사각 거듭제곱(POT) 규격: 모든 텍스처 크기가 512x512, 1024x1024, 2048x2048 등 POT(Power of Two) 규격을 준수하여 밉맵과 블록 압축이 온전히 동작하는가?
  • 노멀 맵 플래그 확인: 노멀 텍스처에 Normal Map 전용 압축 알고리즘이 올바르게 지정되었는가?

Post a Comment

다음 이전