MoniWiki메모장_DX Tn
Login:
Password:
대문|찾기|바뀐글|목록|메모장|책갈피|연꽃|링크
Edit Diff Reload Search Print Info Mail Help RSS

@ 2004-08-31 @

  DXTn 포맷

Tip> 원하는 페이지나 링크를 다른 창으로 열고 싶다면 <SHIFT> 키를 누르고 링크를 클릭하시면 됩니다.
1 텍스처 압축 기법 및 요령
1.1 텍스처 압축에 대한 소개
1.2 텍스처 압축 알고리즘
1.3 DXT 압축 포맷
1.4 3Dc 압축 포맷
1.5 A8L8 과 V8U8 포맷
1.6 노멀 맵을 위한 z 축 생성
1.7 요약
1.8 리소스
2 오블리비언(The Elder Scrolls IV)에서의 DDS 설정
3 Which DXT Compression to Use?/ GameDev
4 GPG 정리

1 텍스처 압축 기법 및 요령 #

▶ 출처; http://blog.naver.com/crazygats/70012917110
원문 : http://www.gamasutra.com/features/20051228/sherrod_01.shtml

[편집자 주 : 프로그래밍 관점에서 작성된 다중 텍스처 압축 기법에 대한 이 기사는 아티스트 관점에서 DXT 압축에 대한 이슈를 논의하는 Riccard Linde 의 최근 기사(http://www.gamasutra.com/features/20051123/linde_01.shtml)와 함께 읽기 바란다.]

( 역주 : 그림들의 차이가 잘 안 느껴지므로 다운받아서 ALSEE 같은 프로그램으로 확대해서 보시면 차이를 느끼실 수 있습니다 )

게임이 더욱 더 가시적으로 복잡해 질 수록 세부적인 환경 및 오브젝트를 생성하는데 필요한 작업이 늘어 난다. 텍스처 이미지와 같은 것에 더욱 세부성이 부여되며, 그러한 리소스를 메모리에 저장하기 위해서는 더 많은 저장 공간을 필요로 하게 된다. 우리 리소스가 더욱 커지고 메모리 소비를 많이 하게 되면, 우리는 리소스를 렌더링 파이프라인에 밀어 넣기 위한 대역폭을 증가시킬 것을 요구받게 된다. 우리에게 필요한 것은 고해상도 작업물을 취하고 저장에 요구되는 메모리를 줄이고 그 정보를 사용해 작업하는 방법이다.

이 기사에서 우리는 간단하게 사용될 수 있는 몇 개의 서로 다른 텍스처 압축 기법을 보게 될 것이다. 이들 기법 각각은 자신만의 장점과 단점을 가지고 있으며, 텍스처 이미지의 집합을 위해서 사용하게 될 텍스처 압축 포맷을 결정하기 전에 이들에 대해서 명확하게 이해하는 것은 중요하다. 어떤 포맷은 단지 노멀 맵을 사용할 때만 작동하는 반면, 어떤 포맷은 데칼과 노멀 맵 중 어떤 것을 사용해도 작동한다. 더 복잡한 문제로 어떤 포맷들은 이미지 리소스의 가시 품질에 악영향을 끼치는 데, (이 기사에서 나중에 보겠지만) 노멀 맵을 다룰 때 좋은 결과를 보여주지 않는다.

1.1 텍스처 압축에 대한 소개 #
현대 비디오 게임에서의 작업물 양은 과거의 게임과 비교할 때 엄청나다. 해상도, 개수, 세부성 등에 있어서 더 높고, 많고, 깊은 것들이 사용되고 있다. 비록 그래픽 하드웨어에서의 성공을 거두고, 우리에게 많은 메모리를 제공해 주었지만, we still don't have enough space to the point where we can load images without the concern and issues that arise with running out of memory.

범프 매핑, 노멀 매핑 등과 같은 기법들은 문제를 더 복잡하게 만든다.
왜냐하면 1) 이들 이미지의 해상도는 종종 매우 큰 크기를 가지며 2) 기하 도형 데이터로부터 생성된 노멀 맵은 남부럽지 않은 수준의 품질을 가진 모델 오브젝트를 완전히 커버하기 위해서 커야만 하기 때문이다.
우리가 사용할 수 있는 메모리의 최대 크기를 만들어 내기 위해서는 비디오 게임 응용프로그램에서 이미지 압축을 사용해야만 한다. 텍스처 이미지를 압축함으로써 우리는 각 이미지가 하드웨어 상에서 요구하는 메모리의 총량을 감소시킬 수 있으며, 특정 경우에는 압축 기법을 사용해 노멀 맵 이미지의 가시 품질을 증가시킬 수 있다. 압축 텍스처를 사용하는 것은 응용프로그램 수행성을 높여 주기도 한다. 왜냐하면 파이프라인에 밀어 넣을 데이터의 양이 줄었기 때문이다.

이 기사의 목적은 비디오 게임 응용프로그램에서 사용되는 이미지의 크기를 감소시키는 데 사용될 수 있는 몇 가지 서로 다른 텍스처 압축 기법에 대해서 살펴 보는 것이다. 우리는 주로 A8L8, DXT, 3Dc 압축 포맷에 대해서 살펴 볼 것이며, 각 포맷이 데칼 텍스처와 노멀 맵 이미지와 함께 사용되고 있을 때 쌓여가는 방식에 대해서도 다른 것과 비교해서 알아볼 것이다.(원문 : as well as how each format stacks up against the others when dealing with decal textures and normal map images)

이 기사에서 논의할 각 텍스처 압축 포맷은 Direct3D(Windows OS 상에서 3D Graphics 를 렌더링할 책임이 있는 DirectX core 의 API) 와 OpenGL(플래폼 독립 Graphics 라이브러리) 모두에 적용될 수 있는데, 두 그래픽스 API 모두 텍스처 이미지를 직접 이들 포맷으로 저장할 수 있는 기능을 가지고 있다. 부가적으로 우리는 OpenGL을 사용하여 파일로부터 로드된 압축되지 않은 텍스처 이미지를 취하고, API 를 사용해 내부적으로 압축을 수행하는 방법에 대해서도 다루도록 하겠다. 그리고 나서 압축된 데이터를 취해 그것을 파일로 저장하여 나중에 사용할 수 있다(예를 들어 압축된 이미지를 저장할 수 있으면, 우리는 응용프로그램이 시작될 때마다 그것을 다시 압축하는데 시간을 소비할 필요가 없게 된다.).

1.2 텍스처 압축 알고리즘 #
게임에 사용할 수 있는 많은 텍스처 압축 알고리즘이 존재한다. 이전에 언급했듯이 이 기사는 DXT (S3TC) 와 3Dc 텍스처 압축 포맷을 A8L8 포맷과 함께 살펴볼 것이다. 각 포맷은 자신만의 장단점을 가지고 있다.

예를 들어 3Dc 압축 포맷은 노멀 맵에 대해서는 좋지만, DXT 압축 포맷은 non-decal 텍스처를 다루는 데는 좋지 않다. DXT1 압축 포맷은 6 : 1 압축율을 허용하는 반면 DXT2/3/4/5 와 3Dc 포맷은 4 : 1 압축율을 허용한다. A8L8 은 기술적으로는 압축이 아니지만 그것은 3개가 아니라 2개의 컴포넌트를 사용해 데이터를 표현할 수 있도록 해 준다. 노멀맵에 대해 이것은 프로그램 내에서 z 축만을 계산해서 그것을 이미지 데이터로 저장할 때 적은 공간에 저장할 수 있다는 것을 의미한다. 아래에서 우리는 DXT (S3TC) 압축 포맷에서 시작해 하나씩 각 포맷에 대해서 살펴볼 것이다.

이 기사에서 언급된 각 압축 포맷에 대해 살펴 본 후에 우리는 코드에서 노멀 맵의 Z 축을 계산하는 방법에 대해서 살펴볼 것이다.
이것은 노멀 텍셀의 X 와 Y(빨간색과 녹색) 축들의 값들만이 필요하다는 것 뿐만 아니라, 모든 노멀을 단위 길이로 보증할 수 있음을 의미하기도 한다.(원문 : Not only does this allow us to only need the X and Y (red and green) axes values of the normal texel but it also means that we can be sure that all of out normals are unit-length.) 단위 길이 노멀은 1인 길이를 가지므로 다루기가 쉽다.

1.3 DXT 압축 포맷 #
DXT 압축 포맷은 이미지 크기를 4 : 1 이나 6 : 1로 감소시킬 수 있는 손실이 많은 압축을 사용한다.
DXT 포맷은 Direct3D API 의 표준 이며 ARB_texture_compression 과 GL_EXT_texture_compression_s3tc 확장을 통해 OpenGL API 에서도 사용할 수 있다.

DXT 압축 포맷은 DXT1, DXT2, DXT3, DXT4, DXT5 로 구성되어 있다.
DXT1 은 픽셀당 4비트를 사용해 최대의 압축률을 제공하지만 알파 채널을 요구하지 않는다(만약 있다면 1비트이다). DXT2/3 은 DXT1 과 같지만 알파채널을 위한 부가적인 4비트를 가지고 있다. 결국 이미지 크기가 2배이다. DXT2 포맷에서 데이터는 알파채널과 미리 곱해지는데, DXT3 에서는 그렇지 않다. DXT4/5 포맷은 DXT2/3 포맷과 비슷한데, 이미지를 압축할 때 알파 데이터를 보간한다는 점에서 다르다. DXT2/ 3/ 4/ 5는 4 : 1 의 압축률을 제공하며, DXT1 은 8 : 1 이나 6 : 1 의 압축률을 제공한다(알파를 사용하지 않으면 8 : 1 이다).

DXT 압축은 특히 고해상도를 가진 데칼 텍스처 이미지를 사용할 때 좋다. DXT 압축을 사용하는 데 있어서 문제는 노멀 맵을 고려해서 설계되지 않았다는 것이며, 그것들은 이러한 종류의 이미지를 사용해 작업할 때 끔찍한 결과를 낳을 수 있다는 것이다. 비압축 데칼 텍스처와 압축 데칼 텍스처의 비교가 Figure 1 에 나와 있다. Figure 1 을 본 후에 Figure 2 에서 비압축 노멀 맵과 압축 노멀 맵의 비교를 살펴 보라.


Figure 1 - (왼쪽) 비압축 이미지 (오른쪽) 압축 이미지


Figure 2 - (왼쪽) 비압축 노멀 맵 (오른쪽) 압축 노멀 맵

Figure 1 과 Figure 2 에서 볼 수 있듯이 DXT 압축은 데컬 텍스처 데이터 압축에 있어서는 훌륭하만, 노멀 맵 데이터를 압축하려고 할 때는 적절치 않다. 이것은 DXT 압축이 이미지가 부드러운 변화를 가지고 압축되고 있다고 가정하기 때문이다(노멀 맵에서 볼 수 있듯이, 이것은 항상 그런 것이 아니다). 그리고 그것은 16 비트 참조 색상 값을 가지고 있으며, 이는 가능한 노멀 방향을 표현하기에는 충분하지 않다. DXT 포맷을 사용해 압축된 노멀 맵과 함께 specular 조명을 사용하는 것은 계산에 사용되는 제곱(power) 함수 때문에 인공물(artifacts)를 증가시킬 수 있다(제곱 함수는 인공물을 확대한다).

DXT 포맷은 non-normal 맵 데이터를 위해서 사용되는 것이 좋지만, 꼭 사용하고 싶다면 몇 가지 꽁수를 사용하여 DXT 압축을 노멀 맵 데이터와 함께 사용할 수 있다. 이런 꽁수들은 각 텍스처 fetch 에 대해 노멀을 재노멀라이즈하는 것, DXT5 압축을 사용할 때 알파 채널에서 노멀의 X 축을 배치하는 것(알파 채널은 개별적으로 압축되기 때문에, 우리는 DXT1 압축을 사용하는 것보다 좋은 결과를 얻을 수 있다), Z 컴포넌트를 생성하는 것, DXT5 압축을 사용할 때 알파채널에서 X 축을 배치하는 것을 포함한다.

마지막 꽁수에 대해서 알파채널은 개별적으로 압축되고 4비트를 가지고 있기 때문에, 우리는 그 안에 더 큰 범위의 값을 저장할 수 있다. Z 축을 생성함으로써 우리는 단위 길이 노멀을 사용해 작업하고 있으며 압축된 이미지 데이터 안에 저장될 수 있는 것에 스스로 제한을 걸 필요가 없음을 보증할 수 있다. 이것은 이전보다 더 높은 품질의 노멀맵과 함께 DXT5 압축 포맷을 사용할 수 있게 해 준다. 그러나 아직까지도 문제는 있으며 완전하지 않다.

1.4 3Dc 압축 포맷 #
3Dc 압축 포맷은 텍스처 데이터를 효율적으로 압축하기 위해서 ATI 에 의해 만들어진 2 컴포넌트 포맷이다. 3Dc는 노멀 맵 데이터를 압축하거나 단일 텍스처로 다중의 데이터를 압축하는데 효율적으로 사용된다. DXT 압축 포맷의 단점은 DXT 가 노멀 맵 이미지에서 많은 인공물을 만들어 낸다는 것이다. 왜냐하면 그것은 (노멀 맵의 뒤틀림이나 작은 모서리와 같은) 작고 정밀한 detail을 효출적으로 처리할 수 없기 때문이다. 노멀 맵의 목적은 이미지의 디테일을 캡춰하는데 있기 때문에, 이것은 렌더링되는 씬 안에서 좀 큰 인공물을 발생시킬 수 있다. 이러한 인공물들은 매우 안 좋을 수 있으며, 렌더링되는 씬의 전체 품질에 심각한 악영향을 끼칠 수 있다.

3Dc 포맷의 목적은 가능한한 높은 수준의 디테일을 유지하면서 이미지를 압축하는 것이다. 3Dc 압축은 이미지를 4 : 1 비율로 압축한다. 이 압축은 하드웨어 가속이 되며 이 데이터를 압축 해제하는 시점이 왔을 때 이 기법을 사용하는 응용프로그램 상에서 수행성에 매우 적은 영향을 끼친다. 비교를 위해서 Figure 3 을 살펴 보자.


Figure 3 (왼쪽) 비압축 (중간)DXT5 압축 (오른쪽) 3Dc 압축

1.5 A8L8 과 V8U8 포맷 #
A8L8 포맷은 Direct3D 에서 사용되는 두 개의 8비트 부호없는 텍스처 포맷(A8L8 의 부호있는 버전은 V8U8 이다)이다. A8L8 의 OpenGL 버전은 GL_HILO8_NV 를 통해 외포되는데, 이는 NV_texture_shader3 확장의 일부이다. 단지 두 개의 컴포넌트만을 사용함으로써 우리는 이 포맷을 데칼 텍스처에 대해서 사용할 수 없다. 왜냐하면 우리에게 세 번째 컴포넌트(파란색 컴포넌트)가 제공되는지를 알려줄 방법이 없기 때문이다.

이 포맷은 데칼 이미지에 대해서는 사용되지 않기 때문에, 이것은 알파 컴포넌트와 함께 휘도(luminance, 발광) 를 저장하는데 사용되며(휘도 값은 첫 번째 컴포넌트에 저장되는 반면 알파 값은 두 번째에 저장된다), 노멀 맵 데이터를 저장하는데 사용되기도 한다. 그것은 두 개의 컴포넌트를 사용해 각 텍셀에 대한 노멀의 X 와 Y 축을 저장함으로써 노멀맵을 저장할 수 있다. 노멀은 단위 길이(즉, 모든 컴포넌트를 제곱해서 더하면 1이다)이기 때문에, 우리는 단지 간단한 수학식을 사용해 노멀의 Z 축이 얼마인지를 알아낼 수 있다. 왜냐하면 우리는 X 와 Y 축이 무엇인지 알고 있기 때문이다.

이 포맷이 기술적으로는 압축을 사용하고 있지는 않지만, 컴포넌트를 전체적으로 줄임으로써 적은 공간을 사용해 비압축 노멀 맵을 취하고 저장할 수 있도록 해 준다. 각 텍셀로부터 컴포넌트를 줄였기 때문에 텍셀당 3바이트에서 2바이트로 줄일 수 있다(즉 3/1 만큼 적은 공간을 차지). 쉐이더에서 노멀의 Z 축을 쉽고 빠르게 계산할 수 있다.

1.6 노멀 맵을 위한 z 축 생성 #

단위 길이 노멀 컴포넌트는 모두 더해 1이기 때문에 (R * R + G * G + B * B = 1.0), 우리는 고등학교 수준 대수를 사용해서 아래와 같이 "x의 해를 찾는" 유형의 식을 생성할 수 있다 :

(A * A) + (B * B ) + (X * X) = 1

예를 들어 만약 당신이 A 제곱(빨간색 컴포넌트)가 0.1 이고 B 제곱이(녹색 컴포넌트)가 0.3 이라고 알고 있다면, 식은 다음과 같다 :

0.1 + 0.3 + X = 1
0.4 + X = 1
X = 1 + (-0.4)
X = 0.6

(예제 프로그램의) 코드에서 우리는 단지 첫 번째 두 개의 노멀 축을 사용해 모든 노멀의 Z 축을 계산할 수 있다. 이것은 다음과 같이 수행된다 :

Z * Z = 1 - X * X - Y * Y

또는

Z = sqrt(1 - X * X - Y * Y)

노멀은 항상 단위길이이기 때문에, 이 포맷으로 노멀 맵을 사용한 결과는 프로그램이 실행될 때마다 프로그램에서 노멀을 재정규하지 않는다면 더 좋은 결과를 부여하게 될 것이다.

1.7 요약 #
텍스처 압축을 사용하는 부가적인 이익은 매우 크다. 3Dc 압축 텍스처를 사용할 때, 우리는 하드웨어 메모리를 요구하거나 수행성을 희생시키지 않고 노멀 맵 이미지를 4배나 세부적으로 만들 수 있다. DXT 압축 포맷은 데칼 텍스처 이미지를 다룰 때 좋지만, 노멀 맵 이미지에 대해서는 이상적인 선택이 아니다. 노멀 맵에 DXT 압축을 사용하는 것은 이미지에 인코딩되었던 노멀 데이터를 변경하게 될 것이며, 가시 품질을 최악으로 만들게 될 것이다. 이것은 그 포맷의 손실이 많은 압축 스킴(scheme) 때문이며, 이를 노멀 맵의 노멀에 적용하고 싶지 않을 것이다.

속도가 중요하다면 우리는 A8L9 과 V8U8 포맷을 사용할 수도 있다. 이들 포맷은 텍셀 당 2바이트를 요구하며, 텍셀 당 1 바이트를 요구하는 DXT 포맷보다는 2배 크다. DXT 포맷을 사용하지 않음으로써 우리는 이미지의 원래 품질을 변경하는 손실많은 압축에 대해 걱정할 필요는 없다. 그리고 하드웨어는 우리가 프로그램에서 그것에 접근하려고 할 때 데이터의 압축을 푸는 데 시간을 소비할 필요가 없다. 만약 A8L8 이 노멀 맵에 대해 사용되면, 이미지의 Z(혹은 파란색) 컴포넌트는 반드시 프로그램에서 계산되어야만 한다.

Regardless of how we look at it, 텍스처 압축은 아마도 항상 우리가 무엇인가를 작업해야만 하는 어떤 것이 되어버릴 것이다. 왜냐하면 게임들은 더욱 복잡해지고 게임에 대한 작업량이 늘어나기 때문이다. 어떠한 텍스처 포맷이 사용될 것인가는 우리가 작업하고자 하는 이미지의 유형에 달려 있다. 왜냐하면 어떤 포맷은 어떤 유형의 이미지에 대해서 다른 것 보다 더 잘 동작하기 때문이다(예를 들어 decal vs. normal).

이 기사에 언급된 텍스처 압축 포맷에 대한 더 자세한 정보를 원한다면 이 기사 마지막에 있는 (리소스) 섹션을 검토하길 바란다. 이 기사에서 언급된 포맷 중 하나를 사용할 때 다음을 유념하기 바란다 :
• A8L8을 사용할 때, 데칼에 대해서 그것들을 사용할 수 없다. 왜냐하면 파란색 컴포넌트가 무엇인지 알려줄 방법이 없기 때문이다.
• 노멀 맵을 선형 필터링할 때 그 필터는 노멀이 정규화되는 것보다 작은 값을 가지게 만들 것이다. 만약 이러한 일이 발생하면, 우리는 텍셀이 호출될 때마다 프로그램에서 노멀을 재정규화해야만 할 것이다.
• 인공물(Artifacts)은 노멀맵과 DXT 압축 포맷을 사용하려고 시도할 때 증가하며, 이는 스펙큘러 하이라이트에서 특히 심하다.
• Z 컴포넌트 생성은 렌더링 품질을 증가시킬 수 있다.
• 노멀 맵을 위해서는 3Dc 압축 포맷이 DXT 압축 포맷보다 더 낫다.
• DXT1 은 제일 높은 압축율을 제공한다.
• 압축 포맷을 사용해 작업하면 수행성을 증가시킬 수 있다. 왜냐하면 파이프라인으로 밀어 넣을 데이터가 줄어들기 때문이다.
• 이 기사에서 언급된 각 포맷은 OpenGL 이나 Direct3D, 모두에서 작동할 수 있다.

1.8 리소스 #
텍스처 압축에 대한 정보를 더 원한다면 개발자 웹사이트에 있는 Bump Map Compression 이라는 이름의 NVIDIA 기술 레포트를 참조하라 : http://developer.nvidia.com/object/bump_map_compression.html.

3Dc 텍스처 압축 알고리즘에 대한 부가적인 정보는 3Dc White Paper 라는 이름의 ATI 백서에 찾을 수 있다 : http://www.ati.com/products/radeonx800/3DcWhitePaper.pdf


2 오블리비언(The Elder Scrolls IV)에서의 DDS 설정 #

출처 ; http://cafe.naver.com/elderscrolls7/100000
(원본링크 - http://cs.elderscrolls.com/constwiki/index.php/DDS_Files)
엘더스크롤 CS위키에 있는글을 번역/의역한 것 입니다.

DDS란 확장자는 텍스쳐 파일 포맷중 하나인 Microsoft DirectDraw Surface파일을 의미합니다.
아시다시피 오블에서 텍스쳐를 표현하는데 쓰이는 형식이죠. 이 형식의 파일은 텍스쳐 정보와 cubic environment maps, 그리고 경우에 따라 mipmap을 포함하거나 포함하지 않습니다. DiretX 7.0이 나올때 등장한 형식입니다.
DDS파일을 지원해주는 그래픽 프로그램은 많지 않지만 플러그인등의 도구를 통해 가능하게 됩니다.
(역주 : 포토샵같은 경우는 nvidia plugin시리즈.)

용도 저장
형식
Mip
Maps
이미지
형식
알파채널의 용도
투명도가 상관없는 텍스쳐
(대부분의 모델과 모든 지형)
DXT1,
RGB
유 Color map 없음
투명도가 부분적(혹은 전체에) 적용되는텍스쳐
(Nifscope로 먼저 설정해줘야 함.
역주 : node-attach property-nialphaproperty)
DXT3,
DXT5
ARGB
유 Color map 투명도
(흰색에 가까울수록 불투명이고
검정색에 가까울수록 투명)
Parallax displacement mapping이 있는 텍스쳐.
(nifscope로 먼저 설정해야함.)
DXT3,
DXT5
ARGB
유 Color map Displacement mapping
(검정 = 들어감, 흰색 = 나옴,
50% 회색 = 기준점)
노멀맵
(*_n.dds)
DXT3,
DXT5
ARGB
유 Tangent
Space
광택   (검정 = 무광, 흰색 = 유광)
광택의 자세한 사항은 메쉬의
NiMaterialProperty에 의해 결정
글로우 맵
(*_g.dds)
DXT1,
RGB
유 Color map 없음
아이콘
(또는 다른 인터페이스 관련)
DXT3,
ARGB
무 Color map 인터페이스내에서의 투시
(설정된 부분은 인터페이스의 텍스쳐)
북아트 DXT3,
ARGB
무 Color map 페이지상의 투시
(설정된 부분은 책의 종이 텍스쳐)
로딩 스크린 DXT5,
ARGB
무 Color map   -

알아두면 좋을것:


저장할 때 DXT1이나 3이나 5는 RGB채널하고는 관련이 없습니다. 플러그인의 설명에서도 보여주는 알파채널이 이것과 관련이 있는데요, 이 알파채널이 어떻게 압축이 되는가입니다. DXT1는 알파채널을 아예 전부 흰색으로 설정해버려서 알파맵이 차지하는 용량이 거의 없게 되는것과 마찬가지입니다.(역주 - 알파맵이 필요없다면 이 형식으로 저장해 용량을 줄여 스왑현상을 줄이는데 유용하겠죠.) DXT2의 같은 경우는 흑/백 이분적인 설정만이 가능하고, 3의 경우는 어느정도의 회색 스케일도 가능합니다. 5의 같은 경우는 완벽한 회색 스케일을 지원합니다.(RGB채널과 동일한 식의 회색스케일)

즉, 노멀맵을 DXT1로 저장했다면 그 아이템의 모든부분이 휘까번쩍 해지고 불필요한 부분(예 - 천, 나무) 광택이 적용되게 되죠. 그러므로 노멀맵은 반드시 DXT3 혹은 DXT5로 저장되야합니다. 보통은 DXT3로 먼저 노멀맵을 작성하고 필요한 경우는 DXT5로 세부적인 디테일을 지정하는것도 좋은 방법입니다. Parallax과 투명도 mapping은 동시에 설정이 가능하나 이 두 설정을 전부 나타내기 위해서는 알파채널을 이에 맞게 설정해주어야만 합니다.

오블리비언은 압축되지 않은 텍스쳐도 나타낼 수 있습니다, 특히나8.8.8.8 Unsigned 형식이요. 압축되지 않으므로 완벽한 퀄리티가 나오지만 그에 반해 크기가 너무 엄청나므로 잘 쓰이지 않습니다.(그래픽 카드 램에 엄청난 무리가 가죠.) 그래도 쓸일이 있다면 텍스쳐의 해상도나 사이즈를 줄여서 쓰는게 현명하겠죠.


3 Which DXT Compression to Use?/ GameDev #

▶ 출처; http://blog.naver.com/crazygats/70012917163

어떤 경우에 어떤 DXT 포맷을 써야할지 모르겠다면 다음의 링크를 참조...

원문 : http://wiki.beyondunreal.com/wiki/DXT
다음은 위의 링크에 있는 내용중 부분을 일부 추려서 번역한 것. (심하게 의역함. -_-;;;)

1.If your image has no alpha, use DXT1 compression. Using DXT3/5 will double your image size over DXT1 and not gain anything.

> 알파가 없는 이미지라면 DXT1을 써라. DXT3/5는 용량만 두배로 늘어나고 잇점은 하나도 없다.

2.If your image has 1-bit (on or off) alpha information, use DXT1 with one-bit alpha. If the DXT1 image quality is too low and you don't mind doubling image size, use DXT3 or DXT5 (which one doesn't matter, they'll give the same results).

> 1비트 알파가 있다면, DXT1을 사용하라. 만약 DXT1의 퀄러티가 너무 떨어지고, 용량에 대한 걱정이 없다면 DXT3나 DXT5를 사용하라.

3.If your image has smooth gradations of alpha (fading in/out slowly), DXT5 is almost certainly your best bet, as it will give you the most accurate transparency representation.

> 알파채널이 부드러운 그라데이션을 가지고 있다면, DXT5가 가장 좋은 선택이다. 반투명 효과를 가장 정확하게 나타내 줄 것이다.

4.If your image has sharp transitions between multiple alpha levels (one pixel is 100%, the next one is 50%, and another neighbor is 12%), DXT3 is probably your best bet. You may want to compare the alpha results in DXT1, DXT3 and DXT5 compression, however, to make sure.

> 알파값들이 팍팍 바뀌는(어떤 픽셀은 100%, 그 다음 픽셀은 50%, 그 옆에는 12%) 이미지라면 DXT3가 아마 가장 좋을 것이다. 하지만, 아마도 확실히 하기 위해서 DXT1,3,5 모두를 만들어 보고 그 결과를 비교해 보고 싶을 지도...

In DXT2 and DXT4, the pixel color values are multiplied by the alpha values before compressing (so partially transparent pixels have a color value stored darker than it shows onscreen, and completely transparent pixels always have a color value of black in the compressed texture). This can speed up some types of compositing operations, but it has the side-effect of losing color information, and can result in uglier DXT compression for some types of textures. In any case, alpha premultiplication is not supported by current Unreal Engine versions, so DXT2 and DXT4 are not options for texture formats in UnrealEd (so you can forget they exist).

> DXT2/4는 알파값을 컬러값과 미리 곱하는 것으로 실제 최종 화면에서 나오는 것보다 어둡게 보일 것이다. 어떤 컬러연산(역주 : DirectX의 경우라면 아마도 SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA )로 설정하는 경우를 말하는 것 같음. )에서는 빠를지도 모르지만, 컬러정보를 잃거나 어떤 종류의 텍스쳐에 대해서는 더 보기 안 좋은 결과가 나오는 부작용이 있다.


4 GPG 정리 #

▶ 출처:http://www.gpgstudy.com/forum/viewtopic.php?t=5871 요약 정리

chaen님의 DDS에 대한 의견.

TGA, JPG, DDS는 파일 포맷이고, A8R8G8B8, DXT1 같은 것은 픽셀 포맷입니다. 따라서 DDS == DXTn 은 아닙니다.

DDS는 DirectX의 Texture 포맷과 일대일로 대응하는 '파일 포맷'
DDS에서도 A8R8G8B8 로 저장할 수 있고, 그 내용은 TGA 32bpp와 거의 똑같고 파일 사이즈도 비슷하다.
R8G8B8, A8R8G8B, X1R5G5B5 같은 포맷은 TGA에서 지원하고,
R8G8B8 같은 포맷은 JPG(어떻게 보면 압축된 R8G8B8), BMP같은 대부분의 일반적인 이미지 파일포맷들이 지원한다.
다만, DXTn(DTXc,S3TC)을 저장할 마땅한 포맷이 없어서 DDS를 쓰다보니 DDS == DXTn 이라고 이야기 한다.
( DDS라는 파일포멧은 DXTn 압축텍스쳐(픽셀포멧)을 직접지원하는 파일포멧 )

DDS는 밉맵의 각 레벨의 서피스를 묶어서 하나의 파일로 저장할 수도 있고, Cube 텍스쳐나 Volume 텍스쳐로 저장이 가능하다.
DDS은 DirectX에서 쓰는 텍스쳐와 같은 포맷을 사용함으로써, 텍스쳐 생성 후 파일에서 로딩한 데이터를 압축해제나 픽셀포맷 변환없이 바로 사용할 수 있다.
예를 들어, TGA 24bpp 이미지는 R8G8B8( B8G8R8 )이지만 오늘날 대부분의 그래픽 카드에서는 DirectX 상으로 D3DFMT_R8G8B8 포맷에 해당하는데 잘 지원하지 않는다.
대신 대부분 D3DFMT_X8R8G8B8 포맷을 지원하기 때문에, 알파 없는 TGA 파일을 사용한다면 모든 픽셀에 대해서 항상 포맷 변환 작업을 필요로 한다.

그럼에도 불구하고 대부분의 개발자들이 JPG나 TGA 파일을 여전히 선호하는 결정적인 이유는 ACDSee나 알씨 같은 일반적인 이미지 뷰어에서 Preview(미리보기)가 가능하기 때문이다.
-.Deep Exploration 같은 툴에서는 DDS 포맷을 지원
-.NVIDIA에서 제공하는 툴이 아니더라도 9.0SDK 2004 이상만 설치해도 미리보기가 가능
-.포토샵 같은 그래픽툴에서는 플러그인을 따로 깔아야 작업이 가능
-.DirectX SDK 를 설치하면 따라오는 툴중에 texconv.exe이 있다.
DXTn 변환시 화질은 포토샵보다 약간 떨어지는듯 싶지만 거의 완벽하게 모든 포맷을 DDS로 바꿔준다.
( 커맨드 라인용 툴로서 배치작업이 가능하고 여러개의 파일을 한꺼번에 작업이 가능 )

PC 같이 다양한 하드웨어가 상존하는 플랫폼에서는 픽셀 포맷 변환이라는 것이 필수 불가결한 일 일지도 모른다.
-.포맷이 다른 플랫품에서는 픽셀변환이 필요
-.더 나은 성능을 위해서 32bpp나 24bpp 포맷을 16bpp 포맷으로 변환하는 작업이 필요

DXT 포맷을 제외한 나머지 포맷들은 전혀 압축이 되지 않아서 전체 게임데이터 양을 크게 만든다는 단점도 있다. 이는 파일서버 여유공간이 부족한 개발사에겐 게임 개발 과정 중 데이터 유지관리에 부담이 될 수도 있으며, 게임 설치후 HDD를 차지하는 공간이 커져서 소비자에게 부담스러울 수도 있다. 물론, 퀘이크 시리즈처럼 게임 데이터들을 ZIP 파일로 한번 더 묶어 줌으로서 해결할 수 있는 문제이기도 하다.

간단히 추론하자면 적당한 환경이 갖춰진다면 모든 텍스쳐 포맷을 DDS로 쓰는게 게임의 성능을 위해서 좋지만 현실적으로는 일반적인 이미지 포맷과 DDS를 섞어 쓰는 것도 나쁘지 않다. 혹은 개발중에는 섞어 쓰다가 릴리즈용 리소스들을 묶어 주면서, 모든 텍스쳐를 DDS 포맷으로 자동으로 변환해 주는 배치 파일이나 툴을 만드는 것도 괜찮을 것 같다. 플랫폼과 일대일로 대응하는 포맷을 미리 리소스로 만드는 작업은 콘솔 플랫폼에서는 거의 필수적인 일이다.


etds님의 DDS사용에 대한 제안.

- DXTn을 썼을 때의 장점
1. 메모리를 꽤 적게 쓴다. (또 메모리 대역폭도 아낄 수 있다.)
2. 대부분의 비디오카드가 하드웨어 가속을 지원하므로 성능 저하가 없다.
3. 메모리를 적게 쓰는데 비해 퀄리티가 나쁘지 않다. 특히, 노이즈 같은 주파수가 높은 텍스쳐들에 효율적이다.
(반대로 그라데이션같은 느낌의 텍스쳐에서는 계단이 눈에 띄게 보인다. 그래서 편법을 쓰지 않으면 노말맵에 쓰기에도 별로 좋지 않다.)

제가 사용하는 DXTn 사용시 가이드라인은,
1. 알파채널이 없는 경우 무조건 Opaque DXT1을 쓴다. (칼라는 4단계로 보간)
2. 알파채널이 있지만 alpha testing의 용도로 쓰는 경우 1bit alpha DXT1을 쓴다. (이 경우 칼라가 3단계로 보간되므로 Opaque DXT1보다 약간 퀄리티가 떨어져 보일 수 있다.)
3. 알파채널이 중요한 경우 DXT3을 쓴다. (칼라는 4단계로 보간되고 알파는 4비트로 표현)
4. 알파채널이 그라데이션 스타일인 경우 DXT5를 쓴다. (칼라는 4단계로 보간되고 알파는 8단계로 보간)
5. 그래픽 디자이너가 이상하다고 하는 경우나, GUI에 쓰이는 글씨 이미지 같은 경우 jpg 또는 tga를 그냥 쓴다.

이분의 경우 소속된 회사에서 서비스하고 있는 온라인 게임에서 보통 3번째까지 적용하면 대부분 문제가 없었고, 이펙트 등에 쓰이는 알파가 중요하게 들어간 텍스쳐만 4번째까지 적용하곤 했다합니다. 그래픽 디자이너들과의 의견 조율 및 절충으로 5번까지 가는 경우는 생각보다 드물었다고 합니다.

futurity 님 내용
  1. dds 파일포맷은 사용하면 타 포맷파일 보다는 메모리 및 대역폭을 줄일 수 있다.
  2. 파일 포맷과 픽셀 포맷 차이를 분명히 하자.
  3. DXTn 픽셀포맷은 성능 좋은 손실압축이지만 GUI이미지 처럼 도트단위로 보이는 곳에는
    도트가 원래 이미지처럼 나오지 않는다. 그러므로 GUI이미지에는 X8R8G8B8,A1R5G5B5등
    픽셀도트가 깨지지 않는 픽셀포맷을 사용한다.
  4. 픽셀포맷을 정할때는 꼭 그래픽카드를 염두를 하고 지원하는 많이 사용하는 픽셀포맷으로 정해야 된다.

myevan 님
dds 압축 특성상;
사용하는 색상차이가 크고 다양할 경우 어느정도 간격을 두고 사용하셔야 합니다. (구체적으로는 16x16단위)
주변색에 영향을 받아 변색이 되는 현상이 생기곤 합니다.
이것과 함께 색도 상당히 왜곡되기 때문에 이런 경우가 많은 UI등에 적용하실때에는 주의를 기울이셔야 합니다.

또한 일반프로그래머는 느끼기 힘든(눈이 좋으시거나 그래픽 퀄리티에 신경많이 쓰시는분은 제외)
화질 저하를 그래픽 디자이너들은 잘 느끼기때문에, 성능에 직접적인 영향을 주는 게임 메인 코드가 아니라면
dds보다는 jpg등의 다른 포멧을 쓰는것이 디자이너분들과의 동료애 향상에 도움이 됩니다.
(물론 jpg도 손실입니다만; dds의 그것보다는 훨씬 양질이기때문에)

futurity + zupet 님
1.dds에는 압축/비압축 데이터를 모두 지원하고, 대부분 DXT1,5 두가지를 쓰기 위해서 이 포맷을 사용
2.dds 파일 포맷은 DXT1~5씨리즈를 사용하면 압축을 풀지 않고 비디오메모리에 올릴수 있다.
( 꼭 DDS를 쓰지 않고 DXT1,5 압축 데이터와 동일한 데이터를 쓰는 방법도 있지만 DDS 에는 Surface를 만들때 필요한 파라메터들까지 모두 한꺼번에 들어가 있어서 특별한 파싱 없이 가볍게 텍스쳐를 만들 수 있다.)
3.dds 파일 포맷을 사용하면 미리 Mipmap 제너레이터를 할수 있어서 LoadTexture 할때 빠르다.
( 이건 tool기능으고 DDS 가 내부적으로 여러장의 Surface 들을 저장할 수 있기 때문이다.)
4.DXT1~5씨리즈 포맷은 손실압축이다.
( DDS 에는 DXT1~5 이외에 압축된 포맷이 없고, 데이터는 무조건 일정 크기를 가진다. )

그외 DDS에 관한 참고가 될만한 이야기.

DDS 포맷의 태생은 S3사의 S3TC인데 당시 이 포맷이 나왔을 때에는 비디오메모리가 많이 부족한 시절(4M, 8M)이었고 S3 Savage에서는 S3TC 하드웨어 가속이 가능했었습니다. 또, 당시 DX에서는 지금처럼 기본 텍스춰 포맷으로 지원하지 않고 있었습니다. 당시 가장 좋은(?) 그래픽카드였던 Voodoo2의 경우에는 S3TC의 위력을 보여주기 위해 만든 데모와 같은 고 퀄리티의 화면을 높은 프레임으로 구현하기가 힘들었죠.. 아마도 현재는 이 기술이 모든 그래픽카드에서 가속을 지원한다고 추론해 보았을 때(실제 DDS포맷 용량 그대로 비디오메모리에 올릴 수 있습니다)

DDS의 장점은 손실압축이지만, 일반 포맷에 비해 상대적으로 비디오메모리를 아낄 수 있고, 많은 개수의 텍스춰, 큰 크기의 텍스춰를 낮은 코스트로 사용할 수 있을 것..만 같습니다. 정확한건 벤치마킹을 해봐야 겠죠. DDS의 압축 특성상 사용해야 할 곳은 색들이 고르게 분포된 텍스춰일 것이고요.. 가장 좋은 예로는 지형 텍스춰들일 것이고, MMORPG의 경우 캐릭터들은 대부분 3인칭에서 보므로, 줌인시의 퀄리티가 HDTV처럼 땀구멍까지 보이게 할 필요도 없으므로 캐릭터 텍스춰에도 적절히 쓸 수 있을 것 같습니다. myevan님이 지적해 주신 UI같은 경우, 매번 줌인(?)되서 보이는 텍스춰 인데다가, DDS의 특성상 주위 픽셀에 따라 색이 많이 왜곡되고, width, height이 낮은 pixel의 텍스춰도 찍어야 되는 상황이 많으므로 DDS를 사용하지 않는 것이 좋겠네요..

자료를 좀 더 찾아보니, 처음에 S3사가 S3TC포맷을 Savage사에서 개발하자, 3DFX에서 FXT1라는
포맷을 만들었다고 합니다. 그러자 S3사가 이 포맷을 NVIDIA, ATI에게 라이센스 해줌과 동시에 DX에서 공식적으로 지원하게 되었답니다. S3TC와 FXT1에 대한 URL이기는 하지만, 퀄리티가 어떻게 나빠지나에 대해 참고가 될 것 입니다.
http://www.digit-life.co.../articles/reviews3tcfxt1/

September, 2026
 12345
6789101112
13141516171819
20212223242526
27282930 

오늘의 실패는 지난날의 허비한 시간들의 복수다(나폴레옹)

책갈피_Network
RecentChangesMacro
BlogChangesMacro
메모장_좋은테스터가되기위한요건
last modified 2009-06-01 08:34:06
고치기|찾기|쪽 지우기|비슷한 쪽 Valid XHTML 1.0! Valid CSS! powerd by MoniWiki
0.0675 sec