관리 메뉴

ScienceBooks

19편 수학으로 게임하기, 게임으로 수학하기 본문

(연재) 나는 생각한다, 고로 수학한다

19편 수학으로 게임하기, 게임으로 수학하기

Editor! 2021. 2. 24. 16:35

코로나가 장기화되면서 학부모들의 고민이 깊어 가고 있습니다. 자녀들의 공부 고민이죠. 특히 비대면 교육이 일상화되면서 아이들이 컴퓨터 화면을 통해 보고 있는 게 게임인지, 코딩 수업인지 구분하기 힘들어진 게 현실입니다. 그렇다고 학교 다닐 때처럼 컴퓨터 사용 시간을 통제해서 게임과 공부를 구분할 수도 없죠. 게다가 아이가 “나는 커서 게임 만들 거니까 수학 공부는 필요 없어!”라고 말한다면 답답하겠죠. 마스크보다 더 답답한 학부모들의 마음을 대변한 고호관 선생님의 수요 수학 에세이를 소개합니다. 한번 읽어 보시죠.


고호관의 수요 수학 에세이 19편

나는 생각한다, 고로 수학한다

 

19편 수학으로 게임하기, 게임으로 수학하기



언젠가 인터넷을 돌아다니다가 이미지 하나를 본 적이 있다. 어떤 꼬마 하나가 수학 공식이 쓰인 칠판 앞에서 머리를 싸매고 있고, 그 위에 나는 커서 게임을 만들 거니까 수학은 공부할 필요 없어!”라는 말이 영어로 쓰여 있다. 그 밑에는 파안대소하고 있는 사람들 그림이 있고, 그 웃는 사람들 각각에는 C++, Open GL 같은 말이나 모종의 로고가 있다.

 

C++이 프로그래밍 언어라는 것 말고 나머지는 잘 알지 못했지만, 이 농담을 이해하는 건 어렵지 않았다. 아마도 게임을 만드는 데 필요한 언어나 도구일 것이다. 그리고 웃는 이유는 뻔하다. 수학을 모르면서 게임을 만들겠다는 말이 어처구니없기 때문이다. 게임을 만들기 위해 프로그래밍 언어나 도구를 다루려면 수학이 꼭 필요하다는 뜻일 테다.

 

 

수학을 모르고 게임을 만들겠다는 아이가 있으면,  다 함께 웃어 줍시다!?  인터넷 밈.

 

 

게임 만들다 배운 좌표

 

일전에 난수에 관한 이야기를 할 때 잠시 언급한 적이 있는데, 어린 시절에 컴퓨터 프로그래밍을 배우면서 간단한 게임을 만들어 본 적이 있다. 아는 것도 없이 무작정 흉내만 내 어설프게 만들었지만, 나름대로 생각해야 할 게 많았다. 그때의 기억을 잠시 돌이켜 보자.

 

즐겨 만들었던 게임 중 하나가 비행기 두 대가 서로 공격하는 2인용 게임이었다. 화면 양 끝에 각각 비행기가 한 대씩 있고, 양옆으로 움직이며 미사일을 발사해서 상대방 비행기를 맞히면 이긴다. 여기서 중요한 건 비행기와 미사일의 위치였다. 키를 조작할 때마다 비행기의 위치를 옮겨야 했고, 미사일을 발사하면 일직선으로 쭉 날아가게 만들어야 했다. , 미사일이 비행기를 맞췄는지도 프로그램이 판정할 수 있어야 했다.

 

이때 나는 좌표 개념을 익혔다. 화면은 좌표 평면이었고, 변수를 이용해서 비행기와 미사일의 위치를 나타낼 수 있었다. 비행기와 미사일의 좌표가 일치하면 명중한 것이다. 미사일끼리 충돌할 때도 생각해야 했다. 그리고 조건문을 이용해 비행기와 미사일의 위치가 미리 정해 둔 범위를 넘어가지 못하도록 했다. 아마 이 정도였던 것 같다. 이보다 더 복잡한 것을 짜기에는 내 능력이 따르지 않았고, 베이직이라는 언어도 너무 느렸다.

 

좀 더 게임 같은 게임은 다른 사람이 만들어 놓은 것을 이용했다. 잡지나 책에 실린 프로그램을 입력하면 게임을 즐길 수 있었다. 그때는 정말 게임 한 번 하는 것도 쉽지 않았다. 그중에서 기억나는 것 중 하나가 대포 게임이었다. 화면 양쪽에 대포가 한 대씩 있고, 그 사이에는 산 또는 계곡이 있었다. 매번 실행할 때마다 무작위로 위치나 산의 높이 또는 계곡의 깊이가 달라졌다.

 

게임 방식은 단순했다. 두 사람이 번갈아 대포를 발사하는 각도와 힘을 수치로 입력한다. 그러면 그에 따라 대포알이 날아간다. 그 궤적을 보고 각도와 힘을 조절해 가며 먼저 상대의 대포를 파괴하면 이긴다. 예전에 유행했던 포트리스라는 게임의 아주 단순한 버전이다.

 

대포의 궤적은 삼각 함수를 이용하면 구할 수 있다. 발사한 힘과 중력 가속도를 고려해야겠지만, 고등학교 수준의 수학이면 수식을 만들 수 있을 것 같다. 대포알이 대포를 맞혔는지는 아까처럼 좌표 개념을 이용해 판정할 수 있다. 다만 실제로 내가 했던 게임은 화면 위에서 대포알이 있는 위치의 색을 이용해 판정했던 것으로 기억한다.

 

 

 

게임 제작 체험 행사에서 모델로 사용했던 게임 중 하나가  ‘플래피 버드 (flappy bird)’ 다.

 

 

이게 게임 책이야, 수학 책이야?

 

수학 잡지의 편집장으로 일하던 시절에 우리 잡지에서는 독자를 초청해 게임 제작을 경험하는 행사를 진행했다. 어린 학생들이 하루 이틀 만에 새로운 게임을 뚝딱 만들어 낼 수는 없는 노릇이라 간단한 형식의 게임을 기본 틀로 삼고, 거기에 자기만의 배경 스토리, 캐릭터를 입혔다. 그렇게 해서 최종 결과물로 점프하며 아이템을 먹어 점수를 쌓는 횡스크롤 게임을 만들었다.

 

별거 아닌 일 같아도 여기에는 수학 내지는 수학적인 사고력이 들어간다. 이날 참가 학생들은 과거의 나처럼 좌표 개념을 배웠고, 스크롤 속도, 점프 속도, 점프 높이, 아이템별 점수, 아이템별 등장 빈도와 같은 수치를 조절해 가며 각자 원하는 게임성을 구현했다. 물론 이렇게 하루 만에 간단히 게임을 만들 수 있었던 건 웬만한 기능이예를 들어, 점프하는 캐릭터의 궤적을 구하는 것 같은 기능이이미 구현되어 있는 제작 도구를 이용했기 때문이다.

 

이런 도구를 게임 엔진이라고 부른다. 게임 회사에서는 게임 엔진을 제작하거나 구입해 게임을 만드는 데 쓴다. 행사 도중에 학생들과 공간을 제공한 게임 회사를 견학하는 기회도 얻었는데, 도서관을 둘러보던 나는 게임 엔진에 관한 책이 꽂혀 있는 것을 보고 내용이 궁금해서 한번 꺼내서 훑어보았다.

 

…… 그리고 바로 덮었다. 내 눈으로는 수학 전공 서적과 구분할 수 없을 만큼 수학 공식이 가득히 들어차 있었다. 물체가 어디에 부딪혀 튕길 때의 움직임 따위를 나타낸 그림과 수식 정도가 그나마 내가 이게 무엇을 말하고 있는 건지 알아볼 만한 내용이었다. 이용만 하는 거라면 덜할지 몰라도 게임 엔진 자체를 개발하는 건 수학을 모르고서는 도저히 할 수 없는 일이라는 인상은 강하게 받을 수 있었다. 그러니 게임을 만들 거니까 수학은 공부할 필요 없다.”는 아이를 앞에서 본 인터넷 밈에서 그렇게 비웃었던 것이다.

 

한 가지 예를 들어 보자. 컴퓨터 게임에 관심이 많은 사람이라면 요즘 레이 트레이싱(Ray Tracing)’이라는 단어를 많이 접했을 것이다. 레이 트레이싱은 말 그대로 광선 추적기술이다.

 

우리가 주위를 볼 수 있는 건 빛이 눈에 들어오기 때문이다. 빛은 어디선가 나와 우리 눈에 들어오기까지 여러 가지 물체에 부딪쳐 반사된다. 그래서 명암도 있고, 유리에 주위 풍경이 반사되 비치기도 한다. 레이 트레이싱은 게임 속 가상의 환경에서 빛의 경로를 추적해 가상의 물체와 부딪쳤을 때의 상호 작용을 구현하는 기술이다. 이 기술을 이용하면 게임 그래픽 속의 그림자나 반사광을 현실처럼 나타낼 수 있다. 미리 만들어 두는 것도 아니다. 게임을 하는 동안 실시간으로 연산해서 보여 주므로 어떤 상황이 펼쳐져도 실감 나는 장면을 볼 수 있다.

 

물론 조금만 생각해 봐도 여기저기 부딪쳐 반사되는 빛의 경로를 일일이 계산한다는 게 쉬운 일이 아님을 알 수 있다. 가능한 한 효율적으로 계산할 수 있는 알고리듬이 있겠지만, 이 기술을 구현하려면 여전히 막대한 연산력이 필요하다. 아쉽게도, 최상급의 그래픽으로 게임을 즐기려면 아직은 100만 원을 호가하는 그래픽 카드를 사야 한다. 여담이지만, 전자 화폐 가격이 상승하면서 고성능 그래픽 카드가 대량으로 전자 화폐 채굴장에 끌려가는 바람에 그래픽 카드 가격도 급등해 수많은 게이머가 안타까워하고 있다.

 

 

레이 트레이싱 알고리듬을 설명하는 위키피디아 항목을 갈무리한 화면 일부.  위키피디아에서.

 

 

게임 운영도 수학으로

 

수학을 열심히 공부해서 그래픽도 멋지고 최적화된 잘된 게임을 만들었다고 하자. 수학의 역할은 여기서 끝일까? 그렇지 않다.

 

예전에는 게임을 잘 만들어서 팔면 되었지만, 지금은 게임이 오랫동안 사랑을 받을 수 있도록 운영을 해야 할 때가 많다. 승률이 균형 있게 나오도록 캐릭터의 능력치를 조절해야 할 수도 있고, 캐릭터나 아이템을 뽑을 확률을 적절히 정해야 할 수도 있다. 이런 일을 제대로 하지 못하면, 플레이어가 떨어져 나간다. 너무 돈만 밝히는 식으로 운영하면 욕을 먹기도 한다.

 

데이터 분석도 필수다. 각 캐릭터에 대한 플레이어의 선호도, 어떤 변경 사항에 대한 반응, 플레이 방식, 접속자 수, 접속 시간 등 여러 가지 데이터가 있을 수 있고, 이런 데이터를 분석하면 게임을 재미있게 유지하고 인기가 떨어졌을 때 문제를 파악하는 데 도움이 된다.

 

MMORPG(대규모 다중 이용자 롤 플레잉 게임)의 경우 접속 빈도와 활동을 통해 플레이어의 이탈을 예측할 수 있다. MMORPG에서는 여러 플레이어가 파티를 맺어 적을 물리치는 등의 활동을 한다. 여기에 참여한 플레이어를 대상으로 관계 네트워크를 그린다. 함께 활동한 플레이어끼리 선으로 이어서 네트워크를 그리면 여러 군집이 나타난다. 네트워크에서 복잡하게 얽혀 있는 플레이어는 충성도가 높다고 할 수 있고, 반대로 느슨하게 이어진 플레이어는 이탈 위험이 있다고 볼 수 있다.

 

기계 학습으로 AI를 훈련시키면 이탈 위험이 있는 플레이어를 사전에 예측해 골라낼 수 있다. 정확도가 충분히 높아진다면, 이런 플레이어의 이탈을 막기 위해 방법을 강구해야 한다. 게임 방식을 개선하거나 새로운 콘텐츠를 기획할 때 참고로 할 수 있을 것이다.

 

 

화려한 게임 그래픽은 모두 수학 연산의 결과물이다.

 

 

게임도 생각해야 잘한다

 

무슨 게임을 그렇게까지 하냐 할 수 있지만, 단순히 게임을 즐기기만 하는 데도 수학적인 머리를 써야 할 때가 있다. 게임 속에서 어떤 아이템을 얻고 어떤 것을 포기할까 같은 전략적인 판단도 따지고 보면 수학적인 사고다. 큰 맵 안에서 어떤 경로로 돌아다녀야 퀘스트를 효율적으로 완료할 수 있을까 궁리하는 것도 그렇다.

 

시뮬레이션 게임은 더하다. 예전에 한 역사 시뮬레이션 게임을 해 보려고 했다가 수익을 최대화하기 위해 국가 간의 무역 경로를 짜는 게 도무지 이해가 안 되어서 접은 적도 있다. 궤도로 위성을 쏘아 올리고 탐사선을 발사하는 로켓 시뮬레이션 게임도 그런 식으로 공부해야 할 게 많았다.

 

지금은 나이를 먹어서 그런지 공부까지 하면서 게임을 하는 게 부담스럽다. 그래서 웬만하면 어렵지 않은 게임만 하는 편이지만, 그렇다고 또 너무 단순하기만 하면 재미가 없긴 하다. 아마 사람마다 생각이 다를 것이다. 어떤 사람은 머리를 쓰고 게임 속 퍼즐을 푸는 데서 재미를 느낄 것이고, 어떤 사람은 아무 생각 없이 스트레스를 푸는 게임이 좋다고 할 것이다.

 

하지만 아무리 그래도 정말 기계적으로 버튼만 누르는 수준으로 단순한 게임이 아닌 한 게임을 즐기는 사람이라면 누구나 어느 정도는 머리를 수학적으로 놀리고 있을 것이다.

 

 

참고 문헌

고수의 데이터 요리쇼, 수학동아, 20209월호.


고호관

대학에서 건축과 과학사를 공부했다. 과학동아 기자, 수학동아 편집장으로 일했고, 현재 과학 저술가이자 SF 작가 또는 번역자로 활동 중이다. 우주로 가는 문 달을 썼고, 아서 클라크 단편 전집 등을 옮겼다.

 

 

 


함께 읽으면 좋은 책들

 

『365 수학』 [도서정보]

모든 사람을 위한 수학 다이어리

 

 

『생명의 수학』 [도서 정보]

수학과 생물학의 황홀한 크로스오버!

 

 

『세상 모든 비밀을 푸는 수학』 [도서정보]
재난 예측에서 온라인 광고까지 미래 수학의 신세계

 

 

『수학의 파노라마』 [도서정보]
수학을 다시 시작하는 이들을 위한 최고의 비주얼 가이드

 

 

『자연의 패턴』 [도서정보]
우리 시대의 과학 큐레이터가 엄선한 형태학 미술관을 탐험하라

 

 

『세계를 바꾼 17가지 방정식』 [도서정보]
위대한 방정식에 담긴 영감과 통찰

 

 

 

0 Comments
댓글쓰기 폼