Featured image of post 게임 기획자를 위한 3D 게임 그래픽스

게임 기획자를 위한 3D 게임 그래픽스

1편. 색상과 파일 포맷

… 회사에서 스펙 강의를 했더니 용어를 못알아듣는 기획자들이 속출.
어쩔 수 없이 더 고난이도의 강의를 위해서는 일단 기초부터 가르쳐야겠길래 만들어 봤습니다.
가능하면 매주 조금씩 정리해서 발표할 생각입니다.
(… 사실은 옛날에 쓴 원고들에게서 뜯어서 붙여넣기 한 거지만)
사실 이런걸 정리해놓은 책이 없더군요. 기획자용 책 만들때 넣으면 좋겠다고 생각이 됩니다만.
언젠가 기회가 오겠죠.

칼라와 Bit 수의 관계

아무리 컴퓨터가 빨라지고, 인터넷 라인이 빛의 속도를 따라잡고, 그래픽 카드에 수냉식 쿨러가 기본으로 장착된다 하더라도 게임이라면 가능한 한 용량을 줄여서 빠르고 안정된 속도를 목표로 해야 합니다.

xml:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” / 

그림의 용량이 크다는 것은, 곧 그 그림을 로딩하기 위한 메모리를 소비해야 한다는 것이고, 당연하게도 용량이 작으면 작을수록 더 많은 그림을 로딩할 수 있으니, 할 수만 있다면 백만 대군이라도 화면상에 표시할 수 있겠죠.

기본적인 전제는 ‘큰 이미지는 용량이 크다’입니다. 너무나도 상식적이지요.

이것은 상식적이니, 일단 더 이상 얘기하지 않겠습니다.

 

그럼 여기에서는, 비트맵 이미지의 칼라에 따른 용량차이에 대해 알아보도록 하겠습니다.

 

우선 간단하게 생각해 보겠습니다.

적은 색을 이용해서 그린 그림은, 많은 색으로 이루어져 있는 그림과 크기도 같은데, 용량이 적습니다. 이유는 무엇일까요?

*사실, 위 표현은 정확하지 않습니다. 칼라와 흑백 그림이라고 하더라도, 같은 비트수로 저장하면 용량이 저렇게 차이나지는 않거든요. 간단하게 얘를 들자면, 버스에 40명을 태우고 가는 것이든, 2명을 태우고 가는 것이든, 고속도로 톨게이트비는 똑같이 받지 않습니까?

2명이 갈 때에는 소형 경차에 타고 가야 고속도로 톨게이트 비용이 싸듯이, 적은 색상을 사용하려면 적은 비트수로 저장해야만 하지요. 즉 색상이 적다는 것은, 비트 수가 적다는 얘기로 말해야 정확합니다.

비트 수가 동일하다면, 색상이 적어도 용량은 거의 동일합니다.

그리고 실제로 왼쪽 그림은 16비트이고, 오른쪽 그림은 4비트입니다.

그것은 한 픽셀을 표시할 때 , 단지 두 가지의 색상만 구분하면 되기 때문입니다.

컴퓨터는 여러분이 익히 아시듯, 0과 1이라는 숫자만으로 모든 데이터가 구성되어 있지요.

즉. 흑백 이미지라면, 컴퓨터는 0과 1 이라는 두 숫자만으로 모든 색을 표현할 수 있는 것입니다. 초기 게임인 퐁(Pong)과 같은 게임에서 주로 볼 수 있는 표현 방식이지요

그러다가 흑백에도 4가지의 색상을 표현할 수 있게 됩니다.

검은색. 조금 진한 회색. 많이 연한 회색. 흰색.

이렇게 되면 데이터는 어떻게 될까요?

어떤 색이 어떤 코드인지는 정확치 않아도, 00 , 01, 10, 11 이 네 가지 코드라면 4가지 색상을 표현할 수 있을 겁니다. 용량이 어떻게 되었나요? 두 배로 늘었죠?

물론 여기서부터는 꼭 회색이 아닌 붉은 색이나, 파란 색을 써도 상관 없었습니다.

중요한 것은 색의 숫자이지, 색상이 아니거든요.

그리고 8비트 칼라까지 나오게 되면 어떻게 되는 걸까요?

한 픽셀의 색상값을 0과 1로 표현하기 위해서 8자리의 숫자가 필요하게 된 것입니다. 00000000 부터 11111111 까지의 숫자로 말입니다.

모두 몇 가지의 조합이 나올 수 있을까요? 한번 계산해 봅시다.

2의 8승 = 256가지 조합이 나옵니다. 드디어 볼 만한 칼라 화면의 게임을 만들 수 있게 된 것이죠. 초기의 퐁과 같은 1비트 칼라에 비하면 한 픽셀을 찍기 위해 8배의 용량이 필요했습니다만, 어쨌건 흑백에서 이제는 제대로 된 칼라 게임을 볼 수 있게 되었습니다.

<스타크래프트의 팔레트>

* 팔레트란?

  • 256이라는 숫자만 나온다고 해서 아무것도 이루어지지 않습니다. 여기서 256개의 숫자란것은 색상값의 의미가 아닙니다. 색상 테이블의 ‘위치값’ 이지요. 즉 따로 색상 테이블이 존재하고, 거기에서 몇 번째 색이냐는 위치값일 뿐입니다. 즉 256이라는 숫자는 단순히 인덱스 - 목차 - 일 뿐이고, 실제 색상값의 테이블은 따로 존재합니다 .그리고 그 테이블을 우리는 ‘팔레트’ 라고 부릅니다.

그렇지만 아무리 256 색이라도, 세상의 모든 색을 표현해 내기에는 턱없이 부족한 색상이었습니다. 부드러운 그라디에이션은 꿈꿀수도 없었고,

디더링이라고 하는 기술로 없는 색을 표현해 내기도 했었지요.

* 디더링

그리고 물론 지금의 컴퓨터는 더 높은 색상을 표현해 낼 수 있게 되었고, 16비트를 거쳐 24비트 , 32비트의 칼라를 표현할 수 있게 되었습니다. 물론 용량은 점점 더 늘어났지만 말입니다.

16비트 이상의 칼라 표현 방식

16비트 이상부터는 칼라의 표현 방식이 조금 달라지게 됩니다. 16비트 이상부터는 칼라를 표현하기 위해 R,G,B를 따로 만들어 조합하는 방식을 따르게 됩니다. 더이상 인덱스 칼라 방식이 아닌, 실제 칼라 조합방식이 된거죠.
16비트에서 사용하는 조합은 R5G6B5 로 표현 가능하며, 이것은 R(레드) 가 5비트, G(그린)가 6비트 - 사람 눈이 그린색에 민감하답니다 - B(블루) 색이 5비트로 표현한다는 뜻입니다.
때문에 16비트의 조합은 완벽히 자연스럽지 않습니다. 그래서 16비트 칼라 이미지의 그라디에이션은 다음과 같이 줄무늬가 나타나게 됩니다. (복잡한 이미지라면 눈에 띄진 않겠습니다만)
이렇게 해서 조합할 수 있는 최대 색상은 (32*64*32=65,536) 칼라입니다.

<16비트 칼라의 그라디에이션 표현>

그래서 24비트 칼라에서는 R8G8B8이 되면서 표현할 수 있는 칼라가 비약적으로 늘어나게 되고, (256*256*256 =4,294,967,296)
때문에 이 칼라를 ‘트루칼라’ 라고 불렀습니다.
<24비트 칼라의 그라디에이션 표현>

32비트 칼라의 출현

24비트로 사실상 거의 모든 색을 표현할 수 있게 되었습니다만, 여기에 추가적으로 ‘투명도’ 라고 하는 수치가 추가되었습니다.

게임에서 주로 사용하는 파일 포맷

BMP : 윈도우와 OS/2에서 기본으로 사용하는 그래픽 포맷으로, 전혀 압축하지 않기 때문에 파일의 용량이 무척 크다는 단점이 있지만, 손실이 전혀 없고 프로그래머가 처리, 사용하기 단순하기 때문에 프로그래머의 학습용으로 사용되거나, 아주 간혹 게임 데이터에서도 사용될 때도 있다.

TGA : 트루비젼사의 타가 비디오 보드를 위하여 고안된 파일 포맷으로, 24비트의 칼라를 지원하고 32비트로 알파 채널까지 포함하는 파일 포맷이다. 각종 그래픽 툴 또는 게임에서 즐겨 사용되며, 게임 텍스쳐, 동영상이나 고해상도 이미지용으로도 많이 사용되는 비 손실 포맷이다. 텍스쳐의 원본 포맷으로 사용되곤 한다.

PSD: 어도비의 포토샵 전용 파일포맷으로, 각종 레이어, 채널, 패스 등 다량의 정보를 저장할 수 있어 작업의 백업용으로 중요한 포맷이다. 물론 아도브 제품군 이외에 다른 프로그램에서 사용할 수 없고 데이터가 무척 크기 때문에 실제 데이터로 사용되기는 힘들다.

PNG : GIF처럼 색상수를 줄여 압축하는 방식을 사용하나 1600만 칼라까지 사용가능하고, 그 효율이 높아 웹에서도 즐겨 사용되는 파일 포맷이다. 알파채널까지 사용가능하기 때문에 최근에 3d 게임의 텍스쳐용으로 많이 사용되고 있는 파일포맷이다.

DDS : 3D 게임에서 널리 사용되는 손실 압축 파일 포맷으로, 3D 게임 전용으로 사용되다시피 하기 때문에 게임을 위한 옵션등이 많이 제공된다.

DDS File Format
현재 3D 게임에서 Texture를 제작하기 위해 가장 많이 사용되는 그래픽 File Format입니다. DDS는 DirectX의 Texture Format과 일대일로 대응하는 File Format으로, 손실압축방식을 선택할 수 있기 때문에 Texture의 용량을 상당히 절약할 수 있으면서 알파 채널도 지원하고 다양한 옵션을 가지고 있으며, DirectX를 지원하는 모든 비디오 카드에서 굉장히 빠르게 사용 가능한 File Format이기 때문에 3D 게임에서 자주 사용되는 File Format입니다.
또한, 환경을 위한 큐브맵도 생성 가능합니다.

* 큐브맵

3D 게임에서 자주 쓰이는 File Format은 이외에도 PNG나 TGA가 있습니다.


dds File은 여러 옵션이 있습니다. 그 중 많이 쓰이는 옵션에 대해 설명하면 다음과 같습니다.

Save format : 여러 옵션의 Pixel Format이 있습니다. 그 중 많이 사용되는 손실압축 Pixel Format은 아래와 같습니다.

  1. DXT1 RGB(No Alpha) : 알파채널이 없고 이미지는 4단계로 보간됩니다. R4G4B4
  2. DXT1 ARGB(1bit alpha) : 알파채널이 있지만 1비트만 사용하고 칼라는 3단계로 보간되므로 DXT1 RGB보다 약간 퀄리티가 떨어집니다. A1R3G3B3
  3. DXT3 ARGB(Explicit Alpha) : 칼라는 4단계로 보간되고 알파는 4비트로 표현합니다. A4R4G4B4
  4. DXT5 ARGB(Interpolated) : 칼라는 4단계로 보간되고 알파는 8단계로 보간되므로 품질이 가장 좋습니다.A8R4G4B4

* 나머지 옵션들은 비압축 포맷입니다.

Mipmap Generation : 밉맵(Mip Map)의 생성 개수를 정의합니다.
밉맵(Mip Map)이란 원거리로 갈수록 작은 사이즈의 Texture를 적용하는 Texture 방식을 의미합니다.
개수만 정해 놓으면 자동으로 생성되고, 자동으로 사용되므로 크게 신경쓸 필요가 없습니다. 단 용량은 늘어나므로 밉맵(Mip Map)이 필요 없는 Texture는 이 옵션을 꺼 주는 것이 좋습니다.
밉맵이 필요 없는 텍스쳐 : UI , 이펙트 등

<밉맵(Mip Map)의 예. 점점 1/4 사이즈의 작아지는 Texture가 추가로 붙어 있음을 알 수 있다.>

Texture의 사이즈
3d 게임에서는 Texture의 사이즈를 2의 배수로 만들어 줘야 합니다.
이것은 비디오 카드에서 2의 배수 사이즈의 Texture를 가장 빨리 처리할 수 있기 때문입니다.
2의 배수의 Texture와 DDS File Format은, 게임 그래픽에서 가장 중요한 Texture 사이즈 형식입니다.

Hugo로 만듦
JimmyStack 테마 사용 중