프로젝트의 시작
안녕하세요 여러분, 제 이름은 Brandon Swan이고, 저는 Georgia에 위치한 Savannah College of Art and Design에서 20주간 제작한 Project Battery Jam의 리더입니다. 저희 팀은 4명의 핵심 팀원과 애니메이터, 오디오 팀 등을 포함해 총 열 한 명의 사람들이 크리딧에 이름을 올리고 있습니다. 저희 팀은 금년 말에 킥스타터에 올리는 것을 희망적으로 보고 있는 보드 게임 제작을 이전에도 같이 해 왔고, 함께 일하는 것이 좋아 수업 시간을 같이 맞췄기 때문에 게임 제작 수업을 들을 수 있었습니다.
위 팀원들과 함께, Battery Jam이 만들어 질 수 있었는데 왜냐하면 신중하게 진행하였기 때문입니다. 저희는 수업 시작 전에 회의하는 시간을 가졌고, 어떤 스타일의 게임을 어떤 범위로 우리 팀과 포부에 맞을지를 명확하게 정하였습니다. 여러분의 팀이 여러분의 재능을 가지고 어떻게 회의할 것인지에 대한 팁을 실제로 알려드릴 것은 아니기 때문에, 디자인을 결정하는 과정과 약간의 엔진 설정을 알려드리겠습니다. 이해할 수 있고, 여러분이 듣고 활용하실 수 있는 것들로 말이죠!
아트 The Art
비주얼 스크립트를 선택한 이유
다른 많은 학생들의 게임을 보면서, 저희가 공통적으로 느낀 것은 게임들이 예술적인 아이디어를 가지고 있었음에도 불구하고 매력이 약간 부족하다는 것이었습니다. 그래서, 저희는 주요 목표 중 하나로 게임 속에서 개성을 찾아내는 것을 정하였습니다. 많은 수의 아티스트로 만들어진 팀에서 프로그래머가 제대로 못하면 곡선 하나도 어필이 안 된다는 것을 알았습니다. 저는 컨셉 아티스트이기도 하고, 운 좋게도 제가 밀었던 robot+third wave ska 아이디어를 잘 받아주었습니다. 그래서, 저는 아트 설정 방향에 대해 시간을 조금 할애해서 말씀 드리겠습니다.
캐릭터를 어떻게 만들었나
캐릭터는 프로젝트의 한계에 의해 정의되는 것 빼고는 만들어 가는 데 흥미로운 난관들을 겪었습니다. 프로젝트를 시작했을 때, 저희는 팀에 애니메이터가 있었고, 저희는 그녀가 리깅을 할 줄 안다고 생각했습니다. 또한 저희는 4개의 고유한 모습의 캐릭터를 만들고 싶었습니다. 그래서, 저희는 캐릭터들의 미적인 부분을 설정하는 방법을 찾으며 리깅을 하고 간단한 애니메이션을 하는 방법을 알아내야 했죠.
로봇은 쉬운 선택이긴 하지만, 로봇이라 자동으로 최고의 선택이 되는 것뿐만 아니라 유기체 모델링을 걱정하지 않아도 되기 때문이었습니다. 간단한 트리 구조와 볼-조인트만으로 빠르고 간단하게 만들어 낼 수 있었습니다. 저희는 동일한 리깅을 유지하는 것이 가장 쉬운 방법이라는 걸 알았고, 컴포넌트를 바꾸는 것 만으로 스케줄 내에서 빠르게 각각의 캐릭터에 변경을 가할 수 있다는 것을 알았습니다.
그 사실을 알고 나서, 캐릭터를 디자인 할 때에 편리한 가이드를 만들게 되었습니다. 리깅의 한계 때문에, 저희는 게임이 탑다운 뷰에서 플레이 되어야 한다는 것을 알았습니다. 이 캐릭터들의 설정을 만들 때의 가장 좋은 방법은, 특히 머리의 색과 모양을 최소 제가 제작하는 상황에 맞게 바꿔주는 것이었습니다. 저는 저희가 고른 테마로 메쉬를 만들려고 노력하는 중에 모양과 형태, 주요 색상에 대한 영감을 얻기 위해 레이싱 게임 Wipeout 시리즈를 보았습니다. 그들의 캐릭터성은 인트로 시퀀스와 타이틀 화면에서 캐릭터들이 포즈를 잡고 음악에 맞춰 춤을 추고 재생 중에 독특한 애니메이션을 통해 돋보였습니다.
애니메이션을 시작하면서 흥미로운 딜레마에 빠졌습니다. 캐릭터를 만들었을 때, 저는 마음 속으로 2D 실루엣을 만들었습니다. 각진 팔과 정강이로 자세가 좀 더 드라마틱하게 대표 캐릭터로 보이도록 말이죠. Everett이 캐릭터 모델링을 처음 마쳤을 때, Turbo는 일러스트레이션과 완전히 똑같았고, 저희 모두 멋지다고 생각했으며, 멋졌습니다! 하지만 애니메이션을 시작했을 때, 저희는 구부러진 관절 자체가 자세를 이상하게 보이도록 한다는 것을 알았습니다. 예를 들어, 주먹질을 하는 듯 잽을 날리거나 팔로 가속을 하는 것은 완전히 이상해 보였는데, 왜냐하면 팔 앞부분이 너무나 구부러져있었기 때문이었습니다. 운 좋게도, 이렇게 굽은 팔은 특정 자세에서는 잘 동작하였고, 어퍼컷이나 가슴을 구부리는 급한 동작들은 더 괜찮았습니다. 아래에는 굽은 모양이 어떻게 더 역동적으로 보이게 되는지의 예시입니다.
휘어지지 않으면, 이런 포즈들은 지금의 느낌이 나지 않습니다. 제 파트에서 조금 잘못한 걸로 드러나는 것 빼고는 프로젝트에서 잘 어울린 그 모양에서 일러스트레이트 품질이 나와 주었습니다.
Rocket의 겉모습을 보면 정강이가 얼마나 휘었고, 팔 앞부분이 어떤지 알 수 있습니다. 이 자세가 일반적인 캐릭터의 모양과 비율에 시간을 뺏기고 있던 외부적 이유 등 때문이 아니고 실질적으로 T포즈로 사용된 것이고, 만들 때 서 있는 자세를 사용하였습니다. 포토샵에서 팔 등을 회전시키고 다시 그리는 것 대신에, 저희는 볼 조인트가 위 포즈대로 모델링을 할 경우에도 아무 문제를 일으키지 않을 것이라고 생각했기 때문에 그냥 모델링을 해서 일정을 치고 나갈 수 있었습니다.
디자인
안녕하세요 여러분, Batter Jam 디자이너이자 팀의 외모를 담당하고 있는 Abraham Plato가 저희가 Battery Jam에서 했던 디자인 선택들과 시간에 걸쳐 이러한 선택들이 어떻게 발전되어 왔는지에 대해 나누어 보겠습니다.
전투
Battery Jam의 사전 제작단계에서 시끄러운 토론이 사그러들고 여러 가지 윤곽이 잡혀갈 때, bomberman의 게임플레이 방식이 논의되었고, 특히나 멀티플레이 방식이 그러하였습니다. 다른 많은 경쟁 방식의 멀티플레이와 다르게, 이 게임은 직접 공격에 초점을 맞추지 않았습니다. 대신에 전략적 위치에 폭탄을 놓고, 특히나 상대방의 움직임을 간파하여 영악한 위치에 폭탄을 놓아서 가둬 죽이는 것 말입니다. 저희는 이 방식이 아주 재미있고 독특한 전투 스타일을 만들어 줄 것이라고 생각했습니다. 적을 직접 공격하는 것 대신에 저희는 어떤 플레이어가 다른 플레이어와 서로의 움직임을 방해하고 레이저나 용암 같은 함정으로 빠트리는 시스템을 만들고자 했습니다. (완전히 100퍼센트 독창적인 게임은 없잖아요?)
게임의 코믹한 감각이 디자인의 목표를 거대한 선풍기, 자석, 로켓 주먹, 소닉의 스핀대시와 법적으로 비유사한 플레이어 파워업 등을 만들도록 하였습니다. 이들의 각 포즈는 재미있고 유용하게 느껴지도록 서로 다른 세트로 구성되었으나, 모두 똑같은 초기 설정 문제를 겪었습니다.
각 캐릭터의 첫 번째 반복에서 저희는 이 파워업 아이템의 대부분이 오브젝트로 놓여있다는 생각을 했습니다. 그러므로 플레이어는 스테이지 위에 파워업을 놓고 그리고 나서 효과가 날 것입니다. 강력한 느낌을 주기 위해 플레이어가 공중으로 뛰어서 바닥에 오브젝트를 던지고 다른 곳으로 공중제비를 도는 것이 재미있을 거라고 생각했습니다. 아이디어 자체는 좋았지만, 다른 플레이어에 사용할 대부분의 파워업 아이템에는 적용되지 않았습니다. 두 번째 이슈는, 캐스팅 애니메이션에 게임 속에서는 영겁 같은 2초나 갇혀 있는다는 점입니다.
첫 번째 문제에 대한 해결책은 대부분의 파워업 아이템 캐스팅 애니메이션을 없애고, 플레이어의 위치로 날아오는 투사체로 만드는 것이었습니다. 그리고 나서 플레이어가 유연하게 함정을 설치하고 계속 진행한다는 느낌으로 공중에 떠 있는 시간을 줄였습니다. 여기서 생긴 주요한 차이점은 플레이어들이 저희가 의도한 것 보다 훨씬 빠르게 생각하고 행동한다는 것이었습니다. 만약 뭔가가 4분의 1초보다 길게 지속되면 플레이어들이 지루함을 느끼거나 맵에 끼어있다고 생각한다는 점이 아주 중요합니다.
필요는 발명의 어머니
저희는 플레이어가 시시 때때로 필요하면 들어갈 수 있는 격자 기반 스테이지를 만드는 아이디어를 좋아하였습니다. 막기 위해서 벽을 세우고, 적이 빠지도록 치명적인 함정을 파는 것이나 여러분을 죽이려고 하는 적과 여러분 사이에 방해물을 놓는 것 등 말입니다. 이 디자인에서의 이슈는 플레이어들이 빠르게 필드의 나머지 부분과 자신이 있는 곳을 분리하여 전투에서 멀어져 있는다는 것이었습니다. 저희는 일관성이 없거나 다른 플레이어의 파워업 아이템과 같이 랜덤한 능력이 필요했는데, 왜냐하면 저희는 플레이어들이 위와 같이 고립되지 않는 것을 의도하고자 해서 입니다. 그래서 저희는 캐릭터의 스킬을 만들었습니다. 쿨타임이 있는 일정한 스킬이고, 최종적으로 캐릭터마다 2개의 스킬을 갖도록 하였습니다.
먼저, "Slam" 의 스킬은 게임에서 첫 번째 반복성 스킬로 추가된 것입니다. 바닥을 내리쳐서 주변 블럭을 솟아오르게 하거나 꺼지게 할 수 있으며, 다시 정상으로 돌아오게 할 수 있습니다. 이 스킬로 플레이어가 즉시 걸어다닐 수 있는 바닥을 만들 수 있게 합니다. 바닥 변형이 재미가 없다면, 공격 스킬로 사용하기 위해 최초로 두배에서 세배로 판정 범위가 넓어진 넉백 효과도 있습니다. 쿨타임은 15초에서 10초로, 최종적으로 6초로 상향되었습니다. 공격이 유일한 게임플레이 수단이 될까봐 우려하였더니, 스킬 쿨타임이 너무 길다는 지속적인 의견이 반영되었습니다.
두 번째 캐릭터 스킬은 운 좋은 해프닝에 의해 만들어졌습니다. 제가 위의 여러 플레이어 파워업 아이템이 재미, 유용함, 독특함을 느낄 때까지 여러 단계를 거쳐 왔다는 것을 말씀 드렸습니다. 이 중 goo mortar을 가장 많이 수정하였습니다. 현재 이 아이템을 사용하면, 거대한 침이 곡사로 공중에 발사되어 바닥에 떨어져서 흩어져 맞은 플레이어는 잠시 기절합니다. (아래 gif에서 보라색) 하지만 원래 이 아이템은 캐스팅 애니메이션 후에 사용된 곳에서만 효과가 났고, 그 효과도 속도를 느리게 만드는 것뿐이었습니다. 이래서 거의 쓸모가 없었는데, 시전자가 고통을 받을 뿐이기 때문이었고, 상대방을 맞춰도 별로 재미가 없었습니다. 속도가 반으로 줄어드는 건 그냥 짜증만 나게 할 뿐이었기 때문이죠.
goo가 날아오는 자리에서 대쉬로 피할 수 있게 스킬을 넣는 건 진심 멋진 아이디어입니다. 이 스킬은 goo가 슬로우 에서 기절로 상향되면서 같이 만들어졌으면서도 아주 쓸모 있게 되었습니다. 그런데 솔직히 goo로 슬로우를 걸고 나서 멀리 달아나는 스킬 연계를 쓸 이유가 없습니다. 각자 스킬을 쓰긴 하지만 같이 쓰는 것은 별로 상성이 좋지 않습니다.
저희는 여러분이 좋아하는 goo를 투사체로 발사하도록 바꾸고 나서 대쉬를 두 번째로 "Blink"라는 이름으로 만들었습니다. 또한 무적 버프가 걸리기 때문에 플레이어의 스킬 창에 아주 유용하게 포함시켜 용암이나 레이저 같은 함정을 넘어가는 데 사용될 수 있습니다.
기능으로써의 급박함
게임이나 기타 놀이를 할 때 성급하거나 급박한 느낌의 순간이 있으면 재미가 증폭됩니다. 파이프 오르간 배경음악의 볼륨이 바뀌고 메인 카메라의 흔들림만 바뀌었을 뿐인데도 어렵게 느껴지기 시작하게 됩니다. 저희는 Battery Jam에 몇 가지 순간 순간을 급박하게 만드는 장치들을 디자인하였습니다.
레이저 봇인 Shaft는 아주 쓸모 없어 보입니다. 그는 아무도 못 죽일 것 같은데, 왜냐하면 랜덤한 줄에서 나타나 자신으로부터 2~3줄 떨어진 곳까지 레이저를 발사하고 사라집니다. 플레이어들은 아주 쉽게 튀어나온 타일 뒤로 숨어서 피할 수 있습니다. 그래서 두 가지 업그레이드 방안을 만들었습니다.
먼저 저희는 레이저를 바꿔서 스테이지의 중앙에서 언제든 튀어나와서 좌나 우로 갈 수 있게 해서, 매 번 스테이지의 절반을 공격하도록 하였습니다. 그리고 이 Shaft 가 랜덤하게 모서리 끝까지 가거나 한 줄 전까지 공격하도록 하였습니다. 이렇게 바꿔서 플레이어가 레이저봇 때문에 코너에 몰리는 경우 레이저봇이 끝까지 밀어버릴지 아니면 한 칸 남기고 살지 때문에 긴장하게 됩니다.
또 다른 스테이지 위험 요소는 bomber로, 게임 플레이에 더 중요하고 극단적인 전환을 가져다 줍니다. 처음에 bomber는 랜덤한 타일 위에 십자선을 표시해서 '위험한 자리'임을 표시하였습니다. 십자선이 나타난 타일과 용암 함정 사이에 물리적인 차이가 없다는 문제 때문에, 둘 다 밟으면 죽는 타일이었습니다. 저희는 bomber를 거의 없애려고 했습니다. 운 좋게도 Everett가 한 번에 여러개의 bomber를 소환시켜서 위력을 올리고, 셋업 되어서 플레이어를 기다리는 대신에 폭탄이 하늘에서 비처럼 떨어지도록 하는 생각을 하였습니다. 실제로 플레이어는 폭탄 효과가 나타나는 몇 초 동안을 피하기 위해서 그냥 십자 표시가 된 타일을 피해가면 됩니다. 새로이 업그레이드 된 함정의 중요성은 플레이어가 죽음의 위협을 느낄 수 있도록 하여 살려고 소리를 지르며 재미있게 게임을 할 수 있게 만든다는 것입니다.
결국 저희는 오랜 진리인 "서든 데스"를 받아들였습니다. 이 방식은 동점자를 가르는 데 좋은 방법으로, 이번 게임의 경우, 둘이서 너무 안 붙으려고 한다면 조금 빠른 속도로 게임을 하게 만듭니다. 경기가 길어지면 가장자리의 바닥이 빠르게 하나씩 가라앉아 용암이 드러나서 즉각적으로 플레이어들이 더 좁은 장소로 싸우거나 도망가도록 하여, 싸움을 붙이고 게임 플레이의 진행을 빠르게 합니다. 또한 이 장치는 빨갛게 빛나는 용암으로 게임의 흐름을 바꿉니다. 필드가 더 위험해지고 '빨간 것은 위험한 것' 이라는 생존 본능이 게임 플레이 방식을 변화시킵니다.
테크니컬 아트
안녕하세요 저는 Battery Jam에서 주변 환경과 캐릭터 모델링, 특수효과와 라이팅을 맡은 Everett Gunther입니다. 저는 빠르게 필드에 생동감을 추가하는 방법에 대해서 말씀드리려고 합니다.
게임의 톤과 에너지는 배경음악과 맞추어 흘러가므로 배경 아트의 움직임 제어가 첫 번째 목표였습니다. 이러한 제어의 크게 주요한 부분은 간단한 머티리얼 deformation 에 의해서 표현되었습니다. 예를 들어, 흔들리는 깃발과, 바람에 흔들리는 풀, 리듬에 맞게 움직이는 스피커 등이 그렇죠. 스피커를 어떻게 만들었는지 그럼 한 번 살펴보도록 하겠습니다.
저는 deformation이 버텍스 모델에 의해 정의될거라고 생각했기 때문에 스피커를 만들 때, 저는 스피커 모양을 납작한 표면에 스피커 모양의 콘 형태로 시작했습니다. 저는 간단한 흑백의 마스크를 만들고 deformation 의 weight라고 정의했습니다.
언리얼 엔진 4에서, 저는 씬 위의 애셋을 선택하고 Vertex Paint 모드로 변경했습니다. 저는 import from targa 옵션으로 버텍스 컬러 마스크를 임포트하였습니다. 이 방법은 텍스쳐를 더 적은 연산을 사용하는 버텍스 컬러 데이터로 사용할 수 있었습니다.
스피커용 머티리얼 설정은 sine 함수의 직접 출력값으로 마스킹하는 방법으로 펄스 효과를 만들어 줄 linear sine 노드를 사용하였습니다.
그 결과값은 버텍스 노말 값과 곱해졌고, 버텍스 컬러 데이터는 실제 deformation이 되도록 월드 좌표로 넘어갑니다. 대부분의 deformers 는 이런 기본 설정으로부터 서로 다른 방법으로 완성시킵니다. 아래에 씬 위의 결과물이 있습니다.
그리고 아래에는 또 다른 사용예가 있습니다. 개울물의 높이를 애니메이션 한 것입니다.
필드의 주변 환경을 가능한 생동감있게 만드는 것이 저의 첫째 목표였습니다. 저희는 이런 기본적인 방법으로 잔디가 흔들리게 한다든지, 풀들이 음악에 맞게 흔든다든가, 호버카가 공중에 떠서 위 아래로 움직이고, 깃발이 바람에 흔들리는 것 기타 등등의 애니메이션을 만들었습니다. 언리얼 엔진은 따로 애니메이션을 제작하지 않고도 머티리얼로 동작 조절이 가능하여 수 많은 곳에 적용할 수 있도록 도와주어서 저희 팀이 엄청나게 시간을 절약하고 게임이 더 깔끔하게 보일 수 있도록 하였습니다.
블루프린트 스크립팅
안녕하세요! 저는 프로젝트에서 블루프린트를 담당한 Esther Nho입니다. 여러분이 게임에서 보시는 모든 상호작용은 블루프린트만으로 만들어졌습니다. 스크립팅을 시작할 당시만 해도 팀에서 겨우 두 명 정도만 기초적인 지식이 있었기 때문에 블루프린트 시스템은 게임 제작에 있어 매우 도움이 되었습니다. 게임플레이에 추가가 필요한 다양한 툴들을 완전히 다루는 것은 아주 쉬웠습니다.
비주얼한 스크립팅은 버그를 찾아내기 쉬웠습니다. 해결이 어려운 버그는 우회할 수 있었습니다. 만약 한 방법이 통하지 않으면, 언제나 또 다른 방법들이 존재했습니다.
예를 들어, Battery Jam은 게임패드 컨트롤러로 게임이 진행됩니다. 한 가지 대두되었던 문제로는 게임 내에서 위젯을 컨트롤러로 다루는 것이었습니다. 저희는 그 때에 4.6버전을 사용하고 있었고, 이후에 4.7로 업데이트 하였으나 여전히 게임패드 입력 이벤트를 위젯에서 지원하지 않았습니다.
이 문제를 우회하기 위한 해결 방법은 각 위젯마다 블루프린트 액터를 놓고 컨트롤러 입력을 받는 것이었습니다. 어느 메뉴가 불려오든 간에 이 블루프린트로 모든 플레이어 컨트롤러의 입력을 받을 수 있었습니다. 이 액터는 컨트롤러 이벤트를 받아서 연계된 위젯에 커스텀 이벤트를 호출하는 데 사용되었습니다.
저희가 사용한 "버튼"을 텍스쳐로부터 만든 컨트롤입니다. 애니메이션은 UMG 편집기에서 만들어졌고 포커스가 있을 때 재생됩니다.
저희는 버튼에 사용할 두 개의 이미지 배열로 노멀과 포커스 상태의 이미지를 각각 저장했습니다. 플레이어들이 메뉴를 돌아다닐 때, 어느 버튼에 포커스가 있는지를 보고 해당 이미지가 tick 이벤트로 보내집니다. 플레이어들이 버튼 포커스 상태에서 패드 버튼을 누르면 현재 메뉴에서 선택된 버튼의 이벤트가 실행됩니다. 컨트롤러 블루프린트는 메뉴를 호출할 수 있는 맵의 어느 부위에라도 올려져 있으면 됩니다.
위에서 Brandon이 말했듯, Battery Jam은 20주 이상의 기간동안 제작되었습니다. 저희는 전에는 엔진 전문가도 아니었습니다. 엄격한 제출 시한 때문에 저희의 주된 관심사는 가능한 버그가 적게 동작하는 것이었습니다. 그 때는 완성을 하였으니 어떻게 했는지는 중요하지 않았습니다. 요즘에 스크립트를 다시 열어보니 특정 로직들의 더 우아한 해결 방법이 보이네요. 저희가 앞으로 더 나감에 따라, 기술을 대하는 마음가짐은 더 많은 스크립트가 장기적인 관점에서 유연성을 갖도록 하는 것에 집중해 가고 있습니다. 아 그리고 더 많이 빵빵 터지도록 말이죠!