최근에 저희 회사에서는 신입 프로그래머를 뽑았습니다. 자그마하지만, 게임개발팀의 팀장을 맡고 있다보니 신입 프로그래머를 뽑을 때 무엇을 봐야 하나를 고민하게 되죠. 면접을 보면 신입은 누구나 "아직 부족하지만 열심히 하겠습니다"라고 합니다만, 열심히 하고 싶은 것과 열심히 할 수 있는 것을, 회사 입장에서는 구분할 수 있어야 합니다.

그 사람의 의욕과 능력을 구분하기 위해서, 저희는 면접때 오랄 테스트를 보기로 했습니다. 문항을 대략적으로 7~8개의 카테고리로 나누고, 면접자가 자신있는 분야를 선택하라고 했죠. 떨어뜨리기 위한 시험이 아니라 그 사람이 뭘 할 수 있는가를 알아보기 위한 것이므로, 본인이 가장 잘할 수 있는 분야에 대해 물어보는 방향으로 정했습니다.

그 8개의 카테고리는 다음과 같습니다.
  • 시스템
  • 언어
  • 자료구조
  • 디자인패턴
  • 렌더링
  • 수학/물리
  • 게임로직
  • 네트웍

이는 게임을 만들기 위해서 필요한 대략적인 기초지식을 커버하며, 이 모든 것을 잘하는 사람을 요구하는 것이 아닙니다. 한가지라도 잘 알면 회사에서는 그에 해당하는 일을 맡기고 진행하면 되는 것이니까요. 단, 질문은 그 자리에서 당장 대답하거나 실제로 보여줄 수 있도록 명확해야 합니다. 그래야 평가가 가능하죠.

문항의 예를 들어보죠

  • 시스템 : 유니코드 문자열의 인코딩 종류를 알고 있는가?
  • 시스템 : 윈도우 동기화 객체의 종류를 알고 있는가?
  • 시스템 : 기본 메모리 할당 라이브러리의 문제점을 알고 있는가?
  • 언어 : 가상함수 테이블 메커니즘을 알고 있는가?
  • 언어 : 템플릿의 명시적 특수화와 부분 특수화를 알고 있는가?
  • 언어 : STL 펑터와 프리디케잇을 만들 수 있는가?
  • 자료구조 : 링크드 리스트를 슈도코드로 아웃라인을 짤 수 있는가?
  • 자료구조 : 주어진 코드의 시간복잡도를 Big-Oh 표기법으로 계산할 수 있는가?
  • 디자인패턴 : 널리 알려진 패턴(컴포짓,싱글톤 등)을 클래스 다이어그램으로 그릴 수 있는가?
  • 렌더링 : 그림자 렌더링 기법의 종류를 알고 있는가?
  • 렌더링 : 텍스쳐좌표 (0,0)인 스프라잇의 샘플링 오차를 설명할 수 있는가?
  • 수학/물리 : 가속도운동하는 물체의 위치를 시뮬레이션하는 적분 코드를 작성할 수 있는가?
  • 수학/물리 : 간단한 기하도형간의 충돌검출을 슈도코드로 짤 수 있는가?
  • 게임로직 : 간단한 게임의 게임스테이트 전이를 스테이트 다이어그램으로 그릴 수 있는가?
  • 게임로직 : 전형적 캐릭터의 스테이트 전이를 스테이트 다이어그램으로 그릴 수 있는가?
  • 네트웍 : 전형적 상황에서 오가는 간단한 패킷을 설계할 수 있는가?


대충 이정도입니다. 실제 준비한 문항은 위 목록의 약 2배가량입니다. 각 문항은 아무렇게나 뽑은 것처럼 보일지는 몰라도, 각 문항에서 알아보고자 의도하는 바가 있습니다. 그중에서도 "~~할 수 있는가?"로 되어 있는 문항은 화이트보드에 직접 해보라고 시킵니다. 하드해 보일 수도 있지만, 이 문항의 목적은 정답을 맞추는 것이 아닙니다. (물론 올바른 답을 내놓으면 더할나위 없지요) 그 사람이 이 분야에 어느정도 노력해 왔는지를 측정하여 앞으로 얼마나 노력할 수 있는지를 외삽하는 용도로 물어보는 것입니다.
제 입장에서는, 게임프로그래머란 이정도에는 관심을 가지고 있어야 일을 맡길 수 있다고 생각하는 쪽입니다.

'칼럼' 카테고리의 다른 글

이명박정부와 게임업계  (0) 2008.04.17
World Of Goo  (2) 2008.03.21
스톰윈드의 놀라운 비밀  (0) 2008.03.20

이번 인디 게임 페스티벌에서
기술과 기획부분에서 대상을 수상한 World Of Goo에 대해 소개해볼까 합니다.

이번 GDC2008 기술동향에서 개발자 이름을 듣기도 했고, World of Goo에 대해서도 한번쯤 소개하려고 했으니까요.

사용자 삽입 이미지


실제로 저런 이미지는 아닙니다. 간략하고 알기 쉽게 설명하기 위해 축약된 표현을 썼다고 해주세요. 트레일러는 이 홈페이지에서 보실수 있습니다.

동영상을 보시면 알겠지만 가장 비슷한 느낌의 게임이라면 로코로코 일겁니다. 뭔가 스물스물 거리는 슬라임들이 몰려다니는 점에서요.

여기서는 Goo 라고 부르는것 같습니다. 이 World of Goo를 개발하고 있는 Kyle Gabler 는 EA에서 일하다가 인디게임을 만들겠다고 때려친 모양입니다. 그래서 뭐 청소도 하고 알바도 하면서 게임을 만들고 있는데 IGF에서 수상도하고 이슈도 받아서 무척 고무적인것 같았습니다. EA안에서 게임을 개발하고 있는 다른 Kyle도 있다는데 그 이야기는 다음에 기회가 닿으면 :)

사용자 삽입 이미지
어쨌든 이 분이 EA를 때려치고 나와서 친구와 게임을 만드려는데 둘이서 게임을 만드는데는 아무래도 힘든게 있으니까 뭘 할수 있는가에 대해서 곰곰히 고민하다가. 자신들이 가장 잘 하는게 무어냐! 에서 물리 프로그래밍이라고 결론을 냈다고 그러더군요. 그래서 나온 게임이 Tower of Goo입니다.

Tower of Goo는 World of Goo의 원형처럼 보이는데 Goo들을 쌓아서 높이 높이 쌓고 쌓아서 높이 쌓는 것이 목표이죠.

게임이라고 부르기는 조금 애매합니다. 할 수 있는 것은 Goo의 탑이 쓰러지지 않게 조심조심 위로 향하는 정도 거든요. 그렇다고 남들이 해놓은 Goo 탑을 볼 수 있다던가 그런 서비스를 하는 것도 아니고, 얼마나 높이 쌓았는가에 대해서 랭킹을 매기는 것도 아닙니다. 그야말로 실험적인 게임이지요.

그래서 게임을 할 수 있는 곳도 Experimental Game Play Project란 곳입니다.

http://www.experimentalgameplay.com/game.php?g=17 이곳에서 Tower of Goo를 받아서 해보실수 있습니다.

사용자 삽입 이미지


어쨌든 뭔가 꾸물 꾸물 거리는 Goo들 클릭해서 누르면 근처의 Goo와 적당하게 축을 만들어서 고정됩니다. 그리고 계속 Goo들이 그 축들을 따라 움직이고 계속 Goo들을 사용해 늘려가는 거죠. 동영상으로 본 Wolrd of Goo는 이 Tower of Goo에서 여러가지 게임성을 추가한 퍼즐게임 처럼 보입니다. Goo의 구조물을 만들어서 길을 건넌다던가. 벽을 통과한다던가. 함정을 피한다던가 하는 퍼즐게임일 것 같습니다. 굉자히 지적으로 자극적인 게임이 될것 같습니다. 벌써 예약을 받고 있을 정도로.

사용자 삽입 이미지


이런식으로 Goo의 구조물을 쌓아서 넘어가는거죠. 물론 중력때문에 저렇게 구조물을 만들면 비틀어져서 떨어져버릴 것입니다만. 제가 그린거니까 상관없어요 :p 동영상을 보면 저런 플레이 외에도 다양한 퍼즐이 나올 것 같더군요.

이 World of Goo를 보면서 옛날에 잠시 푹 빠져서 했던 게임이 생각났습니다. 모름지기 시험때 이런것을 던져주면 정말정말 아름다운 구조물이 나오죠.

사용자 삽입 이미지


게임이라고 보기엔 좀 무리일지도 모르는 Bridge Builder 란 게임입니다. 지정된 포인트에 한정된 금액으로 다리를 만들어서 기차를 보내는 게임이죠. 게다가 어느정도 무게가 재료에 어떻게 분배되고 있는 가 같은 것도 보여주는 토목학도를 위한 게임입니다.

사실 저렇게 얼기설기한 그래픽의 게임일리는 없구요.

사용자 삽입 이미지
이런 뭐 적절한 그래픽의 게임입니다.

2001년에 나왔는데다가, 데모에 있는 홈페이지는 지금은 없어져서 이제 이걸 어떻게 구하나라고 생각했는데 검색해보니 여전히 다리를 사랑하는 사람들이 있더군요.

http://www.crypticsea.com/ 개발사의 홈페이지입니다. 이 곳에서 게임을 받으실수 있습니다.
http://www.bridgebuilder-game.com/ 이곳은 공식홈페이지입니다. 세계여러곳에서 만든 미친듯한 센스의 다리를 구경하실수 있을겁니다.

塵狼은 '소가 제일 낫군'하고 생각하고 월드 오브 워크래프(이하 WOW)를 시작한 유저입니다. 호드에 대해 엄청난 애정을 갖고 있지는 않지만 호드를 하면서 별 불편함을 못 느꼈고, 라이트한 성향으로 인하여, 아직 호드 컨텐츠도 모두 즐겨보지 못했기 때문에 얼라이언스로 플레이 해 본 적이 없습니다. 드레나이가 귀여워서 만들어 본 경험은 있군요. :)

여튼, 최근에 '인간' 마을인 스톰윈드를 분석해 오라는 특명을 받아 스톰윈드를 구경하고 있습니다.

...스톰윈드를 다녀오면 얼라에 대한 분노가 커진다는 이야기가 농담이 아니더군요.

- 디테일이 다르잖아! 호드는 남는 시간에 만들었냐?! 록타, 오가르는 미안해서 넣어주는 추임새지?!

라는 감상이었습니다. 이것이야말로 로우폴리곤의 향연!!

업무로 진행한 것이니 공개하면 다소 아까운 느낌도 있지만(아마 다른 회사의 수없이 많은 컨텐츠 기획자들이 이 작업을 한 번쯤은 했을 겁니다), 축약하여 일부만 소개해 볼까 합니다.

wow의 건축가들은 모두 같은 도면으로 건축을 하는 것인지, 스톰윈드 국왕령에 의해서 강력한 건축 제재가 있는 것인지 대부분의 건물이 동일하게 생겼습니다. 심지어 내부도 동일하지요!

개발자들은 물론 그 이유를 알고 있습니다. 실제로 게임 개발을 해 보면 놀라운 기획안을 내놓는 것 보다 필요한 그래픽 리소스를 제때 확보하는 것이 가장 어렵다는 걸 알게 됩니다. 그래픽팀의 사람들이 덜 창의적이거나 게을러서가 아닙니다. 제작 공정을 최소로 한다고 해도 일정 퀄리티를 확보하는 3d 그래픽 - 사람 한 명을 만드는데는 하이폴리곤의 경우 4주, 로우폴리곤의 경우 3주 정도 걸립니다. 3d 그래픽의 경우에는 모델링으로 끝나는 것이 아니라 그것에 뼈대를 심고 따로 움직이게 해줘야 하는데 이 작업의 경우에도 정말 아무리 빨라도 그럴 듯하게 만들려면 3주는 걸린다는 사소한 문제가 있습니다. (...)

그런 이유로 정말 소중한 리소스를 아끼기 위해서 개발자들은 재활용의 달인이 됩니다. 썼던 걸 쓰고 또 쓰고, 마르고 닳도록 쓰는 거지요. 이런 부분에 대해서 플레이어들은 좋게 보지 않지만 어쩔 수 없는 현실이죠. 개발 기간은 정해져 있으니까요.

억울한 건 사실이지만 기획자가 할 일은 플레이어에게 불만을 토로하는 대신 눈치채지 못할 정도로 교묘하고 완벽한 재활용을 할 수 있도록 기획하는 것입니다. wow의 경우에도 100점이라고까지는 할 수 없지만 한정된 자원을 최대한 쉽게, 잘 활용하기 위한 많은 꼼수를 사용하고 있습니다.

1스텝) 아제로스에서 날아선 안되는 이유

실제로 많은 게임들에서 이미 사용하고 있는 방법이긴 합니다. 엔진마다 조금씩 다른 점이 있지만, 3D의 경우는 모델의 크기보다는  모델이 가지고 있는 면수에 더 큰 영향을 받는 경향이 있습니다. 다만 일반적으로 더 큰 3D 오브젝트는 더 큰 디테일과 더 큰 텍스쳐를 필요로 하게 되므로 모델의 크기가 아주 영향이 없다고 말할 수는 없습니다. (그 밖에 제작 기간의 제한도 있을 수 있습니다)

위와 같은 이유로, 큰 건물은 문제가 되지 않지만, 복잡한 건물은 문제를 일으킬 수 있습니다.

그러나, 스톰윈드는 인간 종족의 수도로서, 드러내기 좋아하고, 거만하면서도 웅장한 것을 좋아하고 하늘에 닿고 싶어하는 욕망을 숨기지 않는 실제의 인간 그대로를 표현하기 위해서 건물의 수를 줄이거나 초라하게 만들 수는 없었지요. (물론 국내의 개발사에서 일하다 보면 이런 컨셉이 좌절되고 쉽게 만들 수 있는 컨셉으로 변경해야 하는 일이 생기곤 합니다)

그런 이유로 이들이 선택한 것은...바로...

사용자 삽입 이미지
안 보이는 부분에서 면수 줄이기입니다.

스톰윈드를 위에서 올려다 보면 뚜껑이 없는 건물들이 제법 보입니다. 실내가 없는 건물도 많이 있지요. 촬영장 세트처럼 유저가 길에 서서 보는 부분만 대충 가려 놓은 부분도 많이 있습니다.

많은 게임에서 실제로 이미 많이 쓰고 있는 방법이긴 합니다만, wow의 경우는 훨씬 적극적으로 사용하고 있습니다. 국내에서는 원경에서만 선택적으로 사용하는 반면 wow의 경우는 가까이 있는 올라갈 이유가 없는 건물, 정상적인 카메라 각도로는 볼 수 없는 부분에도 뻔뻔하게 그대로 써 버립니다. :)

그런 이유로 아웃랜드가 열리고 곧 두 번째 확장팩이 나오는 이 시점에서도 아제로스에서는 날 수 없습니다. 날면 저게 다 보이니까요. 아제로스에 자유 비행이 없는 이유는 이것입니다.











2스텝) 두 개의 탑

이건 정말 뷰어를 활용하기 전에는 몰랐던 일입니다. wow의 경우는 많은 팬들을 보유하고 있고, 그러다 보니 팬 중에는 이런 사람도 저런 사람도 있기 마련입니다. 팬 중에는 프로그래머도 있을 수 있겠지요. wow의 열렬한 팬인 것으로 보이는 Ufo_z가 만든 맵뷰어는 업데이트가 멈춘지 한참되었지만, Darjk의 패치를 통해서 확장팩의 맵들도 볼 수 있습니다. http://www.wowmodelviewer.org/

이것을 통해서 스톰윈드를 보면 재밌는 것을 볼 수 있습니다.

사용자 삽입 이미지
스톰윈드의 교회탑이 두 개입니다. 하나는 공중에 떠 있기까지 하는군요.

이게 뭘까요? 스톰윈드를 가보면 알겠지만 실제로 교회탑은 하나 밖에 없습니다. 게임에서 공중에 떠 있는 교회탑 아래로 가보면 아무 것도 없답니다. 그렇다면 모델 뷰어에서 교회탑이 두 개인 이유는 사제 뷰어라서 그런 걸까요?

정답은, 실제로도 교회탑은 두 개라는 겁니다. 어떻게 대답할 수 있냐고요? 그리폰을 타고 오면 보이지 않느냐고요?

그렇다면 게임 상에서 직접 확인을 해 봅시다.

사용자 삽입 이미지

아주 짧은 순간이므로 잘 보기 어렵지만 교회탑이 실제로 있을 리 없는 거리에 있습니다. 저 거리는 공중에 떠 있는 두 번째 탑이 있는 위치인 것 같군요.

쉽게 설명하자면, 공중에 떠 있는 두 번째 탑은, 스톰윈드 앞마당에서 교회 첨탑을 보이기 위해서 임의로 만든 장식품이라고 보시면 됩니다. 유저가 저 탑에 일정 거리만큼 접근하면 보이지 않게 되고, 멀리 떨어지면 보이게 되는...역LOD라고 할까요? LOD의 개념은 이미 다들 알고 있는 것이지만, 반대로 "멀리에 있으면 보인다."는 연출은 꽤나 충격적입니다.

또, 이렇게까지 해서 컨셉을 살려주는 회사가 있다는 것도 부럽군요.

3스텝) 조립식 가건물

제가 wow를 처음하면서 느낀 놀라움은, 아주 작은 건물일지라도 문이 열려 있는 건물은 모두 들어가 볼 수 있다는 겁니다. (닫힌 경우에는 못 들어 갑니다) 겉에서 보기에 작은 건물인데 안쪽의 모델링은 어떻게 한 걸까 궁금한 점이 있었지요. 요번 분석을 통해서 그 의문을 해결할 수 있었습니다.

껍데기와 알맹이의 형태를 규격화 한 후, 몇 개의 모형을 만들어서 겹치는 겁니다. 알고 보니 너무 쉬운 방법이라서 허탈해지더군요. (눈물) 장식 오브젝트를 바꿔치기 해서 같은 규격의 건물에서도 컨셉에 따라 내장이 달라진 것처럼 보이기도 합니다.

사용자 삽입 이미지
나만 몰랐을까...


wow같이 오랜 기간 제작된 게임도, 블리자드 같은 거대하고 많은 노하우를 가진 회사도 리소스를 아끼기 위한 꼼수들을 이용하기 위해 많은 노력을 합니다. 어느 회사든지 게임 개발 플랫폼이라는 그 자체의 제약에서는 벗어날 수 없으니까요.

잊지 마세요. 재활용은 환경 뿐만 아니라 게임 개발에도 유익한 영향을 미친답니다. :)

용어 소개

  • 리소스(Resource) : 자원이라는 의미인 것 같습니다. 게임 개발에서 리소스라고 하면 주로 "게임에 출력되는 그래픽 데이터"를 말합니다.
  • 폴리곤(Polygon) : 3d 그래픽을 활용하는 게임에서 사용하는 용어입니다. 폴리곤 메쉬(Polygon Mesh)의 줄임말이며, 3d 그래픽을 구성하기 위한 뼈대라고 보시면 됩니다. 이 뼈대를 이루는 다각형의 갯수가 많으면 하이 폴리곤(High Polygon), 반대의 경우에는 로우 폴리곤(Low Polygon)이라고 부르며, 하이 폴리곤일수록 고사양의 PC를 요구하게 됩니다. 하이 폴리곤일수록 섬세한 그래픽을 표현할 수 있으므로 일반적으로 하이폴리곤은 고해상도, 고퀄리티 그래픽의 게임과 동의어로 착각하는 경향이 있습니다.
  • 매핑(Mapping) : 뼈대(폴리곤)를 만들었으니 그 위에 종이를 발라서 모양을 잡아줄 차례입니다. 그 종이를 바르는 행위를 매핑이라고 부릅니다. 거기 바르는 종이는 맵(map)이라고 부릅니다.
  • 모델링Modeling : 3d 디자이너가 폴리곤을 만들고 그 위에 매핑을 입히는 행위 그 자체, 혹은 그 행위를 통해서 나온 결과물.
  • 엔 진(Engine) : 차량을 움직이기 위해서 동력을 보내주는 엔진이 필요하듯, 게임을 움직이기 위해서는 컴퓨터의 자원을 효율적으로 배분해 주고, 처리해 주는 엔진이 필요합니다. 하는 역할을 똑같습니다. 다만 움직이는 것이 자동차냐 게임이냐의 차이만 있을 뿐이죠. 더 좋은 엔진을 장착한 차량이 더 좋은 성능을 보이듯, 더 좋은 엔진을 장착한 게임이 더 우수한 성능을 가지게 됩니다. 엔진에 대해서는 추후에 한 번 더 이야기 하지요.
  • LOD(Level of Detail) : 기본 개념은 "멀리 있는 것은 선명하게 보이지 않는다." 에서 시작합니다. 멀리에 있는 3D 오브젝트를 임의로 디테일을 낮춰서 보여주는 기술을 총칭합니다. 요즘은 확장된 의미로, 3D 오브젝트 외에도 원거리에 있는 것들(ai, 스크립트 등)을 처리하는 기술에도 이 용어를 사용한다고 합니다.

+ Recent posts