게임 제작에 참여하거나 게임 제작을 관리하는데 있어서 필히 이해하고 넘어가야 하는 것 중 하나가 게임 제작의 복잡성이다. 다들 비디오 게임 개발이 어렵고 복잡하다고 관념적으로 생각하지만, 의외로 이를 충분히 이해하는 모습을 보이는 경우는 찾아보기 어렵다.
게임 제작의 복잡성에 대한 이해도가 낮은 경우 심심치 않게 보이는 입장이 바로, 게임 제작을 파트 혹은 시스템 별로 모듈화 하여 제작할 수 있다는 믿음이다. 모듈화가 성공하기 위한 전제로 각 모듈에 대한 규격화가 필수지만, 게임 제작에서 파트 혹은 시스템을 규격화 하는 것은 매우 어렵고 개인적으로는 불가능에 가깝다고 여기기도 한다.
게임 제작은 왜 복잡한가?
다들 알다시피 (비디오) 게임은 한가지 요소가 아닌 여러 복합 요소를 조합하여 제작하는 매체이다. 게임 제작을 진행하는 대표적인 파트는 크게 게임 디자인, 프로그램, 아트, 사운드로 나뉘곤 하는데, 이들 파트는 전체적인 게임 비전을 바탕으로 하나의 프로젝트로 묶여서 개발이 진행된다.
각 요소가 유기적으로 연결되기 위해서는 제작 초기부터 각종 사양과 명세를 각 파트가 협의하고 조정하면서 진행되어야 한다. 아트 퀄리티를 높이기 위해서는 이를 받쳐주는 프로그램 파트의 적극적인 기술 지원이 필요하다. 프로그램 역시 게임을 구현하기 위한 리소스 규격과 완성된 리소스를 아트 파트와 사운드 파트로부터 받아야 개발을 진행 시킬 수 있다.
게임 디자인 파트는 모든 파트와의 협력을 통해 게임을 구체화 시켜야 한다. 때문에 파트 간의 커뮤니케이션은 절대적이고, 하나의 목표를 정할 때 어느 한 부서만 독단적인 의사 결정이 불가능하다-캐릭터 디자인 하나를 결정하기 위해서 그다지 필요 없다고 여겨지는 프로그램이나 사운드 파트까지 포함한 모든 파트가 검토하고 조율해야 하는 과정을 거쳐야만 한다.
이것만으로도 게임 제작은 복잡성을 띄지만 불난 집에 기름을 붙는 게임 제작의 특수 요인1이 존재한다. 다른 산업 프로젝트와 달리 게임 소프트웨어 개발 프로젝트를 순식간에 난장판으로 만드는 이 요인은 바로 이것이다.
아무리 세부 목표를 잘 잡고, 게임 디자인과 개발 명세가 명확하게 나온 프로젝트라고 하더라도 이는 첫 구현 이후 폐기 될 가능성이 매우 높다 – 그리고 그 이유는 “생각한 만큼 재미가 없어서”다.
게임 제작은 (일반적인 소프트웨어 개발과 마찬가지로) 구현 → 확인 → 수정을 반복하는 과정의 연속이다. 이 일은 사실 제작자가 스스로 납득할 만한2 상태가 될 때 까지 무한 반복될 수 있다.
단순히 사이클을 반복하는 것 만으로 끝나는 것이 아니다. 작은 수정 하나가 미치는 영향은 모든 파트에서 검토되어야만 한다. 때문에 게임 개발에서 수정을 부담스러워하는 분위기가 팀을 잠식하는 것은 순식간이다.
게임 시스템에 의한 복잡도의 증가
위와 같은 이유로 단순한 게임을 만든다고 해도 복잡도가 상당하다. 하지만 여기서 끝나지 않는다.
게임은 최소 1개에서 수십 가지의 시스템(혹은 룰)이 유기적으로 동작하는 형태로 만들어진다. 게임 시스템은 독립적으로 움직이기 않기 때문에(애초에 독립적으로 움직이는 게임 시스템은 게임 내에서 의미가 없다) 탑재되는 시스템의 수량은 게임 제작의 복잡도에 즉각적인 영향을 미친다.
이는 간단한 수학 공식으로 표현 가능하다. 각 시스템을 Node 로 둔 정방형 형태의 구조를 생각해 보자. 각 Node 는 서로 다른 Node 에 모두 연결이 된다고 가정해 보자(정다각형에 가능한 모든 대각선을 만든다고 생각하면 된다). 이때의 모든 Node 간의 관계선의 수(복잡도) 공식은 아래와 같다.3
# nodes = 게임에 포함 된 게임 시스템의 수
# lines = 관계의 총 수(복잡도)
lines = nodes(nodes-1)/2
게임 시스템이 하나라고 가정 했을 때, 관계 복잡도는 0이지만, 2개일 때는 1, 5개 일 때는 10이 된다, 그리고 100개 일 때의 관계 복잡도는 무려 4,950에 이른다.
게임 시스템 | 1 | 2 | 5 | 10 | 25 | 50 | 100 |
관계 복잡도 | 0 | 1 | 10 | 45 | 300 | 1,225 | 4,950 |
곧 게임 시스템이 늘어난다는 것은 그만큼 신경 써야 할 것이 기하급수로 늘어나야 한다는 것이다. 이는 게임 제작을 어렵게 만드는 매우 큰 요인이다. 전체 게임 제작의 난이도를 결정 짓는 것은 결국 게임 제작 파트의 필요 커뮤니케이션 수와 게임 시스템의 관계로부터 도출되는 복잡도에 기인한다 할 수 있다.
대책은 없는 것인가?
게임 개발이 복잡하다는 것은 대규모 게임 제작을 진행하기 훨씬 전 부터 있어왔던 문제이다. 이를 해결하기 위해 처음에는 크런치 Crunch 같은 지속적이지 못한 극약 처방부터 애자일, 스크럼, 칸반, CI, DevOps 같은 여러 대안들이 십수년 전 부터 나오고 지금도 더 나은 방안을 찾기 위해 모두가 노력 중이며, 결실을 맺은 조직도 많이 존재한다.
필요한 것은 복잡도를 해결하기 위해 노력도 좋지만 복잡도를 상수로 두되, 게임 제작의 결과를 어떻게 만들지에 대해 포커스를 맞추는 것이다. 게임 개발의 복잡성은 일종의 고정 비용으로 인정하자.
복잡도를 줄이기 위해, 혹은 복잡도를 무시하고 게임 개발 프로세스의 모듈화를 가져오는 일은 하면 안된다. 각 파트의 모듈화가 가능한 시점은 규격이 크게 바뀌지 않을 정도로 완성된 이후에나 가능한 일이며, 상기한 여러 이유로 인해 그 규격을 미리 잡는 것은 거의 불가능한 일 중 하나다 – 규격화 된 공장제 양산 게임을 만든다면 모를까.