블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (663)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (102)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total338,297
Today6
Yesterday63

'dxt'에 해당되는 글 1건

  1. 2013.03.15 DXT 압축

DXT 압축

Study/Graphics / 2013.03.15 17:08
우선 기본적으로 PC게임에서 DXT(DirectX Texture) 픽셀 포맷을 많이 사용한다.
이 DXT 포맷은 Direct3D API 표준이며 이름 또한 DirectX Texture 이다.
그렇다면 이 DXT는 어떤 장점이 있고 어떤 특성이 있기에 DX에서 표준이 되었을까?


DXT픽셀 포맷을 저장하는데 사용되는 DDS 파일포맷이란 무었인가?
DDS(DirectDraw Surface)
이 파일 포멧은 텍스쳐 매핑과 큐브맵 환경맵을 저장하는데 쓰이는 마이크로스프트사의 포멧이며,
GPU에 쓰이는 DXTn으로 압축된 데이터를 저장하는데 유용하다.
이 파일 포멧은  DirectX 7.0에 도입되었으며 원래 DirectX를 위해 설계되었으며 밉맵,
큐브맵, 볼륨맵을 지원한다.
이 파일 포맷은 압축 및 비압축 픽셀 형식을 저장할 수 있으며 PC게임에서 DXTn 압축 픽셀 포맷을
저장하기위해 주로 사용한다.
추가 설명은 Programming Guide for DDS를 참조하면 된다.


DXT를 쓰는 이유는?
1. 압축률이 높다 : 메모리를 적게쓴다.
2. 성능저하가 거의 없다. : 거의 모든 그래픽 카드가 하드웨어 레벨에서 DXT포맷을 지원한다.
3. 퀄리티가 나름 괜찮다. (그라데이션있는 텍스쳐나 노말 텍스쳐에는 비츄)



DXT 압축 방식은?
DXT(DirectX Texture)는 소프트웨어 기반의 경량 압축기법으로 각 프레임 내에서 독립적인 4x4픽셀 블록 단위로 
손실압축을 수행하며 압축비율은 4:1~8:1로 고정되어 있다.

DXT1의 기본 압축 알고리즘을 살펴보면 아래와 같은 순서로 진행된다.
1. 압축할 원본 이미지에서 4x4 픽셀 블록을 추출한다.   
   - 한 텍셀 read시 해당 텍셀이 포함된 16픽셀이 내부 비디오 캐시로 이동.
   - 실제 렌더링시 Bilinear Filtering등 아주 근접한 텍스처를 읽어들이는 경향이 있음
   - 렌더링 특성상 연속된 텍셀을 읽어들이는 경향이 있다.
   - 다음에 해당 블럭 중에서 읽어들일 확률이 매우 높다. (Cache hit)

2. 픽셀 블록의 16개의 픽셀 중에서 최대값(흰색에 가까운 색)과 최소값(검은색에 가까운 색)을 구한다.
   DXT압축으로 표현되는 색 해상도는 16비트(High Color, R5G6B5)이므로 24비트(R8G8B8) 색 해상도를
   가지는 이미지는 16비트 색 해상도로 변환한다.
   따라서 최대값(Color 0)과 최소값(Color 1)의 색 해상도를 변환(R5G6B5)하고 
   중간값 2개(Color2, Color3)를   계산한다.

이미지 참조 : http://kiise.or.kr/e_journal/2012/8/cpl/pdf/01.pdf

  2개의 색상값(최대R5G6B5, 최소R5G6B5)을 저장하기 위해 필요한 32bit와 이 두 색상값에 대한

  16개의 2BIT 인덱싱을 저장한다.

  EX : 

  - 00 이라면 최대값

  - 01이라면 최소값

  - 10이라면 2/3 * 최대값 + 1/3 * 최소값

  - 01이라면 1/3 * 최대값 + 2/3 * 최소값

  이렇게 해서 색상값 2개 32bit와 인덱싱값 16개 32bit를 합쳐서 총 64bit가 된다.

  dxt1 압축을 기준으로 24비트(R8G8B8) 텍스쳐의 경우 4x4 사이즈라면 3byte * 16 = 48byte가 필요하지만 

  dxt1 압축을 하면 64bit 즉, 8byte가 필요하다.


이를 이미지로 표현하면 아래와 같다.

이미지 참조 : https://www.slideshare.net/zho7611/ndc2012-12677111





Reference Link


'Study > Graphics' 카테고리의 다른 글

normal mapping artifacts  (0) 2014.12.10
tangent space, 접선 공간  (0) 2014.04.07
DXT 압축  (0) 2013.03.15
BRDF (Bidrectional Reflectance Distributing Function)  (0) 2012.12.06
64박스 필터 샘플링  (0) 2012.01.30
9콘 필터 샘플링  (0) 2012.01.26
Posted by 붕대마음

최근에 달린 댓글

최근에 받은 트랙백

글 보관함