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

MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리YEONG-CHEON YOU
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용JP Jung
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 

What's hot (20)

MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 

Viewers also liked

디지털통신 8
디지털통신 8디지털통신 8
디지털통신 8KengTe Liao
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱greenday96
 
6강 light shadow 기초
6강 light shadow 기초6강 light shadow 기초
6강 light shadow 기초JP Jung
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석SangYun Yi
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트재철 황
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014NDOORS
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기Jiho Choi
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정Dae Hyek KIM
 
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 OverheadTristan Lorach
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해SangYun Yi
 

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 최지호 텍스쳐 압축 기법 소개

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
반응형이미지
반응형이미지반응형이미지
반응형이미지영배 현
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
게임을 위한 최적의 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
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기Chang W. Doh
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문Jin Woo Lee
 
iris solution_overview_for_bigdata
iris solution_overview_for_bigdatairis solution_overview_for_bigdata
iris solution_overview_for_bigdatamobigen
 
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.pdfDeukJin Jeon
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법noerror
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개noerror
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기NAVER D2
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가Hyun-jik Bae
 
대규모 데이터 처리 입문
대규모 데이터 처리 입문대규모 데이터 처리 입문
대규모 데이터 처리 입문Choonghyun Yang
 
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 .YEONG-CHEON YOU
 
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...SANG WON PARK
 

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

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
반응형이미지
반응형이미지반응형이미지
반응형이미지
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
[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
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
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 .
 
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...
 

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압축률