하늘로 날아간 아바타

아직 게임 만드는 일을 시작하기 전에 게임 소프트웨어를 포함한 여러 소프트웨어는 굉장히 단단하게 만들어질 거라고 생각했습니다. 그게 무엇인지, 또 어떻게 하는 것을 말하는 것인지 스스로 설명할 수 없었지만 게임 속 세계를 움직이는 내 캐릭터의 발끝과 땅은 서로 절대 겹치지 않으며 내가 발사한 총알은 완벽한 궤적을 그리며 상대에게 날아가 상대의 모자 끝에 맞더라도 올바른 대미지를 일으킬 거라고 생각했습니다.

그런데 일을 시작하고 보니 우리가 밖에서 보던 그 게임 소프트웨어는 사실 온갖 우연히 겹쳐 아슬아슬하게 동작하는 모양처럼 보이며 우리들이 하는 일은 우연의 연속인 확률 공간에서 완전히 잘못된 일이 일어나 게임 자체가 망가지지 않도록 확률 공간을 좁히는 일이라는 사실을 깨달았습니다. 땅 위를 걷는 캐릭터는 충돌박스와 내비게이션 메시의 도움을 받아 걷고 있었고 이를 자세히 살펴보면 땅과 캐릭터가 정교하게 분리되지 않아 때때로 바닥의 돌을 밟으면 돌은 신발을 뚫고 들어갔고 총알은 대충 캐릭터를 둘러 싼 충돌박스를 건드리면 맞았다고 처리했는데 자세히 살펴보면 총알은 캐릭터의 팔과 몸통 사이로 지나갔지만 대미지를 입고 있었습니다. 멀티플레이 환경에서 내 귀를 스치고 지나가는 소리는 같은 공간에 있는 모든 사람들과 공유된다고 믿었지만 알고 보니 총구에서 발사된 총알은 총구 근처와 피탄 지점 근처에만 들렸고 총알의 궤적 주변에 있는 사람들은 아무 것도 들을 수 없었고요.

이런 특징은 마치 관찰하기 전에는 파동의 형태로 존재하다가 관측에 의한 상호작용이 일어나는 순간 비로소 입자의 형태로 실체화 되는 양자의 특징과 비슷하다는 생각이 들었습니다. 세계의 끝을 가로막은 투명 벽은 두껍고 높아 어지간해서는 지나갈 수 없었지만 캐릭터의 충돌 박스와 물리 엔진의 충돌 판정 및 조작을 부드럽게 만드는 기능 때문에 적절한 방법과 시간을 들여 충돌 박스에 비비면 그 누구도 세계의 밖으로 내보내지 않을 것 같아 보였던 강력한 그 눈에 보이지 않는 벽은 캐릭터들을 통과시켜 레벨 바깥의 험한 세계를 그대로 드러내 보이기도 합니다.

이제 와서 다시 한 번 말하면 게임 소프트웨어는 생각보다 훨씬 허술하게 만들어져 있습니다. 그런 소프트웨어가 드넓은 확률 공간에서 의도하지 않은 동작을 하더라도 우리가 애써서 만들어 놓은 확률 공간 상의 투명한 충돌 벽 안에서 동작하며 완전히 이상한 동작을 하지 않는 범위 안에서 동작하며 고객들에게 우리가 의도한, 그리고 의도하지 않은 경험을 전달하고 있습니다.

이전에 경험한 프로젝트는 프로젝트 진행 상황의 공개를 회사가 아주 엄격하게 통제했습니다. 우리는 고용될 때, 그리고 고용 관계가 종료될 때 각각 한 번씩, 때에 따라서는 1년이나 반기에 한 번씩 보안 서약을 하고 실수든 고의든 회사의 비밀을 유출하지 않아야 합니다. 그래서 종종 개발 중에 재미 있는 상황이 벌어지더라도 회사 밖은 물론 하다못해 팀 밖으로 이런 에피소드를 이야기하는 것도 쉽지 않았습니다. 한편 최근 참여하고 있는 프로젝트는 이전과 달리 프로젝트 진행 상태를 바깥에 종종 알리곤 하는데 프로젝트의 목표 중 하나가 프로젝트의 주요 의사 결정을 우리들이 독점하는 데서 오는 위험을 감소 시키고 또 우리들이 개발하는 모습을 본 사람들의 기대를 불러일으키고 또 우리들의 현재 모습과 계획에 공감하는 사람들의 실질적인 참여를 일으키는 것입니다.

지난 보고 준비를 하며 일어난 여러 가지 문제를 해결하고 있었는데 그 중 하나는 PvE 스테이지 에서 보스 몬스터가 특정 상황에 하늘로 날아가 버리는 것이었습니다. 몬스터가 좀 높이 떴다가 내려온다고 해서 플레이 자체에 문제가 되지는 않았을 텐데 몬스터는 하늘 높이 떠올라 저 하늘의 점이 되어 버렸고 몬스터의 위치를 표시하는 인디케이터의 표시 범위 1킬로미터를 넘어가 인디케이터 조차 사라져 플레이가 불가능해졌습니다.

레벨의 중력, 보스 몬스터의 질량, 총알의 속도와 질량 따위를 고려할 때 보스 몬스터가 그런 식으로 날아가 버릴 이유를 예상하기 쉽지 않았습니다. 언제나처럼 문제의 근본적인 원인을 찾아 해결하기 보다는 제한 시간 안에 확률 공간 안에서 문제가 일어날 확률을 최소화하는데 집중하기로 하고 일단 보스 몬스터의 질량을 크게 높이고 몬스터를 날려 버릴 가능성이 있는 근접 공격이 일으키는 물리량을 크게 감소 시켜 테스트를 진행했습니다. 다행히 이후 여러 번 테스트를 하는 동안 보스 몬스터가 하늘 저 편으로 날아가는 일은 더 이상 발생하지 않았습니다.

만약을 대비해 공중에 투명한 충돌 박스를 설치해 보스 몬스터가 떠오르더라도 천장에 맞고 다시 바닥으로 떨어져 클리어가 불가능해지는 상황을 피하도록 안전장치를 했습니다. 이쯤 되면 근본적인 원인을 찾지는 못했지만 그 문제에 의한 오동작을 확률 공간 밖으로 밀어내는데는 성공한 것 같았습니다.

하지만 시작할 때 이야기한 대로 게임 소프트웨어는 아슬아슬하게 동작하고 현대 게임 소프트웨어의 복잡성은 우리들의 예상보다 훨씬 높으며 우리들의 제한된 사고력과 상상력으로는 그 복잡성으로 인해 벌어지는 확률 공간 상에서 다양한 일을 쉽게 예상하기 어렵습니다.

이 테스트 상황은 상황 자체가 웃겨서 공식 트위터를 통해 공유되었는데 보스 몬스터가 물리 연산에 의해 하늘로 날아가지 않도록 질량을 크게 늘려 몬스터가 날아가지는 않았지만 이번에는 그 몬스터에게 얻어 맞은 캐릭터가 하늘 높이 날아가 버렸습니다. 보스가 날아갔다면 클리어가 불가능해지는 큰 문제이지만 캐릭터 한 명이 날아가도 나머지 모든 플레이어들은 계속해서 플레이를 이어 갈 수 있기 때문에 보스 몬스터가 하늘로 날아갈 때에 비해 큰 문제로 치부 되지는 않았습니다.

한편 도대체 저 캐릭터를 제어하고 있었을 그 플레이어가 누구였는지, 그리고 날아간 다음에 어떻게 되었는지는 지금도 알 수 없습니다. 다급히 지금 날아간 분 누구시냐고 외쳤지만 다들 플레이에 집중하느라 아무도 답하지 않았습니다.

이전 같으면 이런 이야기를 영상을 첨부해서 하면 회사가 나타나 이놈! 하고 아주 큰 코를 다쳤겠지만 이번에는 이런 행동에 훨씬 관대할 뿐 아니라 공식 계정이 직접 영상을 공유할 때도 있어서 공식 계정이 공유한 영상이나 이미지에 한해 가끔 그 뒷이야기를 해보겠습니다. 읽는 사람이 재미있을지는 잘 모르겠지만 글을 쓰는 사람 입장에서는 재미있습니다.