Image Compressing

이미지 압축

  • PNG/JPG 등으로 압축했더라도 GPU 메모리에 저장할 때는 압축이 풀린 상태로 저장
    • GPU가 이 파일을 그대로 읽어들일 수 없기 때문
    • 대역폭 사용량에 초점을 맞춘 파일 형식
    • GPU가 텍스쳐로 쓰기 위한 압축 형식이 아님
      • 가변 비율 인코딩을 수행하기 때문
  • 플랫폼별 특정 포맷으로 변환
  • 메모리 로드 시 압축 풀린 상태가 아닌 압축된 상태로 적재되어야 함
  • 고정비율 인코딩
    • 일정 비율로 압축하기 때문에 특정 위치의 픽셀을 읽을 때 선형적으로 추적할 필요 없음
    • Texture는 블럭단위로 인코딩

손실 압축

  • PVRTC1
    • IOS 전용
    • 원본 이미지를 2개의 저해상도 이미지와 원본 보정 데이터로 나눔
      • 비트 모드에 따라 4x4 또는 8x4의 블럭으로 이미지를 나눔
      • 블럭마다 대표 색깔을 지정하고 64 비트 데이터 사용 (압축)
      • 64 = 16(Color A)+15(Color B)+1(Mode)+32(Modulation)
      • 15/16 = 1(padding)+R(5)+G(5)+B(4/5)
      • 15/16 = 1(padding)+R(5)+G(5)+B(4/5)+A(3)
      • Modulation 32 = 16x2
        • 한 비트에 대해 보간 방법을 최대 4가지 저장 2^2
    • 색 경계가 무너지므로 알맞은 상황에 사용
  • ETC
    • 안드로이드에서 주로 사용
    • 2에서 알파채널 지원 및 추가 데이터 포함
    • 기본 색상 정보와 휘도 정보 저장

ASTC

  • 가변 블록 크기 설정 가능
  • 디테일한 Texture를 다루면 4x4(128bit/16 = 8)
  • 파티클과 같이 뭉개져도 무방한 Texture는 12s12 (128bit/144 = 0.866)
  • ETC보다 디코딩이 오래 걸리는 복잡한 알고리즘을 사용하지만 화질 보존율은 더 높음
  • 안드로이드/아이폰 모두 지원 가능

Categories: ,

Updated: