게임 AI를 위한 탐색 알고리즘 입문, 아오키 에이타 저

“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

현재 50대 이하의 사람들 중에 비디오 게임을 모르고 자란 사람이 있을까? 한 번도 안 한 사람이 있을 순 있지만, 비디오 게임이라는 게 있는지도 모르고 자란 사람은 없을 거다. 나 역시 어릴 때부터 접해 왔다. 오락실에서부터 PC, 휴대용 게임기, 게임 콘솔, 그러다 지금은 휴대폰까지, 아니다, 스마트TV까지, 거의 모든 엔터테인먼트 기기에서 게임을 즐길 수 있게 됐다.

이런 게임들을 접하면서 사실 항상 궁금했던 건, 저 캐릭터는 어떻게 움직이는 거지? 왜 저런 판단을 내리고 공격하는 걸까? NPC는 정해진 시나리오대로 움직이는 거라 이해하지만, 전투는 그렇지 못할 텐데… 그러다 어느 순간 랜덤한 선택을 해서 정해지지 않은(?) 시나리오로 진행해 다양한 결과를 보여주는 게임까지 나오곤 했다.

그러다 지금은? 크고 나서는 오히려 학창 시절보다 더 게임을 못 즐기게 됐지만, 과거에 비하면 엄청나게 다양한 모습을 한 캐릭터가 나오고, 이제는 훨씬 복잡하면서도 단순 대전도 아니고 스타크래프트 정도에서 촉발돼나온 다양한 형태의 대전 게임도 많이 존재한다. 사실 PvP 형태가 아닌 AI와의 대전 게임도 사람 만큼이나 다양하게 대응하다보니 AI 상대로 게임을 이길 수나 있을지 걱정이 될 정도로 발전했다.

그렇다고는 해도 가장 기초가 되는 방식이 있을 텐데, 게임 분야 일을 하지 않는 관계로 궁금은 하지만 사실 어떻게 하는지는 모르고 있었다. 간혹 궁금해서 찾아보면 이런 쪽을 설명해주는 자료를 찾긴 쉽지 않았고, 배경지식이 짧으니 자료를 판별하는 것도 쉽지 않은 상황이니 사실상 손놓고 있었다고 보면 된다. 이런 지경이면 이쪽 지식은 게임 회사의 핵심 자원이 아닌가 싶어서, 쉽게 찾을 수 없었던 게 아닌가 싶기도 하고…

그런데 근래 AI 관련 산업이 폭발적인 성장을 하면서 오히려 옛날부터 실전 사례로 사용하던 게임AI쪽도 그 영향을 받아 좀더 공개적인 상황이 된 게 아닌가 싶어졌다. 예전보다 게임 산업이 굉장히 많이 커지다보니 참조 가능한 자료로 더 많아졌을 거라 추측할 순 있었지만, 그래도 어느 지점부터 접근해야 할지 난감한 상황이었다. 게임 아카데미 들어가면 좀 더 수월하게 알 수 있지 않을까 싶기도 하지만, 그렇게 도전하긴 어려운 상황이라.

“게임 AI를 위한 탐색 알고리즘 입문”이라는 책을 알게 됐다. 요즘 AI쪽 얘기를 하도 많이 하다보니 피로감도 있지만, 제대로 공부해본 적은 없고, LLM을 파야 하나, 뭐 괜찮은 입문서는 없나, 싶으면서도 수학은 여전히 자신이 없어서 어려운 책은 보기도 싫고, 그러다 이 책을 덜컥 얻어 걸렸다.

차근차근 읽어가면서 오, 읽을만 한데? 하는 자신감을 얻어갈 때쯤 C++와 관련 필드에서 일하지 않다보니 퇴색된 지식 때문에 좀 난감해졌다. 수학, 확률, 이쪽 관련 알고리즘… 흠, 쉬운 게 없지만, 다행스럽게도 저자가 어려운 말은 많이 안 쓴다. 그나마 다행이다. 학술적인 어조로 진행하지도 않는다. 너무 다행스럽다. 제일 좋은 건 그래프를 곁들인 적당한 설명 뒤에 따라나오는 예제 코드와 그 실행 결과다.

지은이의 말에 자신이 대상으로 삼은 사람들을 나열한 내용 중 내가 속한다고 생각되는 부분은 “대결 게임을 개발하고 싶지만 CPU(컴퓨터가 조작하는 플레이어)를 만드는 방법을 모르시는 분”일 거라 생각한다. 당장 개발할 일은 없지만, 죽기 전에 하나쯤 만들어보고 싶은 생각은 있다.

예제 코드를 제공해준다. 사실 이건 정말 중요하다. 물론 직접 타이핑 치는 게 제일 좋은 학습법임을 알고는 있지만, 항상 업무든 집안일이든 시간에 쫓기는 입장에서는 이렇게 타이핑 치는 시간조차도 아쉽기 마련이다. 샘플 코드를 제공해준다면, 아무래도 책으로 설명을 읽기만 하고 눈으로 쫓아가기만 하는 것보다는 실제로 돌려보고 손보기도 하면서 익히는 게 훨씬 도움이 되니까 매우 좋다.

게임 AI의 핵심은 탐색임을 이해할 수 있게 됐다. 그리고 그런 탐색에서 쓸만한 것들을 많이 제안해준다. 그것도 코드와 그 결과와, 심지어 탐색 알고리즘의 비교 분석까지. 이러니 도움이 안 될 수가 없다. 다만 읽으면서 한 가지 아쉬웠던 것은, 실제 사례로 널리 알려진 게임에서 어떤 탐색 알고리즘을 사용했는지, 그 사례를 좀 더 보여줬으면 어땠을까 싶긴 했다. 하지만 그러기엔 책이 다루는 범위와 주제에 안 맞을 수도 있겠단 생각은 들었지만, 그래도 좀 아쉽다. 이 다음 책은 뭘로 해야 하나 고민스럽기도 하고.

나름의 게임 분류법을 통해 그에 적합한 알고리즘 소개까지는 무난하게 간다. 아무래도 가장 기초적인 건 빔 탐색이라 생각되는데, 이를 바탕으로 진행하면서 추가적으로 설명해나가는 알고리즘들이 앞서 언급한 알고리즘의 어떤 면을 개선해줄 수 있는지, 장점과 단점을 적절히 언급해주는 것도 많은 도움이 된다. 머릿속에 정리하려면 시간이 더 필요할 것 같다. 읽으면서 정리하기엔 쏟아져 들어오는 양이 많다.

쭉쭉 읽어가면서 너무 오래 전에 하고 안 한지라 C++ 코드에서 한 번 걸려 넘어지긴 했다. 다시 공부 좀 해야겠다 싶은 생각이 든다.

그러다 몬테카를로 탐색과 라스베가스 탐색의 배경에 대해 알게 된 건 또 다른 수확이다. 이게 도박에서 나온 거고, 저 유명한 몬테카를로라는 이름이 발레단 때문에 알게 됐는데, 도박이 유명한 곳인 줄은 처음 알았다.

백미라고 생각되는 부분이 두 군데 있는데, 그 중 하나는 Thunder 탐색이다. 본인이 이걸 개발하게 된 배경 설명도 좋았고, 내용도 좋았고, 이런 지식을 널리 공유하게 해준 것도 고맙다. 대단한 사람이다. 다른 하나는 7장 더 좋은 탐색을 하는 기법에서 특히 고속화 부분이다. 사실 어떻게 보면 이건 알고리즘보다는 최적화에 더 적합해보이는 부분인데, 다른 관점에서 보면 조금 과하단 생각이 들기도 하다. 하지만 아마 이 내용을 빼기엔 뭔가 허전했을 것 같긴 하다. 게임 AI의 미덕 중 하나는 비용 절감이다. 충분한 메모리와 시간, CPU 파워 등이 있다면 문제될 게 없겠지만, 뭐가 됐든 제한된 리소스 상에서 최적의 결과를 얻어내야 한다. 그러기 위해서는 비트 연산 이해는 필수다.

입문서지만, 한 두 번 읽어서 다 이해할 거라 생각은 들지 않았다. 한 꼭지씩 따서 찬찬히 뜯어보고 충분히 곱씹어 봐야 한다. 확실히 이해해야 적용과 응용이 될 거란 생각이 읽는 내내 떠나지 않았다.

이쪽 분야를 아주 조금은 들여다본 것 같다. 내 궁금증이 더 해소되려면 더 많은 게 필요하겠지만, 도입부로서는 딱 좋다. 게임 AI를 공부하기에 더할 나위 없이 훌륭하다.