ndc2012 최지호 텍스쳐 압축 기법 소개

38
텍스쳐 압축 기법 소개 최지호 바나나피쉬 2012-4-24

Upload: jiho-choi

Post on 28-Jun-2015

4.655 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Ndc2012 최지호 텍스쳐 압축 기법 소개

텍스쳐 압축 기법 소개

최지호 바나나피쉬

2012-4-24

Page 2: Ndc2012 최지호 텍스쳐 압축 기법 소개

텍스쳐

• 게임에서 아주 중요한 요소

• 게임의 비쥬얼을 좌우

• 성능과 밀접한 영향

•사이즈가 가장 크고

•로딩 시갂을 가장 많이 차지

Page 3: Ndc2012 최지호 텍스쳐 압축 기법 소개

텍스쳐 #2

• 점점 커지고 있다

– 2048x2048x4 = 16MB in RGBA8888

–개수도 증가

• Normal-map/specular-map/AO-map/light-map/env-map…

• 압축은 필수!!!

Page 4: Ndc2012 최지호 텍스쳐 압축 기법 소개

일반적인 방식

• TGA

• DDS

• DDS + ZIP

• JPEG

Page 5: Ndc2012 최지호 텍스쳐 압축 기법 소개

TGA

• 알파채널 지원과 비손실 RLE 인코딩(=큰 용량)으로 PNG와 함께 아트 소스로

주로 활용

Page 6: Ndc2012 최지호 텍스쳐 압축 기법 소개

DDS

• 4x4 블록 기반 (손실) 압축 방식

–DXT1 => 6:1 고정 압축률 (w/o 알파)

• 그래픽카드에서도 압축 유지 –쓸 수 밖에 없는 이유

• 디코딩: 매우 빠름

• 인코딩: 빠르짂 않음

Page 7: Ndc2012 최지호 텍스쳐 압축 기법 소개

DDS #2

• 4x4픽셀 블록 단위

• Start Color/End Color를 선정

Page 8: Ndc2012 최지호 텍스쳐 압축 기법 소개

DDS #3 • SC/EC를 각각 R5G6B5로 저장 • 4x4 픽셀 각각에 대해

– 2비트 인덱싱을 저장 • 00: SC • 01: EC • 10: 2/3*SC + 1/3*EC • 11: 1/3*SC + 2/3*EC

• 총 8Bytes(64bits)/블록 • 48바이트 ->8바이트 압축률

Page 9: Ndc2012 최지호 텍스쳐 압축 기법 소개

DDS 지원 라이브러리 • Squish

– SSE 최적화

• nvtt – Nvidia, squish기반, CUDA 지원

• Compressonator – ATI, 퀄리티 좋음

• J.M.P.’s – Id소프트, MMX/SSE 최적화, 매우 빠름

Page 10: Ndc2012 최지호 텍스쳐 압축 기법 소개

DDS + ZIP

• DDS만 사용하는 것보다 압축률 높음

• ZIP 압축해제는 비용이 저렴함 – LZMA등이 더 효율적이나 ZIP이 훨씬 빠름

• GPU메모리에도 효율적

Page 11: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG

• 10:1 ~ 20:1 압축률

Page 12: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG #2

• 압축해제 느림

• 퀄리티 컨트롤: 1~100 • libjpeg-turbo 라이브러리

– MMX/SSE/NEON 최적화(iOS지원)

– libjpeg보다 2-4x 빠름

Page 13: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG 압축 과정

• 1. RGB를 YCbCr로 변환

• 2. 8x8블럭 DCT 변환

• 3. Quantize

• 4. Huffman Coding

Page 14: Ndc2012 최지호 텍스쳐 압축 기법 소개

RGB를 YCbCr로 변환

• 사람의 눈은

/ 보다 / 에 민감

–색상의 변화보다 밝기의 변화에 더 민감

Page 15: Ndc2012 최지호 텍스쳐 압축 기법 소개

RGB를 YCbCr로 변환 #2

• Y채널: 휘도, 밝기

–원본 크기 사용

• Cb/Cr: Y채널에 대한 Red/Blue의 차이

–원본의 1/4크기로 다운샘플

Y=0.5 일때, Cb/Cr

Page 16: Ndc2012 최지호 텍스쳐 압축 기법 소개

RGB를 YCbCr로 변환 #3

Page 17: Ndc2012 최지호 텍스쳐 압축 기법 소개

8x8 DCT (Discrete Cosine Transform)

• 이미지를 8x8픽셀 블록으로 분할

• 8x8블럭을 64개 패턴의 선형 조합으로 분해

• 각 패턴들에 대한 계수를 계산; 64개(=8x8)

Page 18: Ndc2012 최지호 텍스쳐 압축 기법 소개

Quantize(양자화)

• 정밀도 낮추기

• 1~100까지의 퀄리티 레벨

• C = round(D/Q)

– D : DCT 수행 이후의 계수 값

– Q : 레벨에 따른 Quantize 값

– C : Quantize 결과

Page 19: Ndc2012 최지호 텍스쳐 압축 기법 소개

Huffman Coding

• 자주 쓰이는 값에 적은 비트 수 할당

• 4개의 Huffman Table이 사용

– Code: 1~16비트 (가변길이)

– Value: 8비트

• 일반적으로 JPEG 표준 테이블 사용

–최적화 가능

Page 20: Ndc2012 최지호 텍스쳐 압축 기법 소개

(비교적) 새로운 솔루션

• (JPEG 2000)

• JPEG XR

• WebP

• WebP + DDS

• Crunch

Page 21: Ndc2012 최지호 텍스쳐 압축 기법 소개

(JPEG 2000)

• Discrete Wavelet Transform

• JPEG보다 좋은 화질(=적은 용량)

• JPEG보다 많이 느린 속도

• JPEG보다 많은 메모리 필요

• 결과적으로 비추

Page 22: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG XR

• Microsoft (2007)

• Windows Media Photo, HD Photo

• ISO 표준 포맷 (2009)

• JPEG보다 훨씬 나은 성능과 퀄리티 • JPEG 2000보다는 약갂 떨어지는 퀄리티

• 하지만 JPEG 2000 보다 훨씬 빠름(정수 연산)

Page 23: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG군 비교

• (용량 대비)퀄리티

– JPEG < JPEG-XR < JPEG 2000 • (인코딩/디코딩)속도

– JPEG 2000 < JPEG-XR < JPEG

Page 24: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG XR 기능

•알파 채널 지원

• 그레이스케일 지원

• 16-bit/32-bit 실수형 지원

• 비손실 압축 지원

Page 25: Ndc2012 최지호 텍스쳐 압축 기법 소개

JPEG XR 지원 라이브러리

• Intel IPP 라이브러리

–상용, 최적화?

• HD Photo Device Porting Kit –최적화 안됨

• Windows Imaging Component

– Windows XP SP3, Vista, 7 에 포함

Page 26: Ndc2012 최지호 텍스쳐 압축 기법 소개

WebP

• Google (2010) Web을 위한 이미지 포맷

• 표준 아님 – 크롬 브라우저 지원

• JPEG보다 나은 퀄리티

– “WebP 는 JPEG보다 30%이상 더 작다”

• JPEG 2000보다 조금 퀄리티가 떨어지나 빠름 • 라이브러리: libwebp, MMX/SSE 최적화, 오픈소스

Page 27: Ndc2012 최지호 텍스쳐 압축 기법 소개

WebP 퀄리티 JPG(43.84KB) WebP(29.61KB) http://code.google.com/speed/webp/gallery.html

Page 28: Ndc2012 최지호 텍스쳐 압축 기법 소개

WebP + DDS

• WebP 로 디코딩 – 작은 파일(스토리지) 사이즈

• DXT 로 인코딩 – GPU 메모리 공갂 절약 – DXT도 인코딩이 빠르지는 않다 – J.M.P. 등의 빠른 실시갂 DXT 인코더 사용

• 단점: 손실 압축을 두번 퀄리티 저하

Page 29: Ndc2012 최지호 텍스쳐 압축 기법 소개

Crunch

• (원본 이미지가 아닌) DDS 자체를 직접 (손실) 압축

– JPG나 WebP사용 시 들어가는

–추가적인 DDS 인코딩 작업이 필요 없음

• 빠르고 용량도 DDS+ZIP에 비해 충분히 작다

• 단점: 인코딩이 꽤 느림

Page 30: Ndc2012 최지호 텍스쳐 압축 기법 소개

용량 비교

128

94

76

50

30

0

20

40

60

80

100

120

140

DDS DDS+ZIP JPG Crunch WebP

Size(KB)

(낮은 값일 수록 용량 적음)

Page 31: Ndc2012 최지호 텍스쳐 압축 기법 소개

로딩(+다운로드) 속도 비교

DDS+ZIP JPG Crunch WebP

로컬속도(ms) 2 4 3 10

네트워크속도(sec) 16.2 11.4 6.3 5

0

2

4

6

8

10

12

14

16

18

(낮은 값일 수록 빠름)

Page 32: Ndc2012 최지호 텍스쳐 압축 기법 소개

정리

• 용량이 최우선이라면, WebP+DDS –예) 실시갂 스트리밍 다운로드

• 용량과 로딩 속도 둘 다 중요하다면, Crunch • 용량보다는 로딩 속도가 중요하다면,

DDS+ZIP

Page 33: Ndc2012 최지호 텍스쳐 압축 기법 소개

Q/A

• 감사합니다!

[email protected]

Page 34: Ndc2012 최지호 텍스쳐 압축 기법 소개

레퍼런스

• How does JPEG actually work?

– JPEG알고리즘 개요

• JPEG Huffman Coding Tutorial

– JPEG 알고리즘의 쉽고 디테일한 설명

• Image Compression and the Discrete Cosine Transform : DCT 설명

Page 35: Ndc2012 최지호 텍스쳐 압축 기법 소개

레퍼런스 #2

• Real-Time DXT Compression

– J.M.P의 빠른 실시갂 DXT 압축 기법

• Crunch

– DXT 자체를 손실 압축하는 라이브러리

Page 36: Ndc2012 최지호 텍스쳐 압축 기법 소개

속도 비교 – 로컬 로딩 • 테스트 환경

–로컬PC, 512x512 RGB 텍스쳐

– JPG , WebP w/ DXT 인코딩, Crunch

• 테스트 결과 – 1. DDS + ZIP : 2 ms / texture – 2. Crunch : 3 ms / texture – 3. JPG : 4 ms / texture – 4. WebP : 10 ms / texture

• 디코딩 속도 의존적

Page 37: Ndc2012 최지호 텍스쳐 압축 기법 소개

속도 비교 – 네트워크 로딩 • 테스트 환경

– 네트워크 다운로드 – 100개 이상 텍스쳐, 1MB/sec 속도

• 테스트 결과 – 1. WebP : 4 ( 4MB) + 1 = 5 sec – 2. Crunch : 6 ( 6MB) + 0.3 = 6.3 sec – 2. JPG : 11 (11MB) + 0.4 = 11.4 sec – 3. DDS + ZIP : 16 (16MB) + 0.2 = 16.2 sec

• 파일 크기 의존적

Page 38: Ndc2012 최지호 텍스쳐 압축 기법 소개

용량 비교

타입 사이즈 비고

RAW 768KB =512x512x3

DDS 128KB 6:1압축률

DDS + ZIP 94KB 8:1압축률

JPG 76KB 10:1압축률

Crunch 50KB 15:1압축률

WebP 30KB 25:1압축률