90 likes | 190 Views
Compression. 2009.5.10 이창희 (cagetu79@gmail.com). 무엇을 압축하는가 ?. Vertex Texture Animation ETC. Vertex 압축. Float(4Byte) 를 단위로 … FixedPoint Icon2008 애니메이션을 위한 최적화 기법 UBYTE4 UBYTE4: 0~255 범위의 unsigned char 형 4 개 UBYTE4N: 0~1 범위의 unsigned char 형 4 개. Vertex 압축 (Cont.). Texcoord
E N D
Compression 2009.5.10 이창희 (cagetu79@gmail.com)
무엇을 압축하는가? • Vertex • Texture • Animation • ETC
Vertex 압축 • Float(4Byte)를 단위로… • FixedPoint • Icon2008 애니메이션을 위한 최적화 기법 • UBYTE4 • UBYTE4: 0~255 범위의 unsigned char형 4개 • UBYTE4N: 0~1 범위의 unsigned char형 4개
Vertex압축(Cont.) • Texcoord • -1.0~1.0의 float값 • Float2->Short2(4)로 압축(FixedPoint) • Normal/Tangent/Binormal • -1.0~1.0의 float값 • Float3->UBYTE4N(4)로 압축 • -1.0~1.0의 범위를 0.0~1.0의 범위로 scale필요. • SkinWeights/SkinJoints • Weight(0.0~1.0), Joints(0~x) • Float4->UBYTE4N(4), Float4->UBYTE4(4)로 압축 • 범위 내에 값이 존재함으로, 따로 변환하지 않는다.
Vertex압축(Cont.) • Tip • 압축 결과 Quality를 눈으로 비교하여, 적절히 적용한다. • UBYTE4형을 지원하지 않는 그래픽카드의 지원을 고려해야 한다면, COLOR(DWORD)형을 이용하거나 다른 방법을 사용해야 한다. • Color와 UByte4는 rgba의 순서를 다르게 저장. • 실제 “콜오브듀티4 ”의 오류 중 하나의 예.
Texture • .dds로 압축 • NormalMap을 압축할 경우, 압축 형식(DXT1, DXT5, DXT5nm)에 따라 shader내부에서 Sample을 처리한다. • http://developer.nvidia.com/object/real-time-normal-map-dxt-compression.html • 2048x2048 Texture • TGA: 16.4M-> DXT5: 5.4M(mipmap포함)
Animation • Icon2008 애니메이션을 위한 최적화 기법 • Quaternion 압축 • Key Sample 압축
기타 • HDR • 0~255 칼라 이상을 저장하기 위해서, 보통 A16B16G16R16F에 저장. • PixelShader에서 최종색상을 출력할 때, 색상을 ½로 나누어서 저장하면, A8R8G8B8 포맷 텍스쳐에 저장이 가능
Reference • http://kimsama.egloos.com/1901622 • Nebula3 (April2009-SDK) • http://gamecode.org