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

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
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건강 민우
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?흥배 최
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017devCAT Studio, NEXON
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리YEONG-CHEON YOU
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011devCAT Studio, NEXON
 

What's hot (20)

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 .
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
 

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
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기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
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
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
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)SeongWan Kim
 

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월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
 
대규모 데이터 처리 입문
대규모 데이터 처리 입문대규모 데이터 처리 입문
대규모 데이터 처리 입문
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, 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압축률