TEXTURE COMPRESSION SHADER STUDY × IN SEONG MIN
TEXTURECOMPRESSION
SHADER STUDY × IN SEONG MIN
Why?WE SHOULD USE H/W TC
1SPEED
2MEMORY
WHAT?SHOULD BE CONSIDERED WHEN EVALUATING A TC
1RANDOM ACCESS
2HIGH DECOMPRESSION SPEED
3HIGH COMPRESSION RATIO
4ACCEPTABLE VISUAL QUALITY
s3tcS3 TEXTURE COMPRESSION
S3사에서 만들어 1999년 공개한 포맷
MS가 DX6에서 DXT1이란 이름으로 채용이후 알파채널을 지원하는 DXT2~DXT5가 등장
DX10에선 BC1~BC3로 이름이 변경됨DXT1 = BC1, DXT2&3 = BC2, DXT4&5 = BC3
BC1DXT1
알파 채널 지원 안 함punchthrough 알파는 가능
512bit
64bit
result
Endpoints
16+16bit
Indices
Table
4x4x2bit
4bpp = 1/616 x 2 + 2 x 16 = 64bit
BC2DXT2 & DXT3
BC1 + 알파값을 픽셀별 4bit로 저장
8bpp = 1/464 + 16 x 4 = 128bit
BC3DXT4 & DXT5
BC1 + 알파값도 BC1 같이 저장알파값 2개를 8bit로 저장하고 8개로 보간, 각 픽셀별 3bit는 인덱스로 사용
4bit 정밀도로는 부족할 경우 사용
8bpp = 1/464 + 8 x 2 + 3 x 16 = 128bit
BC4ATI1/3Dc+
BC3에서 추가된 부분만 따로
4bpp = 1/28 x 2 + 3 x 16 = 64bit
BC5ATI2/3Dc
ATI에서 개발한 노말맵용 포맷RGB565로는 노말을 표현하기에는 너무 부족함
BC4를 두 채널로 저장그러므로 크기는 그냥 BC4의 2배
8bpp = 1/264 x 2 = 128bit
BC6H
HDR을 위한 포맷이름의 끝에 H가 붙은 이유이기도 함
8bpp = 1/6
BC7
RGB8 & RGBA8을 지원다시 말하지만 BC1~3는 RGB565이고 BC4~5는 3채널이 아님
8bpp = 1/3 or 1/4
etcERICSSION TEXTURE COMPRESSION
에릭슨사가 만든 모바일용 포맷이후 안드로이드 기기의 표준 포맷이 됨
모태는 2004년에 발표된 PACKMAN이란 논문이후 개선된 버전인 iPACKMAN이 ETC1이 됨
PACKMAN
Base color Per-pixel
Luminance
Final image
+ =
Base color (12bit)
+
Luminance index (4bit)
Indices Table (16bit)
--
ETC1iPACKMAN
PACKMAN x 2PACKMAN의 블록을 서브블록으로 하여 2개를 붙임
Luminance index를 4bit에서 3bit로 줄임대신에 2비트 여유가 생김!
색상값을 5+3으로도 저장할 수 있음diff 플래그 설정에 따라 Individual/Differential 모드
서브블록을 가로로 길게 할 수도 있음flip 플래그 설정에 따라 달라짐
4bpp = 1/6(12 + 3 + 1 + 2 x 8) x 2 = 64bit
ETC2
ETC1은 서브블록당 색을 하나만 사용색차가 심한 블록의 경우 에러율이 급증
ETC2는 서브블록당 색을 최대 2개까지 사용고로 블록당 최대 4개의 색을 사용할 수 있음
ETC1은 그라데이션이 이쁘지 않음Luminance table의 pre-define된 데이터 탓
ETC2는 알파 채널을 지원punchthrough / full alpha 2가지 모드를 지원
모드가 기존의 2개에 새롭게 3개가 추가됨D모드 & I모드 + T모드 & H모드 & Planar모드
RAW ETC1ETC2
T MODE
4bpp = 1/6알파 없이
EAC
단일 채널용 포맷정밀도는 8bit
Base Mul N Indices
8 4 4 48
Base + (Mul x Luminance)N(4bit)은 luminance table(총 16개)의 인덱스로 사용됨
4bpp = 1/2EAC 단독일 경우
8bpp = 1/4ETC2 + EAC로 RGBA를 구성하는 경우
pvrtcPOWERVR TEXTURE COMPRESSION
이미지네이션 테크놀리지사가 개발한 포맷비공개인 관계로 정확한 테크 스펙을 알 수 없음
엄밀히 말하면 블록 단위가 아님근데 얼핏 보면 그냥 블록 단위로 보임
블록 단위 포맷보다 그라데이션이 부드러움이유는 뒤에서 설명
Image A
Modulation M
Final imageUpscale 4x4
Upscale 4x4
Image BLinear Blend
PVRTC4bpp
POT 텍스처만 지원심지어는 가로/세로 크기가 같아야 함
R
RGB color
Color A Modulation data (indices)Color B
Mode
ARGB color
G B
R R G B
PVRTC2bpp
R
RGB color
Color A Modulation data (indices)Color B
Mode
ARGB color
G B
R R G B
Mode 0
Mode 1
PVRTC24bpp
PVRTC1과는 달리 NPOT 텍스처 지원짝짝짝
PVRTC1과는 달리 RGB+RGBA를 지원하지 않음이유는 뒤에서 설명
R
RGB color (Opacity= 1)
Color A Modulation data (indices)Color B
Mode
ARGB color (Opacity= 0)
G B
R R G B
HardOpacity
CONCLUSION3줄 요약
포맷 뒤에 숫자가 높은 것이 갑이다물론 하드웨어가 지원해줘야 하지만
뭘 써야 할지 모른다면 ETCOpenGL 표준임
지원 안 된다고 못 쓰는 것은 아님다만 혜택이 없어질 뿐
REFERENCEhttp://sv-journal.org/2014-1/06/en/index.html
Q&AANY QUESTIONS?