들어가며
마지막 성장 기록으로부터 대략 한 달이라는 시간이 지났다. 그동안 글을 올리지 못했는데, 뭐.. 놀았던 건 아니고, 무언가를 배우고 활용할 때마다 하나하나 리뷰하고 진행하려니까 답답해서 그냥 쭉 해본다는 게 이렇게 됐다.
이렇게 쭉 하다 보니까 다시 한번 비약적인 성장을 이뤄내긴 했는데, 얻는 게 있다면 잃는 것도 있는 법. 막상 진도를 빼고 나니 블로그에 써야 할 것들이 너무 많아 부담이 됐다.
이에 어떻게 해야되나 고민을 하던 찰나, 아래와 같은 아이디어가 떠올랐다.
모든 것을 기록하기보다는 주기적으로 수확제(收穫祭)라는 컨텐츠를 통해 성장 과정을 리뷰하는 건 어떨까?
수확제, '농작물의 수확을 축하하는 행사'.. 이러한 개념은 주제(subject)라는 씨앗을 심고 정성 어린 노력을 통해 경험이라는 수확물을 얻는다는 점에서 학습을 은유하기에 충분해 보였다.
그리고, 무엇보다 '수확제'라는 명칭.. harvest festival.. 뭔가 오타쿠의 가슴에 불을 지피는 낭만을 품고 있다 ㅋㅋㅋ.
이에 오늘은 이런 개요를 갖고 열게 된 제1차 수확제(收穫祭) : 개(開)에 대한 내용을 작성하고자 한다. 다음의 목차를 살펴보도록 하자.
목차
- 1인 개발 졸업 작품 프로젝트 : Breath in Winter (feat. Coloso 환급 챌린지 10기)
- 성장의 초석 : 게임 개발의 삼위일체
- 디자인의 증명 : 게임 디자인 연구 프로젝트
- 게임 개발과 Github : 저장소가 터졌어요!
수확했습니다!
1인 개발 졸업 작품 프로젝트 : Breath in Winter (feat. Coloso 환급 챌린지 10기)
23년 12월 말, Coloso에서 환급 챌린지 이벤트 신청을 받는다는 걸 알게 됐다. 당시의 나는 Coloso 환급 챌린지에 별다른 미련이 없었다. 그래도 한 번쯤 둘러보던 중 배민천님의 'FPS 게임 개발로 한 번에 입문하는 언리얼 엔진' 강의를 보게 됐다(광고 아님! 내돈내산!).
해당 강의는 23년 초에 오픈되면 듣겠다고 해놓고, Coloso 강의 자체에 대한 흥미를 잃어 그동안 잊고 있었던 강의였다. 믈론 Coloso라는 플랫폼과 강의 자체는 좋았지만 막상, 열심히 따라 하면서 듣고 나면 모작한 것 외에는 남는 게 없다고 생각했었다.
그냥 다음에 혼자 공부하다가 '아, 맞아. 이런 게 있었지.'라고 생각할 정도에 불과했다. 그래서, 그냥 아예 처음부터 혼자 공부하는 게 낫지 않겠냐는 생각에 Coloso 강의에 대한 미련을 접고 있었다.
하.지.만, 배민천님의 강의는 여타의 개발 강의들과는 다른 차별점이 있었다..! 바로, 블루프린트에서부터 시작해서 C++ 개발과 형상 관리까지..! 단순하게 어떻게, 무엇을 개발할 수 있는지를 넘어, 스스로 한 사람의 개발자로 성장하기 위한 지식의 줄기를 마련해 준다는 점에서 매력적으로 보였다. (다시 한번 말하지만 광고 아닙니다! 하늘땅별땅 다 걸구!)
그래서, 이번에도 'FPS 게임 개발로 한 번에 입문하는 언리얼 엔진' 강의로 다시 한번 환급 챌린지에 참여하며 6주 간 경험을 쌓았다.
그리고, 결과적으로 나는 목표를 매우 성공적으로 달성할 수 있었다.
당시에 졸업 작품 프로젝트로 VR FPS 게임을 개발하고 있었는데, 이번에는 지난 챌린지들과 달리 마냥 따라 하는 것이 아니라 연사님에 전개한 지식의 줄기 위에서 내 의도를 더해가며 책과 포럼을 뒤져 따로 연구와 개발을 진행했다.
그 과정에서 단순히 기능 구현을 위한 지식을 넘어 그래픽스, 애니메이션, VFX, Unreal Engine의 동작 방식(GC 과정 등등..) 등을 키워드 중심으로 하나씩 이해해 가며 성장하기 위한 기반을 마련할 수 있었다. 이게 가장 큰 성과였다고 생각한다.
오늘은 챌린지에 대한 글이 아닌 수확제에 대한 글이니 이번 항목은 이쯤하고 마무리 짓겠다. 정리하자면 나는 이번 6주 간의 성장을 통해 나는 아래의 3가지 무기를 얻었다고 할 수 있다.
- 프로그래머들과의 원활한 소통을 위한 기획 방법
이전까지는 플로우 차트를 그린 기획서만 전달했는데, 단순히 기획서를 전달하기보다는 프로그래머분께 '내가 원하는 의도를 표현하기 위해 A라는 방법을 사용할 수 있는지, 이에 대해 어떻게 생각하시는지.'를 계속 물어보면서 프로그래머분과 나의 괴리를 줄여나갈 필요가 있다는 걸 알게 됐다. (물론 어쭙잖은 지식으로 나대지는 말자! 히힣..)
다시 한번 느끼지만 지금까지의 나는 나의 교만으로 소통이 아닌 지시를 했다는 걸 깨달을 수 있었다. 반성하자. - 개발자로서 성장을 위한 기반
- 게임 디자이너로서 성장을 위한 기반
2번과 3번은 조금 길어질 것 같아서, 다음 항목 '성장의 초석 : 게임 개발의 삼위일체' 파트에서 후술하도록 하겠다.
추가로, 아래에 6주 간의 결과물(완성 아님!)을 첨부할 테니 궁금하다면 확인 바란다. 그리고, 혹시라도 챌린지 기간의 나의 성장 과정이 궁금하다면 아래의 블로그에서 확인할 수 있다. (아주 살짝 늘여 써서 읽기 불편할 수도 있음 😅)
성장의 초석 : 게임 개발의 삼위일체
이전부터 게임 디자인에 어려움을 느낄 때마다 아래와 같은 생각을 하곤 했다.
게임 디자이너가 게임 디자인만으로 성장할 수가 있나..?
지망생 주제에 이런 말을 하는 것도 웃기긴 한데, 게임 디자인에 대한 분석을 진행하고, 이걸 응용해서 내가 좋다고 생각할 수 있는 디자인을 해봐도 이게 실제로 좋을지 나쁠지는 감이 잘 오지 않았다.
뭐.. 내가 감각이 없는 걸 수도 있는데 실제로 바로바로 확인할 수가 없다 보니 그냥 답답했다. 그래서, 오히려 게임 디자인 관련된 나만의 개념을 정립하려 애를 썼던 것 같고, 거기에서 안정감을 찾으려 했던 것 같다.
그리고, 지금에 와서는 이런 것들이 쌓이고 쌓여, 나만의 디자인 철학이라고 할만한 게 드디어 어느 정도 형성된 상태다. 혼자 아이디제이션 할 때도 아이디어에 근거와 의도, 그리고 결과가 대충은 그려져서 그 덕을 슬슬 체감하고 있는 중이다.
이런 덕을 보고 있는 와중에 다음과 같은 생각이 들었다.
나.. 고립되는 거 아닌가?
내가 아무리 천재적인 체계를 구축하고(예시입니다. 예시!), 개념을 바탕으로 경험을 구성할 수 있다고 하더라도, 게임 개발은 철저히 협력 위에서 이루어지기에 이를 제대로 전달하고 표현하지 못하면 모든 건 말짱 도루묵이다.
그럼, 나는 어떻게 해야 하는가? 더 이상 경험을 파고들며 철학을 강화하기보다는 더 좋은 전달력을 위해 문서 작성에 시간을 쏟아야 하는 것인가?
글 쓰고 정리하는 걸 좋아하는 만큼 문서를 작성하는 것도 좋지만, 뭔가 비효율적이라는 생각이 들었다. 더 좋은 방법이 있을 것 같았다.
그때, 아래와 같은 생각이 들었다.
아니.. 개발을 할 줄 알고 관심도 있으면, 전달력을 고민할 시간에 노력을 조금 더 투자해서 확실한 프로토타입을 만들면 되는 거 아닌가?
미친 생각이다.. 나라는 사람은 미친놈임이 분명하다.. 당장에 주변 사람들과 지망생 커뮤니티를 봐도 하나라도 제대로 준비하라며, 여러 가지를 동시에 준비하는 사람은 없다.
그렇지만.. 내가 누구인가?
애초에 현재 나의 모든 사고는 게임 개발에 집중되어 있다. 남들이 두 가지를 할 시간이 부족해서 한 가지만 한다면, 세 가지를 할 시간을 확보하면 되는 것 아닌가?
이번에 졸작 프로젝트를 진행하면서 해외 포럼이나 레딧을 자주 참고하는데 문득 궁금해져서 게임 디자인 관련 커뮤니티에 가보니 나 같은 사람들이 많았다. 실험과 증명을 통해 방법론적인 접근으로 더 좋은 경험을 전달하기 위한 방법을 연구하는 사람들이 많았다!!! 최고지 않나! 내가 추구하던 방법은 틀리지 않았다!
최초의 디자이너는 본디 개발자이자, 아티스트였다. 그저 시장이 몸집을 키우는 과정에서 효율만을 쫓으며 지금의 역할만이 남아있을 뿐. 원래는 가장 기술 스펙트럼이 넓고, 감각적인 사람이 서로의 아이디어에서 만들어진 게임의 설계를 정리하고, 시스템을 조율하며, 게임 디자인이라는 역할을 수행했다.
이에 나 또한 이런 길을 밟아보려고 한다.
혹자는 이런 질문을 던질지도 모르겠다.
왜 굳이 힘든 길을 가려고 하지..? 꼭 그렇게 까지 해야 하나?
.. 맞는 말이다. 어쩌면 이상에 찌든 지망생의 과대망상이자 자의식 과잉일 수도 있다. 아니, 어쩌면 정말로 하나에만 집중해도 모자랄 시기에 여러 개를 파는 게 비효율적이고 바보 같은 짓일 수도 있지.
그렇지만, 나는 개인적으로 배움에 가성비를 따지는 게 스스로의 가능성을 갉아먹는 일이라고 생각하기에 한 번 제대로 부딪혀보려고 한다. 비효율적이더라도 낭만이 있지 않나. 이런 낭만에서 만들어진 디테일이 나를 새로운 지평으로 이끌 것이다.
나는 유저들에게 재미있다는 느낌을 전달하기 이전에, 팀원들에게 재미있을 거라는 확신을 주어야 하고, 그 이전에 나부터 게임이 재미있을 거라는 확신을 가져야 한다. 그리고, 이렇게 나 자신의 디자인에 확신을 갖기 위해서는 내 스스로 나의 감각과 의도를 검증할 수 있는 능력이 필요하다.
이건 이를 위한 무기가 될 것이다. 많은 사람들이 터무니없다고 생각할 정도로 어려운 만큼, 이를 해내면 나는 독보적인 존재로 설 수 있을 것이다.
그리고, 혹시라도 실패한다면 어떤가. 나는 아직 어리다. 20대의 나의 목표는 최대한 성공적인 실패를 반복하는 것. 인생은 실패 한 두 번으로 끝나는 게임이 아니다. 머리 한번 제대로 깨져보자.
지켜봐라. 나는 나아간다.
디자인의 증명 : 게임 디자인 연구 프로젝트
게임 디자인 연구 프로젝트는 앞서 언급한 삼위일체의 연장선이다.
지금까지는 디자인과 프로그래밍, 아트를 분리해서 생각했기에 다른 직군에 대한 이해도 생각의 범위도 얕았다. 하지만, 개발 과정에서 각 파트별로 나뉘어있다고 해서, 유저들까지 각 파트를 나누어 경험하는 건 아니다. 따라서, 파트의 구분 없이 내가 더 좋은 경험을 전달하기 위해 필요한 것이라고 생각되면 바로 연구하고자 했다.
그리고 이 과정에서 이전까지는 경험 설계에 대해 단순히 팀원이 개발한 걸 확인하거나 망상 회로를 돌려가면서 검증했다면, 이후부터는 직접 디자인 유닛별로 개발 및 테스트를 해보면서 각 유닛의 특성에 대한 감각을 이해하기를 바랐다.
직관적으로 이해가 안 될 것 같아서 딸기 쇼트 케이크로 예시를 들어보겠다.
이전까지의 나는 딸기 쇼트 케이크(이하 케이크)라는 경험을 만들기 위해 단순하게 케이크에 어떤 특성이 있는지 분석하고, 각 부분을 준비했다.
'달콤하다.', '부드럽다', '딸기가 있다.'.. 이러한 특성을 바탕으로 달콤하기 위해 A 시스템을, 부드럽기 위해 B 시스템을, 딸기를 넣기 위해 C 시스템을 준비한 뒤 이것들을 엮어냈다. 그러나, 이 과정에서 특성에 대한 비전이 매 순간 뚜렷하지 않았을 때 케이크가 아닌 익은 딸기가 나오는 경우가 있었다.
분명 사전에 정의한 '달콤하다.', '부드럽다.', '딸기가 있다.'라는 특성에는 부합하지만 내가 원하지 않는 결과가 나온 것이다.
물론 사전에 더 자세하고, 구체적으로 정의하며 지속적으로 비전을 공유하고 확인하면 된다. 하지만, 너무 번거롭지 않은가. 나는 이러한 추상적인 정의를 통해 재미를 구현하는 과정에서 의도가 변질될 가능성이 크다고 생각했다.
이에 나는 아래와 같이 생각했다.
디자인은 모듈화 할 수 없나?
모듈화란 각 부품을 조립하기 쉽게 규격화함으로써 결과물에 대한 확장성을 갖도록 하는 것을 말한다.
위의 케이크를 다시 예시로 들면, '달콤하다.', '부드럽다.', '딸기가 있다.'라는 결과적 특성에 초점을 맞춰 새로 레퍼런스를 찾고, A, B, C 시스템을 구축하기보다는, 새콤달콤한 딸기, 부드러운 빵, 맛을 기분 좋게 섞어주는 크림이라는 모듈을 사전에 정의하고, 원하는 결과물에 맞게 살짝씩 변형해 조립함으로써 훨씬 쉽게 의도에 맞는 경험을 구성하자는 것이다.
이렇게 되면 게임 디자이너가 평소에 지속적으로 연구를 하고 데이터를 쌓으며 경험을 정의할 필요가 있지만, 그러한 노력 이상으로 전달의 오류를 줄이고 결과물의 품질을 높일 수 있을 것으로 기대하고 있다.
아마 이게 이전에 작성했던 'How To Steal Like a Game Designer'에서의 잘 훔치는 핵심인 것 같다는 생각을 했다. 아티스트가 훔친다는 것은 필요한 그때마다 가져오는 것이 아닌 사전에 아티스트의 철학으로 녹여내는 작업이 선행돼야 한다는 것을 깨달았다.
이에 나 또한 말뿐인 철학이 아닌 나의 철학으로 녹여낸 모듈을 정의하기 위해 이번에 게임 디자인 연구 프로젝트 시작했다.
현재는 조만간 진행할 관능성(官能性) 연구를 위해 Side Scrolling 조작과 레벨만 구현해 놓은 상태인데, 이 과정에서 나이아가라 시스템, 레벨 블루프린트, PCG(Procedural Content Generattion), Material Graph 등의 노드 기반 로직 구성이 반강제적으로 필요한 요소들을 제외하면 전부 C++로 구현을 진행하고 있다.
졸작도 그렇고, 최적화를 진행하거나, 내가 최근에 관심을 갖고 있는 쉐이더를 깊이 파려면 C++는 필수적이라고 생각해서 연구 환경을 구현하는 과정에서 겸사겸사 함께 익히고 있다.
이 또한 다른 부분과 마찬가지로 어느 정도 성과가 나와서 공유할만해지면 따로 글로 정리하도록 하겠다.
게임 개발과 Github : 저장소가 터졌어요!
이번 항목이 수확제의 마지막이다. 2월 초쯤부터 형상 관리를 위한 플랫폼 Github(이하 깃)에 commit 한 내역이 push 되지 않았다. 처음에는 단순 무료 storage 대역폭 문제인 줄 알고 넘겼는데, 나중에 자세히 확인해 보니까 LFS(Large File Storage) 문제였다.
개발에 형상 관리를 본격적으로 쓰기 시작한 게 얼마 되지 않아서 그냥 별생각 없이 기본 unreal engine에 맞는 gitignore 파일을 사용하고 있었는데, 이게 starter contents를 포함해서 기본 에셋 파일들을 track 해버린 게 문제였다.
여기에 더해 이전부터 가끔 프로젝트를 할 때마다 별 다른 분별없이 그냥 모든 에셋과 소스를 올렸는데, 이게 문제가 됐다.
그래서, 해결 방법을 찾아봤는데 방법은 딱 하나였다. LFS 파일을 버전 관리하고 있는 repository를 삭제하는 것.. 이것 외에는 이미 관리가 되고 있는 LFS 파일을 삭제할 방법이 없었다. 이에 나는 눈물을 머금고 문제가 되던 repository들을 삭제했다.
.. 이미 문제가 발생한 건 어쩔 수 없다. 중요한 건 다음부터 똑같은 문제가 발생하지 않도록 원인을 파악하고 개선하는 것이다.
이에 나는 문제 원인을 생각해 봤다. 이건 단순하게 툴을 자세히 살펴보지 않은 내 부주의였다. 21년 당시에 메타버스 챌린지를 진행할 때, 일단 다른 개발자들이 깃을 사용하니 나도 써보기는 해야겠는데, 용량이 큰 파일은 LFS로만 버전 관리를 지원한다고 하니 뭣도 모르고 일단 설정한 게 지금까지 그대로 이어져온 것이다..
이를 고치기 위해 가장 먼저 어떻게 형상 관리를 할 것인가 고민했다. 게임을 개발하다 보면 대용량의 에셋이 생기기 마련이고, 엔진 자체의 코드와 컨텐츠 또한 그 크기가 만만치 않다.
방법은 단순했다. 형상 관리를 하는 목적은 소스 코드의 변경 이력을 확인하고, 언제든 해당 시점으로 돌아갈 수 있도록 기록하는 것. 모든 코드를 관리할 이유가 없다.
그래서, 가장 먼저 엔진 코드와 기본 컨텐츠를 포함해 내가 수정하지 않은 것들은 깃에 track 되지 않도록 gitigonore 파일을 수정함으로써 일부분만으로 전체 형상을 관리할 수 있게 했다. ('일부 제외'에서 '전체 제외 후 일부 허용'으로 변경)
그리고, 애초에 track 여부를 떠나 대용량 파일이 push 되지 않도록 분별없이 추가했던 gitattributes 파일의 LFS track 설정을 삭제했다.
이렇게 하니 이전보다 훨씬 가볍고 빠르게 형상 관리를 할 수 있었다. 사실 당연하게 진작 이렇게 했어야 됐는데.. 그 시절의 나태가 낳은 참사다..
아무튼 이렇게 문제가 되는 부분을 해결한 뒤에는 다른 repository를 살펴보며 설정이 잘못된 건 없는지, 제대로 형상 관리를 하고 있는 건지 돌아봤고, 이 과정에서 전체 repository의 이름과 설명, 설정을 통일성 있게 수정해 놨다.
왜 영문으로 했냐고? 혹시 모를 해외 컨택의 바람을 담아.. 영문으로 정리했다. 그런데 해외 컨택을 받을 정도가 되려면 당장에 블로그부터 영문으로 갈아엎고, 유튜브든 뭐든 해야 될 듯 😂.
이렇게 repository 정리를 끝내고 나니까 보기에 좋아, 또 다른 욕심이 생겨서 깃 프로필을 꾸며보기로 했다. 마크다운이며, 뱃지며 뭐 신경 쓸 게 많았는데 힘든 과정은 이후에 형상 관리 구축 방법과 함께 다른 글에서 자세히 설명하기로 하자.
결과만 보면 아래와 같이 이쁜 프로필을 구성할 수 있었다.
마치며
이렇게 지난 한 달간 시간을 투자했던 것들에 대한 수확제를 진행해 봤다. 어떻게 재미있게 봤는지 모르겠다.
사실 여기에는 현재 관심을 두고 있는 쉐이더와 이펙트, 관능성에 대한 초안 등과 <Breath in Winter> 프로젝트를 진행하며 활용했던 것들(behavior tree와 black board, AI perception과 stimuli source, animation을 위한 툴, 흔들림 때문에 고생했던 spline movement, 아직 미완인 procedural terrain generation 등), 디자인 연구를 위한 기반을 마련하는데 활용했던 것들(c++ enhanced input binding action, character movement, 진행 중인 procedural content generation 등)을 간단하게나마 리뷰하려고 했다.
그런데 이렇게 되면 글이 주제가 섞인 채 필요 이상으로 길어지기도 하고, 가장 크게는 그냥 귀찮아서 이렇게 간단하게만 남기려고 한다.
나는 글을 쓰는 걸 좋아하기만 할 뿐, 빨리 쓰지는 못해서 이제는.. 내가 배우는 모든 것을 하나하나 기록할 수가 없다.. 나의 원활한 성장을 위해 앞으로도 이렇게 수확제라는 형태로만 성장을 기록하고, 특히 신기했던 경험이나 유의미한 내용이 있을 때에만 따로 제대로 된 글로 찾아오도록 하겠다. (모든 내용을 담지 못하는 만큼 하나라도 제대로 쓰겠읍니다..)
그리고 앞서 말한 기술들 같은 경우는 개인적으로 체화하지 못한 지식을 기록하는 걸 좋아하지 않기에 추후 연구 중 따로 개발을 할 때 다시 한번 사용해 보면서 차근차근 정리하도록 하겠다.
그럼 오늘의 글은 여기서 마치고 이만 사라지도록 하겠다. 이번에도 긴 글 읽어줘서 고맙고, 오늘도 좋은 하루 보내길 바란다 😉.
'일상' 카테고리의 다른 글
2023년 연말 회고 : 정제 (精製) (0) | 2024.01.01 |
---|---|
근황, 그리고 앞으로의 계획 (0) | 2023.09.15 |
[2023 넥슨 대학생 게임잼 후기] 시럽시럽 메이플 시럽! (0) | 2023.07.27 |
요코오 타로는 신인가? (2) | 2023.06.01 |
1월은 나의 레벨 디자인 (2) | 2023.02.04 |