2017년 11월 14일

Frogwares의 'City Generator'는 'The Sinking City'의 개발 시간을 어떻게 단축했을까

저자: Aleksey Yurkin & Max Rybalchenko

안녕하세요! 프로그웨어즈(Frogwares)의 레벨 모델러 팀 리드 알렉세이 율킨(Aleksey Yurkin)과 시니어 툴 프로그래머 막스 리벨첸코(Max Rybalchenko)입니다. 저희는 70명 이상의 전문가들로 구성된 제작사이고, 셜록 홈즈(Sherlock Holmes) 게임 시리즈로 잘 알려져 있습니다. 현재는 러브크래프트(Lovecraft) 스타일의 1920년대를 배경으로 한 오픈 월드 및 오픈 스토리형 추리 게임 싱킹 시티(The Sinking City)를 개발하고 있습니다. 
 

다른 오픈 월드 게임들과 마찬가지로, 가장 큰 과제 중 하나는 바로 게임플레이와 풍경 양쪽에서 모두 지루하지 않은 게임 속 세계를 만드는 것이었습니다. 오늘 저희는 위 두 문제 중에서 풍경 문제를 해결할 솔루션을 언리얼 엔진 4로 제작한 것에 대해 말씀드리고자 합니다. 이 툴은 간단하게 단 한 번의 클릭만으로도 시각적으로 풍성한 거리와 도시 구역을 제작하는 것을 도와줍니다. 저희는 이 툴을 “시티 제너레이터(City Generator)”라고 부르며, 그 작동 원리를 말씀드리고 싶습니다.

TheSinkingCity_Pic1.jpg

다음과 같은 상황을 상상해보십시오. 여러분은 도시를 배경으로 한 오픈월드 게임을 제작하고 있습니다. 17km의 도로가 있는 1 제곱킬로미터의 도시를 제작한다고 합시다. 도로 양 쪽으로 주택가가 있다고 하면 총 34km의 거리에 집이 늘어서게 됩니다.각 주택의 평균 너비는 20미터라고 치면, 1700채의 집이 필요합니다. 이런 집 외에도 랜드마크, 공공 시설, 그리고 도로 설치물(가로등, 쓰레기통, 벤치, 광고판, 그 외) 등이 있어야 합니다. 단 1 제곱킬로미터의 도시에 한정해도 이 정도입니다!

상황을 좀 나아지게 하겠습니다. 도시의 일부는 물에 잠겨 있으므로 물과 침수 엘리먼트를 사용합니다. 또한 도시를 다양한 지역(예를 들면 빈민가과 부촌)과 지구로 구체적인 구분을 해 줍니다. 그러면 서로 다른 건물들로 이런 구역을 나타내어 보여주어야 합니다. 그럼 이제 보시는 것처럼, 많은 애셋을 만드는 데 시간과 돈을 많이 들여야 한다는 큰 문제가 새롭게 떠오릅니다. 아니면, 저희가 개발한 툴을 사용해서 90%의 작업을 대신 시킬 수도 있습니다.

TheSinkingCity_Pic2.jpg

여기까지 읽으셨다면 "괜찮은 툴이로군요. 그럼 그 원리는 어떤가요?"라고 생각하시고 계실 것입니다. 그 원리에 대해 조금 말씀드리겠습니다. 저희가 다양한 건물들과 기타 요소들을 갖춘 도로를 구성하는 단계, 일명 “행복의 여섯 단계” (사실 구체적인 이름은 아직 짓는 중입니다)를 차근차근 분석해 보도록 하겠습니다.

1단계 - 첫번째 단계에서는 건물 엘리먼트를 제작합니다. 이 엘리먼트는 문, 아치, 중심축, 소켓, 창문 등 건물을 구성하는 요소입니다. 이 건물 엘리먼트는 상업용 건물과 주거용/일반 가옥에 모두 사용될 것입니다. 이 모든 엘리먼트는 손으로 직접 제작한 것이며, 게임의 배경이 되는 1920년대 보스턴 지역에 존재했다고 조사된 건축 스타일과 유형을 따릅니다. 각 엘리먼트의 데이터베이스를 구축한 후에는, 다음 단계로 넘어갑니다.

TheSinkingCity_Pic3.jpg

2단계 - 조립식 건물을 제작합니다. 조립식 건물은 주어진 지역에서 찾아볼 수 있는 구역의 유형/건물의 프리셋이라 할 수 있는 것입니다. 따라서 우리는 부잣집 저택, 가난한 오두막, 파괴된 건물, 꽉 찬 건물, 특정 건축 스타일, 상업용 건물, 주거용 건물 등 각각의 구체적인 규칙에 따른 건물 유형에 맞춰 조립식 건물을 제작했습니다. 이런 조립식 건물 제작은 1단계에서 제작했던 엘리먼트의 라이브러리를 기반으로 했습니다. 또한 조립식 건물을 만든 후에는, 마법이 천천히 일어나게 됩니다... 하지만 끝나기 전에 아직 한 단계가 남아있습니다.

TheSinkingCity_Pic4.jpg

3단계 -  도시 그리드를 제작합니다. 조사 자료와 컨셉 아트, 분위기, 그리고 우리만의 건축에 따라, 도시 그리드의 2D 벡터를 제작합니다. 그 안에 '여기는 부촌, 여기는 상가' 이런 식으로 구체적인 개별 구역 유형도 지정합니다. (이것은 저희가 아주 긴 토론을 거친 것을 매우 간소화하여 설명한 것이지만, 무슨 의미인지 이해할 수 있으시기를 바랍니다). 이제 묘수를 부릴 시간입니다. 

TheSinkingCity_Pic5.jpg

4단계 - 도시를 생성합니다. 이제 모든 엘리먼트를 제작하고, 조립식 건물을 만들었으며, 도시 그리드를 제작했으니, 버튼을 눌러줍니다. 그러면 이제 우리의 툴이 언리얼 엔진 4의 도움을 받아 스스로 도시 전체를 생성해냅니다. 모든 건물들과 모든 지구들, 침수된 구역들, 플레이어가 직접 걸어서 접근할 수 있는 구역들, 다양한 건물 건축 유형, 도로 설치물, 도로 유형 등을 생성해내는 힘든 작업에는 수많은 인원이 필요할 수도 있지만, 이 툴과 언리얼 엔진만 있으면 작업이 완료됩니다. 직접 본다면 마치 마법처럼 보이며, 꼭 도시 시뮬레이션 게임을 플레이하는 것 같은 느낌이 들 것입니다. 저희도 양심있게 "도시 안으로 들어가" 직접 손 볼 부분이 있기는 하지만, 전체 작업의 90%는 이미 끝났습니다. 그저 10%만 마무리를 해주면 됩니다. 이제 수천 채에 달하는 건물들을 일일이 제작해 배치할 필요는 없습니다. 

5단계 - 게임플레이 엘리먼트를 투입합니다. 일단 도시가 생성되면, 이제 저희의 스토리를 보고 그 안에 "생명"을 부여하기 시작합니다. 즉 도시를 사람들, NPC, 보행자, 생명체 등으로 채운다는 뜻입니다. 이 작업 역시 특정 건물은 특정 NPC의 것으로 할당하는 식으로 쉽게 작업을 할 수 있었습니다, 예를 들면 "이 건물은 NPC 아무개의 것이지, 그리고 그 NPC는 임무 12개 동안 이 건물 안에 있을거야"라고 할당하는 식이었습니다. 또한 생명체를 비롯한 다른 '살아있는 것들'도 똑같은 방식으로 작업했습니다. 이 단계에서 저희는 도시에 생명을 부여했으며, 또한 재미있게 만들어냈습니다.

6단계 - 최적화를 합니다. 툴의 마지막 기능은 나머지 기능들만큼 멋지지는 않을 수 있지만, 역시 중요하고 작업을 쉽게 만들어주는 기능입니다. 제작이 진행될수록, 도시 그 자체에 변화가 생길 수 있습니다. 게임 개발은 그런 방식으로 이루어지니까요. 따라서 저희는 툴에 완전한 유연성을 주어 제작해, 개발 과정에서 도시를 역동적으로 수정할 수 있습니다. 우리는 도시를 마치 찰흙처럼 마음대로 형성하거나 모양을 만들고, 면적과 배열 등을 바꿀 수 있습니다. 이것은 정말 하늘이 내린 선물로, 변화를 주고 싶다고 해서 이전의 작업물이 완전히 사라지는 것도 아니기 때문입니다. 따라서 마음 가는 대로 도시를 다룰 수 있습니다.

TheSinkingCity_Pic6.jpg

저희가 이런 도시 형성 툴을 제작해서 그냥 기쁘다고 표현한다면 상당한 과소평가일 것입니다. 저희는 이 툴을 제작하게 되어 진심으로 행복하고 자랑스럽습니다. 하지만 이 툴은 언리얼 엔진 4 내에서 구현되어 개발되지 않았더라면 이처럼 쉽게 만들어지지 않았을 것입니다. 모두가 언리얼 엔진 4의 시각적 측면에 대해 칭찬을 하지만, 저희는 그보다 툴의 개발을 더 쉽게 해주기에 언리얼 엔진 4를 좋아합니다.

저희는 현재 4,000개 이상의 건물들과 각각 이름이 붙은 거리들을 만들면서 수백 시간에 달하는 작업 시간을 절약했으며, 이렇게 오크몬트 시(City of Oakmont)는 천천히 만들어지고 있습니다. 하지만 아직 많은 작업이 남아있으며, 앞으로의 진행도 계속해서 전해드리도록 하겠습니다.

저희가 개발한 툴과 이 툴이 싱킹 시티의 제작에 어떤 도움을 주었는지 읽어주셔서 감사드립니다. 저희는 지금까지 말씀드린 것처럼 게임 개발에 많은 노력을 기울이고 있지만, 언리얼 엔진의 도움 덕분에 우리의 비전을 더 강력하게, 훨씬 큰 규모로 만들 수 있었습니다. 저희는 언제나 게임 속에 공포를 넣고 싶었지, 워크플로우에는 넣고 싶지 않았습니다. 저희의 툴과 언리얼 엔진 4 덕분에 이런 소망을 실현할 수 있었습니다.

싱킹 시티에 대해 더 많은 정보를 원하신다면, 페이스북(Facebook), 트위터(Twitter)유튜브(YouTube)에서 팔로우를 하실 수 있습니다.