실제로 <카트라이더> e스포츠를 살펴보면 1초가 되지 않는 차이로 극적인 희비가 갈리는 경기가 있었다. 대표 사례는 '카트라이더 버닝타임 이벤트전'에서 진행된 문호준과 유영혁의 경기에서 0.001초 차이로 승자가 정해진 것이다. 해당 경기는 강연에서도 소개됐다.
강연에서 소개된 사례 (출처 : 스포티비)
또한, <카트라이더>를 플레이할 때는 다른 유저의 실제 위치와 내가 상대를 볼 때의 위치 동기화가 잘 이루어져야 게임 플레이에 불편함이 없다. 이것이 잘 되지 않을 경우에는 상대방 카트의 움직임이 부자연스럽게 보일 수 있으며, 유저에게 좋지 못한 플레이 경험을 준다.
이에 <카트라이더: 드리프트> 개발사 '니트로 스튜디오'의 김진호 개발자가 머신 러닝을 활용해 좋지 못한 네트워크 환경에서 빠르게 움직이는 카트의 위치를 예측하기 위해 수행했던 작업을 공유하고, 머신러닝을 어떻게 활용해 데이터를 기반으로 위치 예측 고도화 작업을 진행하였는지 발표했다.
김진호 개발자는 "프로그래머 분들에겐 머신 러닝을 통한 문제 해결 사례, AI 개발자 분들에게는 머신 러닝 활용 사례, 그리고 <카트라이더: 드리프트>를 기다려 주시는 분들에게는 자연스러운 게임 플레이를 위한 개발 과정을 소개하고자 한다"고 설명했다.
강연자 : 김진호
소속 : 니트로스튜디오
발표자 소개
현재 니트로 스튜디오에서 <카트라이더: 드리프트>를 개발하고 있습니다. 현재 소속된 RND 유닛에서는 머신 러닝을 이용하여 유저 위치 예측 개선 작업, 매칭 퀄리티 개선 작업 등을 진행하고 있습니다. 이전에는 EA에서 <배틀필드 온라인>, 엔진스튜디오에서 MORPG <수신학원 아르피엘> 개발에 참여했습니다.
# 위치 예측이 왜 필요한가요?
게임에서 '위치 예측'이 필요한 이유는 레이턴시, 즉 네트워크 지연 시간(핑) 덕분에 '플레이어가 보는 캐릭터의 위치'와 '게임 서버에서의 캐릭터의 위치'가 달라질 수 있기 때문이다. 온라인 게임에서는 다른 유저와 데이터를 주고받는 과정이 동시에 이루어지지 않는다.
왜냐하면 카트의 반응성을 위해 플레이어가 조작하는 카트의 위치는 서버를 거치지 않고 움직이지만, 상대방 카트의 움직임은 서버를 통해 전달받기 때문이다. 레이턴시를 고려하지 않고 정보를 받는 대로 화면에 보여준다면 사진과 같은 차이가 발생한다.
따라서 상대방의 정보를 예측해 화면에 보여줄 필요가 있다. 기존 <카트라이더>에서는 레이턴시 극복을 위해 등속 예측 모델을 사용했다. 카트의 과거 위치와 속도를 통해 현재 시점을 예측하는 모델이며, 등속 운동 공식을 사용한다.
그러나 등속 운동 모델은 직선 주행은 괜찮으나, 레이턴시가 높을 때 드리프트를 하면 위치에 차이가 발생할 수 있다. <카트라이더>는 한국 서버에서 P2P 통신을 하기에 레이턴시가 20ms 이하로 나오는 경우가 대다수였지만, <카트라이더 : 드리프트>는 데디케이트 서버를 통해 글로벌 서비스 예정이기에 세계 각 나라의 유저가 만날 경우에는 레이턴시가 높게 나올 수 있다.
따라서 높은 레이턴시 상황에서도 드리프트를 했을 때 정확하게 위치를 예측해 주는 모델이 필요했다. 개발진은 머신 러닝을 통해 이를 해결하고자 하였다.
등속 운동 모델은, 높은 레이턴시에서 드리프트를 할 때 오차가 발생한다
레이턴시 100ms 정도의 환경에서도 자연스럽게 드리프트 경로를 예측할 수 있고, 예측은 매 프레임마다 계산되어야 하기에 연산량이 적은 모델이 필요했다. 연산량이 과하면 CPU 점유율이 급속히 올라갈 수 있기 때문이다.
개발진이 패킷에 포함된 데이터를 면밀히 분석한 결과 목표 달성을 위해선 최종 위치를 예측하는 것이 아니라, 드리프트 시작점을 항상 원점이라고 가정하고 위치 변화량을 예측하는 문제로 변경할 필요가 있다고 판단했다. 그리고 이를 풀기 위한 모델을 만들었다.
# 머신 러닝 모델 소개
개발 과정에서 테스트된 머신 러닝 모델은 10가지가 넘지만, 분량 상 문제로 해당 강연에서는 2가지 모델이 소개됐다.
첫 번째 모델은 선형 회귀다. 기존에 사용하던 등속 운동 모델을 약간 변경한 것이다. 이를 통해 오차를 70% 정도 개선할 수 있었다. 하지만 레이턴시가 커질수록 오차 값이 기하급수적으로 증가하는 문제가 있었다.
두 번째 모델은 DNN-GLU 모델이다. 앞서 살펴본 선형 회귀 모델을 최적화를 해 보았으나 한계에 부딪쳤는데, 이에 데이터의 구조가 비선형적이라서 생긴 문제가 아닐까라는 생각을 했다. 이를 해결하기 위해 딥 러닝 방식으로 접근하기로 결정했고, 은닉층에 활성화 함수를 사용해 문제를 해결하려 시도했다.
이에 먼저 사용해 본 LSTM과 CNN 구조는 개선되는 수준에 비해 연산량이 많아, 실제로 적용했을 때 드리프트를 할 때마다 CPU 점유율이 상승하는 문제가 있었다. 그렇기에 DNN을 통해 다시 실험을 시작했다.
이후 여러 번의 실험을 거쳐 Leaky ReLU 함수를 기본적으로 사용하고, 데이터 무게를 줄이기 위해 GLU 활성화 함수를 섞었으며, 입력을 출력에 연결시키는 Skip Connection 구조를 통해 모델을 만들었다. 해당 모델은 선형 회귀 모델보다 오차값이 훨씬 적었다. 대략 153에서 18로 줄어든 정도다. 아래 사진을 확인하면 기존 모델에 비해 초록색으로 표시된 예측 경로에 가까워졌음을 확인할 수 있다.
# 남은 과제
첫 모델에 비해서는 많은 개선이 있었지만, 아직 약간의 오차는 남아있는 상태다. 또한, 위 스크린샷은 100ms 레이턴시를 기준으로 했는데 3차 CBT 결과 해외 유저와 게임을 할 때는 200ms 가량의 레이턴시가 발생하는 경우가 있었다.
레이턴시가 200ms를 넘어갈 경우에는 해당 모델로도 절반 이상이 예측 경로에서 벗어나는 문제가 발생한다. 더 높아진 레이턴시만큼 패킷을 늦게 받기 때문이다. 현재 개발진은 실력이 비슷한 유저들의 플레이 패턴이나 맵별 특징을 통해 더욱 개선된 모델을 제작하기 위해 노력하고 있다.
김진호 개발자는 유저분들이 보다 게임을 재미있게 플레이할 수 있도록 데이터를 활용한 다양한 작업을 준비하고 있다고 밝혔다. 만약 <카트라이더> 시리즈 개발 비화에 대해 추가적인 내용이 알고 싶은 참관객이 있다면 2019년 NDC에서 진행된 '카트라이더 0.001초 차이의 승부' 강연을 참고하길 권했다.