반응형


포샵에서 DDS파일 만들기  PHOTOSHOP강좌 

2006/09/11 03:31

복사http://blog.naver.com/enuom/30008624015

DDS 포맷으로 저장할 일이 생겨서 하루종일 뒤적이고 물어가면서 얻은 팁인데 3D MMORPG의 경우 대다수의 개발사에서 이미지포맷으로 DDS를 사용하고 있으니 알아두면 좋을것 같아 정리해서 올립니다.

 

DDS는 DirectX(이하 DX)의 Texture 포맷과 일대일로 대응하는 파일 포맷으로 손실압축방식이라 다른 포맷에 비해서 상대적으로 비디오메모리를 아낄 수 있고, 많은 갯수의 텍스쳐, 큰 크기의 텍스쳐를 적은 용량으로 해결할 수 있는데다 DDS포맷 용량 그대로 비디오메모리에 올릴 수 있어 높은 퀄리티의 화면을 높은 프레임으로 구현하기가 용이합니다. 현재는 DDS가 거의 모든 그래픽카드에서 가속을 지원한다고 합니다.

 

DDS의 태생에 대해 잠깐 알아두자면, 처음에 S3TC포맷을 Savage사에서 개발하자, 3DFX에서 FXT1라는 포맷을 만들었다고 합니다. 그러자 S3사가 이 포맷을 NVIDIA, ATI에게 라이센스 해줌과 동시에 DX에서 공식적으로 지원하게 되었답니다.

아래 Nvidia 사이트에 가면 포토샵에서 DDS를 컨트롤할 수 있는 플러그인을 다운받을 수 있습니다.

 

http://developer.nvidia.com/object/photoshop_dds_plugins.html 

 

굳이 이 프로그램을 설치하지 않더라도 이 글에 첨부한 파일(dds.8bi)을 포토샵이 설치된 폴더 아래에 있는 Plug-Ins/Import-Export 폴더에 넣어주시면 됩니다.

 

자, 준비가 됐으면 시작해 보겠습니다.

예제 이미지로 얼룩말 무늬 이미지를 갖고 설명을 드리겠습니다.

1.우선 포토샵에서 얼룩말 이미지를 dds로 저장해 보겠습니다.

Save as 에서 파일포맷 dds(*.dds)를 선택하시면 아래와 같은 창이 나타납니다.


2. 창의 각 항목중 중요한 두가지 항목을 설명드리겠습니다.

 

Save Format DDS의 픽셀포맷을 정하는 것입니다.

DXT1, DXT2, DXT3, DXT5, 4:4:4:4 ARGB, 1:5:5:5 ARGB 등등 여러가지 포맷중 하나를 선택해야 합니다.

3. 각각의 선택기준은 상황에 따라 다릅니다만 DXTn 포맷만이 손실압축이고 그 외의 포맷은 비손실  압축이라 DXTn 포맷 외에는 쓸 일이 거의 없어 설명은 하지 않겠습니다.

 

1. DXT1 RGB(No Alpha) : 알파채널이 없는 이미지일 경우 (칼라는 4단계로 보간) 
2. DXT1 ARGB(1bit alpha) : 알파채널이 있지만 alpha test의 용도로만 쓰는 경우(칼라가 3단계로 보간되므로 DXT1 RGB보다 약간 퀄리티가 떨어짐) 
3. DXT3 ARGB(Explicit Alpha) : 알파채널이 있는 이미지 (칼라는 4단계로 보간되고 알파는 4비트로 표현) 
4. DXT5 ARGB(Interpolated) : 알파채널이 그라데이션 스타일인 경우 DXT5를 쓴다. (칼라는 4단계로 보간되고 알파는 8단계로 보간되므로 품질이 가장 좋음) 

 

그외의 포맷은 모르셔도 무방할것 같습니다. 어떤것이냐고 간단히 말씀드리면 4:4:4:4 ARGB는 ARGB(Alpha, Red, Green, Blue)의 심도가 각각 4bit란 얘기입니다. 1:5:5:5 는 Alpha=1bit(알파채널이 있다,없다만 표시), Red=5bit, Green=5bit, Blue=5bit 란 얘기지요.

 

한가지 주의할 점은 DXTn 포맷으로 저장하려는 이미지의 사이즈는 2의 승수가 되어야 합니다(2, 4, 8, 16, 32, 64, 128, 256, 512, 1024...)

2의 승수가 아니면 'DXT is supported for power 2 only' 란 멧세지가 나오면서 Save 버튼이 비활성화됩니다.

 

UI 이미지 같은 경우는 DDS 포맷으로 쓰는것은 심각하게 고려해야 합니다. 앞서 설명드렸듯이 손실압축이라 이미지가 상당히 깨질 수 있기 때문입니다. (슈마에서 렌즈온라인 만들때 UI 이미지를 DDS로 변환했더니 이미지가 아주 작살이 나더군요;;)

알파채널이 있는 UI 이미지는 PNG나 TGA를 쓰는것이 현명하다고 판단됩니다.

 

픽셀포맷 지정옵션 밑에 있는것이 렌더링 방식을 지정하는 옵션인데요. 2D texture, Cube Map, Volume Texture 가 있습니다.


 

4. 각각의 특성을 폴리곤에 맵핑하는 방법을 예로 들어 설명을 드리자면

 

1. 2D Texture : 각 폴리곤들의 texture coordinate(UV)값을 이용해서 입히는 방식(현재 게임 모델링 데이터에 맵핑하는 방식)

2. Cube Map : UV없이 폴리곤의 면적에 따라 맵핑하는 방식

3. Volume Texture : 좀 더 복잡한 굴곡이 있는 폴리곤에 UV없이 면적에 맵핑하는 방식

 

현재 게임개발에선 2D Texture 외엔 쓰지 않는다고 하니 나머지는 중요치 않습니다.

 

MIPMap Generation MIPMap의 생성갯수를 정합니다.(0~13)

MIPMap 은 같은 그림인데 다른 사이즈를 같이 지닌 형태를 말합니다. 한 이미지 파일에 여러 사이즈를 만들어 놓고 맵핑하고자 하는 폴리곤에 가장 근사한 크기를 갖는 밉맵을 이용하여 텍스쳐맵핑을 수행하는 것을 MIP Mapping이라고 하는거죠.

예를 들면 LOD 같은 것인데요, 게임배경으로 쓰인 돌이 멀리 있을때는 작은 사이즈의 이미지를 맵핑하고 가까이 왔을 때는 큰 이미지를 골라 맵핑하는 방법을 쓰는겁니다. 그렇게 되면 퀄리티의 큰 저하없이 좋은 퍼포먼스를 낼 수 있겠지요.

MIPMap의 갯수를 6으로 하여 미리보기를 해 보겠습니다.



5. 원래 사이즈에  1/4 씩 작아진 사이즈 5개가 생성된 것을 보실 수 있습니다.

이 중 제일 작은 사이즈는 굉장히 멀리 있는 오브젝트에 적용되고 그 오브젝트가 가까이 다가올수록 그 거리에 따라 자동으로 적절한 사이즈의 이미지를 골라 맵핑시키는 방식을 쓰는 겁니다. MIPMap의 갯수가 적으면 멀리 있던 이미지가 가까이 올때 흐리던 이미지가 갑자기 팍 선명해져서 어색할 수 있으니 MIPMap의 갯수는 보통은 5~8개 정도로 합니다만 상황에 따라 적절히 선택하시면 되겠습니다.

 

이정도에서 저장해 주시면 되겠습니다. 저장뿐 아니라 dds로 저장된 파일도 포토샵에서 불러와 편집이 됩니다.

 

나름대로 자세히 정리했는데 더 궁금하신 점은 댓글을 달아 주시면 성심껏 답변드리겠습니다.

 

원본위치 : http://cafe.naver.com/ui.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=613

에 dx에서 많이 쓰는 dds포맷에 관한 자료가 있어서 퍼왔습니다.쓰신분은 세거이(seguy)님..

 

 

DDS에 대한 좋은 설명 요약 



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는 밉맵의 각 레벨의 서피스를 묶어서 하나의 파일로 저장할 수도 있고, 심지어 Cube 텍스쳐나 Volume 텍스쳐로도 저장이 가능합니다. 이런 면들을 볼 때 DDS 포맷의 진짜 목적은 DirectX에서 쓰는 텍스쳐와 같은 포맷을 사용함으로써, 텍스쳐 생성 후 파일에서 로딩한 데이터를 텍스쳐의 서피스로 복사해서 넣을 때, 압축해제나 픽셀포맷 변환없이 바로 사용할 수 있다는 게 아닐까 생각됩니다. 예를 들어, TGA 24bpp 이미지는 R8G8B8( B8G8R8 ) 이지만 오늘날 대부분의 그래픽 카드에서는 DirectX에서 이에 해당하는 D3DFMT_R8G8B8 포맷을 잘 지원하지 않습니다. 
대신 대부분 D3DFMT_X8R8G8B8 포맷을 지원하죠. 따라서, 알파 없는 TGA 파일을 사용한다면 항상 모든 픽셀에 대해서 포맷 변환 작업이 필요하게 됩니다. 이때 DDS로 X8R8G8B8 포맷을 만들어서 사용한다면 그런 변환 작업이 필요 없어집니다. 

그럼에도 불구하고 대부분의 개발자들이 JPG나 TGA 파일을 여전히 선호하는 결정적인 이유는 Preview(미리보기)가 가능하기 때문인 거 같습니다. ACDSee나 알씨 같은 이미지 뷰어에서 이미지를 미리 볼 수 없다는 것은 상당히 답답한 일이죠. ( Deep Exploration 같은 좋은 툴이 DDS 포맷을 지원하기는 합니다만.) 또, 포토샵 같은 그래픽툴에서 바로 쓸 수 없어 번거롭죠. (물론, 플러그인 등을 깔면 가능합니다.) 

PC 같이 다양한 하드웨어가 상존하는 플랫폼에서는 어쩌면 픽셀 포맷 변환이라는 것이 필수 불가결한 일 일지도 모릅니다. 적당한 픽셀 포맷을 미리 지정해서 DDS 포맷으로 저장했다고 하더라도, 이를 지원하지 않는 하드웨어를 가진 일부 사용자들은 결국 픽셀변환이 필요하기 때문이죠. 때로는 더 나은 성능을 위해서 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번까지 가는 경우는 생각보다 드물었다고 합니다. 



그외 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.com/articles/reviews3tcfxt1/

반응형

+ Recent posts