SlideShare a Scribd company logo
1 of 38
Download to read offline
텍스쳐 압축 기법 소개

최지호
바나나피쉬
2012-4-24
텍스쳐
• 게임에서 아주 중요한 요소
• 게임의 비쥬얼을 좌우
• 성능과 밀접한 영향
    • 사이즈가 가장 크고
    • 로딩 시갂을 가장 많이 차지
텍스쳐 #2
• 점점 커지고 있다
 – 2048x2048x4 = 16MB in RGBA8888
 – 개수도 증가
   • Normal-map/specular-map/AO-map/light-
     map/env-map…

• 압축은 필수!!!
일반적인 방식
•   TGA
•   DDS
•   DDS + ZIP
•   JPEG
TGA
• 알파채널 지원과 비손실 RLE 인코딩
(=큰 용량)으로 PNG와 함께 아트   소스로
주로 활용
DDS
• 4x4 블록 기반 (손실) 압축 방식
 – DXT1 => 6:1 고정 압축률 (w/o 알파)
• 그래픽카드에서도 압축 유지
 – 쓸 수 밖에 없는 이유
• 디코딩: 매우 빠름
• 인코딩: 빠르짂 않음
DDS #2
• 4x4픽셀 블록 단위
• Start Color/End Color를 선정
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바이트 압축률
DDS 지원 라이브러리
• Squish
  – SSE 최적화
• nvtt
   – Nvidia, squish기반, CUDA 지원
• Compressonator
  – ATI, 퀄리티 좋음
• J.M.P.’s
   – Id소프트, MMX/SSE 최적화, 매우 빠름
DDS + ZIP
• DDS만 사용하는 것보다 압축률    높음
• ZIP 압축해제는 비용이   저렴함
 – LZMA등이 더 효율적이나 ZIP이 훨씬 빠름
• GPU메모리에도 효율적
JPEG
• 10:1 ~   20:1 압축률
JPEG #2
• 압축해제 느림
• 퀄리티 컨트롤: 1~100
• libjpeg-turbo 라이브러리
  – MMX/SSE/NEON 최적화(iOS지원)
  – libjpeg보다 2-4x 빠름
JPEG 압축 과정
•   1. RGB를 YCbCr로 변환
•   2. 8x8블럭 DCT 변환
•   3. Quantize
•   4. Huffman Coding
RGB를 YCbCr로 변환
• 사람의 눈은
      /    보다   /   에 민감

 – 색상의 변화보다 밝기의 변화에 더 민감
RGB를 YCbCr로 변환 #2
• Y채널: 휘도, 밝기
 – 원본 크기 사용
• Cb/Cr: Y채널에 대한
  Red/Blue의 차이
 – 원본의 1/4크기로 다운샘플
                     Y=0.5 일때, Cb/Cr
RGB를 YCbCr로 변환 #3
8x8 DCT
     (Discrete Cosine Transform)
• 이미지를 8x8픽셀 블
  록으로 분할
• 8x8블럭을 64개 패턴
  의 선형 조합으로 분해
• 각 패턴들에 대한 계수를
  계산; 64개(=8x8)
Quantize(양자화)
• 정밀도 낮추기
• 1~100까지의 퀄리티 레벨
• C = round(D/Q)
 – D : DCT 수행 이후의 계수 값
 – Q : 레벨에 따른 Quantize 값
 – C : Quantize 결과
Huffman Coding
• 자주 쓰이는 값에 적은 비트 수 할당
• 4개의 Huffman Table이 사용
 – Code: 1~16비트 (가변길이)
 – Value: 8비트
• 일반적으로 JPEG 표준 테이블 사용
 – 최적화 가능
(비교적) 새로운 솔루션
•   (JPEG 2000)
•   JPEG XR
•   WebP
•   WebP + DDS
•   Crunch
(JPEG 2000)
• Discrete Wavelet Transform
• JPEG보다 좋은   화질(=적은 용량)
•   JPEG보다 많이 느린 속도
• JPEG보다 많은 메모리 필요
• 결과적으로 비추
JPEG XR
• Microsoft (2007)
• Windows Media Photo, HD Photo
• ISO 표준 포맷 (2009)
• JPEG보다 훨씬 나은 성능과 퀄리티
• JPEG 2000보다는 약갂 떨어지는 퀄리티
• 하지만 JPEG 2000 보다 훨씬     빠름(정수 연산)
JPEG군 비교
• (용량 대비)퀄리티

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

 – JPEG 2000 < JPEG-XR <   JPEG
JPEG XR 기능
• 알파 채널 지원
• 그레이스케일 지원
• 16-bit/32-bit 실수형 지원
• 비손실 압축 지원
JPEG XR 지원 라이브러리
• Intel IPP 라이브러리
  – 상용, 최적화?
• HD Photo Device Porting Kit
  – 최적화 안됨
• Windows Imaging Component
  – Windows XP SP3, Vista, 7 에 포함
WebP
• Google (2010) Web을 위한 이미지 포맷
• 표준 아님 – 크롬 브라우저 지원
• JPEG보다 나은 퀄리티
  – “WebP 는 JPEG보다 30%이상 더 작다”
• JPEG 2000보다 조금 퀄리티가 떨어지나 빠름
• 라이브러리: libwebp, MMX/SSE 최적화, 오픈소스
WebP 퀄리티
     JPG(43.84KB)           WebP(29.61KB)




http://code.google.com/speed/webp/gallery.html
WebP + DDS
• WebP 로 디코딩
 – 작은 파일(스토리지) 사이즈
• DXT 로 인코딩
 – GPU 메모리 공갂 절약
 – DXT도 인코딩이 빠르지는 않다
 – J.M.P. 등의 빠른 실시갂 DXT 인코더 사용
• 단점: 손실 압축을 두번  퀄리티 저하
Crunch
• (원본 이미지가 아닌) DDS 자체를 직접 (손실)
  압축
 – JPG나 WebP사용 시 들어가는
 – 추가적인 DDS 인코딩 작업이 필요 없음
• 빠르고 용량도 DDS+ZIP에 비해 충분히 작다
• 단점: 인코딩이 꽤 느림
용량 비교
140   128

120

100           94                          (낮은 값일 수록 용량 적음)
                         76
80

60                                50

40                                         30

20

 0
      DDS   DDS+ZIP      JPG     Crunch   WebP

                      Size(KB)
로딩(+다운로드) 속도 비교
           18
           16
           14
           12
           10
           8
           6
           4
           2
           0
                DDS+ZIP   JPG    Crunch   WebP   (낮은 값일 수록 빠름)
로컬속도(ms)           2       4       3       10
네트워크속도(sec)      16.2     11.4    6.3      5
정리
• 용량이 최우선이라면, WebP+DDS
 – 예) 실시갂 스트리밍 다운로드
• 용량과 로딩 속도 둘 다 중요하다면, Crunch
• 용량보다는 로딩 속도가 중요하다면,
 DDS+ZIP
Q/A
• 감사합니다!
• jiho.choi@wemade.com
레퍼런스
• How does JPEG actually work?
  – JPEG알고리즘 개요
• JPEG Huffman Coding Tutorial
  – JPEG 알고리즘의 쉽고 디테일한 설명
• Image Compression and the Discrete
  Cosine Transform : DCT 설명
레퍼런스 #2
• Real-Time DXT Compression
  – J.M.P의 빠른 실시갂 DXT 압축 기법
• Crunch
  – DXT 자체를 손실 압축하는 라이브러리
속도 비교 – 로컬 로딩
• 테스트 환경
 – 로컬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
• 디코딩 속도 의존적
속도 비교 – 네트워크 로딩
• 테스트 환경
  – 네트워크 다운로드
 – 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
• 파일 크기 의존적
용량 비교
     타입     사이즈        비고
    RAW     768KB   =512x512x3
     DDS    128KB   6:1압축률
DDS + ZIP   94KB    8:1압축률
     JPG     76KB   10:1압축률
  Crunch    50KB    15:1압축률
   WebP     30KB    25:1압축률

More Related Content

What's hot

김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
devCAT Studio, NEXON
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
MinGeun Park
 

What's hot (20)

Motion blur
Motion blurMotion blur
Motion blur
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 

Viewers also liked

6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
JP Jung
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
재철 황
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 

Viewers also liked (13)

디지털통신 8
디지털통신 8디지털통신 8
디지털통신 8
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱
 
Gametech2015
Gametech2015Gametech2015
Gametech2015
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정
 
OpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver OverheadOpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
 

Similar to Ndc2012 최지호 텍스쳐 압축 기법 소개

게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
Amazon Web Services Korea
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법
noerror
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
Hyun-jik Bae
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 

Similar to Ndc2012 최지호 텍스쳐 압축 기법 소개 (20)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
반응형이미지
반응형이미지반응형이미지
반응형이미지
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문
 
iris solution_overview_for_bigdata
iris solution_overview_for_bigdatairis solution_overview_for_bigdata
iris solution_overview_for_bigdata
 
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdfSK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
 
대규모 데이터 처리 입문
대규모 데이터 처리 입문대규모 데이터 처리 입문
대규모 데이터 처리 입문
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 

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

  • 1. 텍스쳐 압축 기법 소개 최지호 바나나피쉬 2012-4-24
  • 2. 텍스쳐 • 게임에서 아주 중요한 요소 • 게임의 비쥬얼을 좌우 • 성능과 밀접한 영향 • 사이즈가 가장 크고 • 로딩 시갂을 가장 많이 차지
  • 3. 텍스쳐 #2 • 점점 커지고 있다 – 2048x2048x4 = 16MB in RGBA8888 – 개수도 증가 • Normal-map/specular-map/AO-map/light- map/env-map… • 압축은 필수!!!
  • 4. 일반적인 방식 • TGA • DDS • DDS + ZIP • JPEG
  • 5. TGA • 알파채널 지원과 비손실 RLE 인코딩 (=큰 용량)으로 PNG와 함께 아트 소스로 주로 활용
  • 6. DDS • 4x4 블록 기반 (손실) 압축 방식 – DXT1 => 6:1 고정 압축률 (w/o 알파) • 그래픽카드에서도 압축 유지 – 쓸 수 밖에 없는 이유 • 디코딩: 매우 빠름 • 인코딩: 빠르짂 않음
  • 7. DDS #2 • 4x4픽셀 블록 단위 • Start Color/End Color를 선정
  • 8. 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바이트 압축률
  • 9. DDS 지원 라이브러리 • Squish – SSE 최적화 • nvtt – Nvidia, squish기반, CUDA 지원 • Compressonator – ATI, 퀄리티 좋음 • J.M.P.’s – Id소프트, MMX/SSE 최적화, 매우 빠름
  • 10. DDS + ZIP • DDS만 사용하는 것보다 압축률 높음 • ZIP 압축해제는 비용이 저렴함 – LZMA등이 더 효율적이나 ZIP이 훨씬 빠름 • GPU메모리에도 효율적
  • 11. JPEG • 10:1 ~ 20:1 압축률
  • 12. JPEG #2 • 압축해제 느림 • 퀄리티 컨트롤: 1~100 • libjpeg-turbo 라이브러리 – MMX/SSE/NEON 최적화(iOS지원) – libjpeg보다 2-4x 빠름
  • 13. JPEG 압축 과정 • 1. RGB를 YCbCr로 변환 • 2. 8x8블럭 DCT 변환 • 3. Quantize • 4. Huffman Coding
  • 14. RGB를 YCbCr로 변환 • 사람의 눈은 / 보다 / 에 민감 – 색상의 변화보다 밝기의 변화에 더 민감
  • 15. RGB를 YCbCr로 변환 #2 • Y채널: 휘도, 밝기 – 원본 크기 사용 • Cb/Cr: Y채널에 대한 Red/Blue의 차이 – 원본의 1/4크기로 다운샘플 Y=0.5 일때, Cb/Cr
  • 17. 8x8 DCT (Discrete Cosine Transform) • 이미지를 8x8픽셀 블 록으로 분할 • 8x8블럭을 64개 패턴 의 선형 조합으로 분해 • 각 패턴들에 대한 계수를 계산; 64개(=8x8)
  • 18. Quantize(양자화) • 정밀도 낮추기 • 1~100까지의 퀄리티 레벨 • C = round(D/Q) – D : DCT 수행 이후의 계수 값 – Q : 레벨에 따른 Quantize 값 – C : Quantize 결과
  • 19. Huffman Coding • 자주 쓰이는 값에 적은 비트 수 할당 • 4개의 Huffman Table이 사용 – Code: 1~16비트 (가변길이) – Value: 8비트 • 일반적으로 JPEG 표준 테이블 사용 – 최적화 가능
  • 20. (비교적) 새로운 솔루션 • (JPEG 2000) • JPEG XR • WebP • WebP + DDS • Crunch
  • 21. (JPEG 2000) • Discrete Wavelet Transform • JPEG보다 좋은 화질(=적은 용량) • JPEG보다 많이 느린 속도 • JPEG보다 많은 메모리 필요 • 결과적으로 비추
  • 22. JPEG XR • Microsoft (2007) • Windows Media Photo, HD Photo • ISO 표준 포맷 (2009) • JPEG보다 훨씬 나은 성능과 퀄리티 • JPEG 2000보다는 약갂 떨어지는 퀄리티 • 하지만 JPEG 2000 보다 훨씬 빠름(정수 연산)
  • 23. JPEG군 비교 • (용량 대비)퀄리티 – JPEG < JPEG-XR < JPEG 2000 • (인코딩/디코딩)속도 – JPEG 2000 < JPEG-XR < JPEG
  • 24. JPEG XR 기능 • 알파 채널 지원 • 그레이스케일 지원 • 16-bit/32-bit 실수형 지원 • 비손실 압축 지원
  • 25. JPEG XR 지원 라이브러리 • Intel IPP 라이브러리 – 상용, 최적화? • HD Photo Device Porting Kit – 최적화 안됨 • Windows Imaging Component – Windows XP SP3, Vista, 7 에 포함
  • 26. WebP • Google (2010) Web을 위한 이미지 포맷 • 표준 아님 – 크롬 브라우저 지원 • JPEG보다 나은 퀄리티 – “WebP 는 JPEG보다 30%이상 더 작다” • JPEG 2000보다 조금 퀄리티가 떨어지나 빠름 • 라이브러리: libwebp, MMX/SSE 최적화, 오픈소스
  • 27. WebP 퀄리티 JPG(43.84KB) WebP(29.61KB) http://code.google.com/speed/webp/gallery.html
  • 28. WebP + DDS • WebP 로 디코딩 – 작은 파일(스토리지) 사이즈 • DXT 로 인코딩 – GPU 메모리 공갂 절약 – DXT도 인코딩이 빠르지는 않다 – J.M.P. 등의 빠른 실시갂 DXT 인코더 사용 • 단점: 손실 압축을 두번  퀄리티 저하
  • 29. Crunch • (원본 이미지가 아닌) DDS 자체를 직접 (손실) 압축 – JPG나 WebP사용 시 들어가는 – 추가적인 DDS 인코딩 작업이 필요 없음 • 빠르고 용량도 DDS+ZIP에 비해 충분히 작다 • 단점: 인코딩이 꽤 느림
  • 30. 용량 비교 140 128 120 100 94 (낮은 값일 수록 용량 적음) 76 80 60 50 40 30 20 0 DDS DDS+ZIP JPG Crunch WebP Size(KB)
  • 31. 로딩(+다운로드) 속도 비교 18 16 14 12 10 8 6 4 2 0 DDS+ZIP JPG Crunch WebP (낮은 값일 수록 빠름) 로컬속도(ms) 2 4 3 10 네트워크속도(sec) 16.2 11.4 6.3 5
  • 32. 정리 • 용량이 최우선이라면, WebP+DDS – 예) 실시갂 스트리밍 다운로드 • 용량과 로딩 속도 둘 다 중요하다면, Crunch • 용량보다는 로딩 속도가 중요하다면, DDS+ZIP
  • 34. 레퍼런스 • How does JPEG actually work? – JPEG알고리즘 개요 • JPEG Huffman Coding Tutorial – JPEG 알고리즘의 쉽고 디테일한 설명 • Image Compression and the Discrete Cosine Transform : DCT 설명
  • 35. 레퍼런스 #2 • Real-Time DXT Compression – J.M.P의 빠른 실시갂 DXT 압축 기법 • Crunch – DXT 자체를 손실 압축하는 라이브러리
  • 36. 속도 비교 – 로컬 로딩 • 테스트 환경 – 로컬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 • 디코딩 속도 의존적
  • 37. 속도 비교 – 네트워크 로딩 • 테스트 환경 – 네트워크 다운로드 – 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 • 파일 크기 의존적
  • 38. 용량 비교 타입 사이즈 비고 RAW 768KB =512x512x3 DDS 128KB 6:1압축률 DDS + ZIP 94KB 8:1압축률 JPG 76KB 10:1압축률 Crunch 50KB 15:1압축률 WebP 30KB 25:1압축률