[GpGiki 대문으로]

2 D


[초보자 Faq] - 게임 프로그래밍 - 2D


목차

차례 [+]

Q) 해상도(resolution)란?

 2001/03/14 01:38, [파연|Pion]

보통 "해상도"라고 하면 공간해상도와 시간해상도로 나뉩니다. 게임이나 그래픽 등에서는 둘 중 공간해상도를 말하는 것이고요, 보통 모니터 화면에서 점과 점 사이의 거리(도트피치)로 나타냅니다.

또한 한 화면의 픽셀수로써 공간해상도를 나타내기도 합니다. 표준으로는 640*480, 800*600, 1024*768 등이 사용됩니다. 여담으로 애플II에는 297*191이 사용되었습니다. (맞나요? 기억이 가물가물 ^^)

엄밀하게 말하면 해상도와는 다른 것이지만, 해상도를 말할 때 픽셀당 칼라 수를 같이 말합니다. 컴퓨터에서 픽셀은 메모리 용량과 1:1 대응이 되기 때문에, 칼라 수가 크면 메모리도 많이 소요되게 됩니다. 보통의 8비트 칼라, 16비트 칼라하는 식으로 말하는 것은 한 픽셀이 몇개의 비트로 표현되나 하는 것입니다. 8비트 칼라라면 한 픽셀이 8비트로 이뤄진다는 얘기이고, 2의 8승은 256이기 때문에 총 256 칼라를 쓸 수 있다는 말이 됩니다.

Q) 인간이 지각할 수 있는 해상도의 한계는?

 2001/03/26 09:21, [파연|Pion]

인간의 눈은 호의 1/2분 정도를 구분할 수 있다고 합니다. 이는 1미터의 거리에서 약 0.2mm 정도가 됩니다. 즉, 서로간의 거리가 0.2mm 보다 가까운 평행한 두 실선은 1미터 이상의 거리에서 하나의 실선으로 보인다는 것입니다.

Q) 인간이 지각할 수 있는 총 칼라 수는?

 2001/03/26 09:21, [파연|Pion]

이 질문에 대한 답변을 위해선 두가지 실험의 결과를 얘기해야합니다.

첫번째 실험은 밝기에 대한 실험입니다.

인간을 대상으로, 밝기가 다른 두 회색으로 이루어진 색상표를 주고 "밝기차이가 겨우 구분이 가능한" 것을 골라내게 하는 실험입니다. 사람에 따라 약간의 차이는 있지만, 평균적으로 인간은 8비트정도의 밝기 구분이 가능하다는 결론을 얻었다고합니다. (정확히 말하면 7.2... 비트라는군요. )

두번째 실험은 색 조합에 관한 실험입니다. 역시 대상은 인간입니다.

이 실험을 통해서, 세개의 다른 색상(primary color)의 조합으로 인간이 지각 가능한 거의 모든 색상들을 조합해낼 수 있다는 결론을 이끌어냈다고 합니다. (이를 Trichromacy의 원리라고 합니다.)

인간이 지각할 수 있는 색상은 세가지 다른 색상의 조합으로 만들어 낼 수 있고, 각각의 색은 또한 8비트의 밝기가 가능하기 때문에, 결론적으로 24비트의 칼라만 있으면 인간이 지각할 수 있는 모든 색상을 조합해낼 수 있습니다. 흔히 쓰는 RGB 칼라는 이 같은 배경에 의해 나오게 된 것입니다.

하지만 RGB 칼라로 표현하지 못하는 색도 있습니다. Red 칼라가 음의 값을 가져야하는 색이 있기 때문입니다. 이는 오늘날의 칼라 표현수단(모니터)의 한계라고 할 수 있습니다.

Q) 256칼라(8비트 칼라)모드에 대해 설명해 주세요.

 2001/3/25/천영호

과거 3D카드란게 뭔지도 모를시절의 그래픽 카드드의 비디오 메모리는 많으면 1메가 정도였습니다. 그러다보니, 이거가지고는 한화면을 출력하기도 벅찬 상태가 되었죠. 그래서 1바이트로 1픽셀을 표현하기 위한 기법으로 인텍스컬러를 사용하게 되었죠. 즉 R,G,B요소는 각각 1바이트씩, 256단계가 있구요. 이중 256개만 뽑아 인덱스(흔히 파레트라고 합니다.)를 만든다음 각 픽셀을 1도트로 표시하는 것이죠. 그렇게 해서 만들어진 모드입니다.

스타, 디아블로1, 등의 게임은 256칼라 게임이지만, 파레트의 사용을 잘해 아주 뛰어난 화질을 자랑하죠. 아직도 몇몇 게임들은 속도를 위해 256칼라 모드를 사용합니다.

Q) 16비트 칼라모드에 대해 설명해 주세요.

 2001/3/25/천영호

이 모든 어떻게 보면 비정상적이라고 할수 있습니다. 8비트의 색상수를 극복하고 24비트의 화려함을 추구하지만, 속도도 보장받기 위한 모드이죠. 16비트 모드도 카드마다 약간씩 다른 모드를 사용합니다. 5:5:5모드와 5:6:5모드죠. 즉 24비트의 8:8:8의 비트를 조금씩 낮추어 16비트 모드를 구성하는 것이죠. 이 모드 역시 파레트 개념은 없습니다. 요즘 게임(2D든 3D든)에 가장 많이 사용되는 모드입니다.

Q) 24비트 칼라와 32비트 칼라에 대해 설명해 주세요.

 2001/3/25/천영호

24비트 모드는 별설명할게 없이 각 요소(R,G,B)가 1바이트씩 모여 만들어진 모드입니다.(흔히 트루칼라모드라고 하죠.) 파레트란 개념은 당연히 없고, 모든 색을 마음대로 쓸수 있는 모드이지요.

32비트 모드는 이에 알파값이 1바이트 들어간 개념입니다. 즉 24비트의 트루칼라에 각 단계의 투명도(알파값)이 추가된 모드이죠. 이 모드는 실제 2D에서 쓰는 건 못봤습니다. 보통 3D가속카드가 지원하는 모드 중 하나이죠.

Q) 스프라이트(sprite)란?

 2001/3/25/천영호

화면상에 모든 움직이는 그림은 다 '스프라이트'로 간주 됩니다. 과거 김종찬님의 저서 '게임을 만들자'란 책에서는 스프라이트와 이미지를 컬러키(투명칼라)의 유무로 판단하였습니다.

 2001/5/20/김영환

컴퓨터 내부에서 그림데이터는 언제나 사각형으로 처리되기 때문에 캐릭터 등을 배경과 어울리게 출력하는데에 문제가 생깁니다. 그래서 사각형 내부에 실제 캐릭터를 그리고 남은 부분을 투명처리(그림을 출력할 때 이 색값을 찍지 않는 것)함으로써 사각형이 아닌 자연스러운 배경과의 어울림을 가능케 합니다. 이러한 기법을 사용하여 캐릭터들의 애니메이션을 구현하는데, 애니메이션을 위해 그려진 한장한장의 그림들을 스프라이트라 흔히 말합니다. (꼭 움직이는 그림의 낱장이 아니더라도,투명색을 가진 그림이면 포함시킵니다.)

Q) 스프라이트 형식에는 어떤 것들이 있습니까?

 2001/05/28 23:23 [붉은미르|dragoon]

어떤 정해진 형태가 없습니다. 일반적으로 국내에서 많이 사용하는 방법은 여기에도 소개되어있는 "투명색 압축 스프라이트"가 많이 사용됩니다.

Q) 투명색 압축 스프라이트란?

 2001/04/12 [아노아|Anoa]

연속돼는 투명색을 투명색 갯수 식으로 줄이는 방법입니다. 스프라이트 데이터는 구조상 투명색이 많기 때문에 꽤나 효율을 얻을수 있습니다. 직접 사용하실 땐 라인단위로 끈어주는 방식으로 쓰시는 분도 있고 그냥 쓰시는 분들도 있습니다. 스프라이트 용량을 줄이고 속도를 늘리기 위해서 쓰던 방식이였으나 속도 부분은 dx 하드웨어 가속으로 인해 경쟁력이 약해졌습니다;;..

Q) 애니매이션(animation)의 원리는?

 2001/03/14 01:38, [파연|Pion]

약간씩 서로 다른 그림을 번갈아 보여주면, 잔상효과 때문에 마치 그림이 움직이는 것처럼 보이게 됩니다. 애니메이션은 그러한 원리를 이용한 것입니다.

먼저 그림을 그리고, 그 그림을 지운 후 그 다음 동작의 그림을 그리고, 그 그림을 지우고 또 그 다음 동작의 그림을 그리고 하는 식입니다. 그림을 지우고 그리는 속도가 충분히 빠르면 그림은 움직이게 보이게 됩니다.

Q) 더블버퍼링(double buffering)이란?

 2001/03/14 01:38, [파연|Pion]

그림을 그리고, 지우고, 또 그리는 일련의 방법에는 약간의 문제점이 있습니다. 그림을 그릴 때 처음 시작한 부분과 마지막에 그린 부분이 화면에 남아있는 시간이 다르다는 것이죠. 마지막에 그린 부분은 얼마 되지도 않아서 바로 지워지게 되므로, 전체적으로 그림은 깜박이는 것처럼 보이게 됩니다. 이것을 해결하는 방법이 더블 버퍼링입니다.

두 장의 페이지를 준비해서, 첫번째 장을 보이게 해놓고 보이지 않는 두 번째 장에 그림을 그린 후 그림이 다 그려지면 첫번째 장과 두번째 장을 재빨리 바꿔치기합니다. 그러면 이제는 첫번째 장이 보이지 않고 두번째 장이 보이게 되겠죠. 그리고 나서 첫번째 장에 그려진 그림을 지운 후 첫번째 장에 그림을 그립니다. 그리고 나서 다시 첫번째 장과 두번째 장을 바꿔치기합니다. 즉 사용자는 그림이 그려지는 과정은 보지 못하고 그려진 결과만을 보게 되는 것입니다.

이 때 페이지를 바꾸는 것을 '페이지 플립(flip)' 혹은 그냥 '플립'이라고 하고, 페이지를 바꾸는 동작을 '플리핑한다'라고 얘기합니다. 또한 이런 방법으로 애니메이션시키는 기법을 더블버퍼링이라고 합니다.

Q) 트리플버퍼링(triple buffering)이란?

 2001/03/14 01:38, [파연|Pion]

하드웨어적인 이유 때문에, 아무때나 두장의 그림을 바꿔치기 할 수 있는 것은 아닙니다. 모니터의 스캔이 한 싸이클을 돌고난 직후에 플리핑이 가능한데, 그림을 그려놓고 모니터의 스캔 싸이클을 기다리는 것은 아까운 애니메이션 시간의 낭비입니다.

이 문제를 해결하기 위해 이번에는 세장의 페이지를 준비합니다. 첫번째 장을 보여지게 해놓고, 두번째 장에 그림을 그린 이후, 플리핑을 기다리지 않고 바로 세번째 페이지에 그리기 시작하는 것이죠.

더블버퍼링에 비하면 더욱 부드러운 애니메이션이 가능하다는 장점이있고, 반면 메모리를 많이 차지한다는 단점이 있습니다.

Q) 초당 프레임 수(frame per second, fps) 란?

 2001/03/14 01:38, [파연|Pion]

더블버퍼링(혹은 트리플버퍼링)이 얼마나 자주 일어나느냐 하는걸 나타내는 단위입니다. 1초동안 다른 그림(프레임, frame)이 몇번이나 사용자에게 보여지느냐 하는 걸 나타냅니다.

초당 프레임 수가 너무 작으면 애니메이션이 뚝뚝 끊어지게 보이게 됩니다. 반대로 초당 프레임 수가 크면 부드러운 애니메이션이 되겠죠.

그러므로 부드러운 애니메이션을 위해서는 초당 프레임 수를 최대한 크게 해야하고, 그러기 위해서는 한 페이지를 그리는데 걸리는 시간을 최소화시켜야합니다. 좋은 알고리즘은 필수겠지요..

Q) 인간이 지각할 수 있는 초당 프레임 수는?

 2001/03/14 01:38, [파연|Pion]

대략 초당 120 프레임정도라고 합니다. 애니메이션에 있어서 그 이상 초당 프레임 수를 크게하려고 하는것은 무의미하다는 말이죠. (대상이 인간인 이상엔 말이죠)

참고로 보통의 영화의 경우 초당 24 프레임이라고 하고, 찰리 채플린 영화의 경우 초당 16 프레임이라고합니다. (약간 끊겨 보이죠)

Q) 프레임스키핑(frame skipping)이란?

 2001/03/14 01:38, [파연|Pion]

컴퓨터에 따라 그 성능이 천차만별이기 때문에, 빠른 컴퓨터에서는 제대로 나오는 애니메이션이 느린 컴퓨터에선 너무 느려서 현실성이 없어지는 경우가 생깁니다. 이 경우 여러개의 준비된 그림 중에서 일부는 건너뛰고 그림을 그립니다. 결과적으로 좀 끊겨 보이긴 하지만, 컴퓨터에 상관없이 일정한 속도를 유지할 수 있습니다. 그림을 건너뛴다는 의미로 프레임스키핑이란 용어를 사용합니다.

시간 간격 조절기 참고


제일 위로
최종 수정 일시: 03월 28일(2004년) 08:55 PM 편집 | 정보 | 차이 | 비슷한 페이지 DebugInfo
유용한 페이지들: 분류 분류 | 자유로운 연습장 SandBox | 무작위 페이지들 RandomPages | 인기있는 페이지들 MostPopular