KartML
멀티플레이 레이싱 게임에서는 다른 차량의 위치가 네트워크 지연만큼 늦게 도착한다. 마지막으로 받은 위치만 보여 주면 차량이 끊겨 보인다. 현재 속도로 다음 위치를 짐작하는 등속 외삽은 직선 주행에는 잘 맞지만, 방향이 빠르게 바뀌는 드리프트에서는 오차가 커질 수 있다.
KartML은 이 문제를 DNN 기반 예측으로 보완할 수 있는지 살펴본 3인 팀 프로젝트다. 2024년 11월부터 12월까지 Unreal Engine 5.4로 차량을 움직이고, 같은 네트워크 환경에서 등속 외삽과 DNN이 예측한 이동량을 바꿔 가며 비교했다.
내가 맡은 일
나는 프로젝트 초기에 Unreal Engine 차량 프로젝트를 구성하고 BP_EasyVehicle에서 이동 동작을 조정하며 드리프트를 구현했다. 후진할 때 차량이 갑자기 180° 돌아가던 문제를 고쳤고, Shift 키로 드리프트를 시작하고 끝내도록 입력을 연결했다. 관련 파라미터도 조정해 급격한 방향 전환을 재현할 수 있는 차량을 만들었다.
이후 팀원들이 이 차량을 바탕으로 C++ 이동 컴포넌트와 네트워크 예측 코드를 추가했다. 최종 EasyVehicleMovementComponent는 여러 사람이 함께 수정한 결과물이며, 드리프트 상태 복제와 클라이언트 외삽, DNN 출력 연결은 다른 팀원이 구현했다. 내가 맡은 핵심은 예측 방법을 시험할 차량 동작과 프로젝트의 초기 실행 환경을 마련하는 일이었다.
예측 결과의 비교 방식
팀에서 완성한 Unreal 클라이언트는 두 가지 방법으로 지연 구간의 차량 위치를 보정한다. 하나는 현재 속도에 100ms의 네트워크 지연을 곱하는 등속 외삽이고, 다른 하나는 팀원이 학습한 ONNX 모델이 다음 변위를 예측하는 방식이다. Unreal NNE로 모델을 실행한 뒤 선택한 결과를 화면 속 원격 차량에 적용했다.
서버 위치와 선택한 예측 결과는 디버그 박스로 표시하고, 등속 외삽·DNN·서버 위치는 각각 CSV로 기록했다. 덕분에 같은 차량과 주행 구간에서 일반적인 외삽과 모델 예측이 어떻게 달라지는지 바로 확인할 수 있었다.
결과와 한계
100ms 지연을 적용했을 때 드리프트 구간의 등속 외삽이 실제 경로에서 벗어나는 모습을 확인했다. DNN 예측은 여러 구간에서 서버 경로를 더 가깝게 따라갔지만, 순간적으로 오차가 크게 튀기도 했다.
당시에는 화면과 CSV 기록을 살펴보는 데 그쳤고, 같은 입력을 반복 재생하거나 위치·회전 오차의 평균과 분산을 구하지는 못했다. 그래서 DNN이 등속 외삽보다 정확하다고 단정할 수는 없다. 다시 만든다면 주행 입력을 자동으로 재생하고 직선, 회전, 드리프트 구간을 나눠 두 방법의 오차와 실행 비용을 함께 측정할 것이다.