이미지 압축
- 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보다 디코딩이 오래 걸리는 복잡한 알고리즘을 사용하지만 화질 보존율은 더 높음
- 안드로이드/아이폰 모두 지원 가능