다시 인사드립니다! 게임플레이 일관성 조사의 결과와 후속 조치를 다루는 글의 후속편을 공유해드리고자 하는 발로란트 게임플레이 기술 팀입니다.


게임플레이 일관성과 관련해 제보된 내용이 가물가물하다면 지난달에 게시된 1편에서 제보 내용의 개요를 확인해보시기 바랍니다. 1편에서는 플레이어 피드백의 요지와 조사 방향(지연 시간, 정확성, 핑이 높은 플레이어의 성적)을 다루었습니다.


지난 글에서 ‘무엇’과 ‘왜’를 대부분 말씀드렸으니 이번에는 큰 개선이 이루어진 부분인 지연 시간과 버퍼링을 자세히 다루고자 합니다. 발로란트에서 지연 시간과 버퍼링이 어떻게 중요한지, 조사의 세부 사항, 도입한 수정사항과 개선사항, 장기 대책 등을 공유해드리겠습니다.



4.10 패치에서 적용될 변경사항을 간략하게 요약하자면 아래와 같습니다.


  • 간헐적 네트워크 불안정, 클라이언트 측 프레임률 저하, Alt+Tab, 장시간의 높은 네트워크 변동성 등이 야기할 수 있는 몇 가지 문제를 찾아내고 해결했습니다.
    • 위 문제의 영향을 받은 플레이어는 서버에서 자신의 입력이 지연 처리되었다는 느낌 또는 화면에서 적의 움직임이 지연되어 나타난다는 느낌을 어느 정도씩 받을 수 있었습니다.
  • 이러한 상황이 발생했을 때 네트워크 버퍼링이 작동하는 방식을 개선하고 수면 아래에서 무슨 일이 일어나고 있는지를 보여주는 데이터를 플레이어가 확인할 수 있게 해주는 변경사항을 4.10 패치에서 도입하고자 합니다.
  • 변경사항의 도입으로 조사를 통해 파악한 네트워크 지연 시간과 게임마다 반응 속도가 일관적이지 않다는 느낌의 주원인이 해결되리라 예상하며 앞으로도 계속 상황을 주시하고 개선책을 도입할 계획입니다.
    • 여전히 게임 내에서 문제를 겪으신다면 새로운 그래프가 문제를 수치화하고 측정하는 데 도움이 되기를 바랍니다.
  • 앞으로도 계속 고객지원을 통해 제보와 함께 가능하면 영상도 보내주시기 바랍니다.

지연 시간과 버퍼링


발로란트에서 지연 시간과 네트워크 버퍼링 성능이 어떤지에 관한 조사를 아직 진행하고 있다는 내용을 저번 글에서 언급했습니다. 글이 게시된 후 조사를 마무리했으며 조사를 통해 파악한 몇 가지 문제에 대한 해결책을 4.10 패치에서 도입할 예정입니다.


더 자세히 살펴보기에 앞서 ‘네트워크 버퍼링’이나 ‘처리 지연’이 무엇을 의미하는지를 비롯해 약간의 배경 설명을 해드리면 도움이 될 듯합니다.


발로란트와 같은 온라인 게임에서는 플레이어의 입력이 서버에 전송된 후 서버 측에서 실행되어야 합니다. 이는 서버가 인식하는 게임 상황이 정확한 상황이기 때문입니다. 서버가 게임 시뮬레이션을 업데이트할 때마다(매초 128번씩) 플레이어의 게임 클라이언트에서 전송된 입력이 해당 플레이어의 요원에게 적용되어야 합니다. 플레이어의 입력이 인터넷을 거쳐 전송되는 동안 지연이 발생하면 서버는 정보가 도착하기를 기다리지 않으며 플레이어의 움직임을 시뮬레이션으로 처리해야만 합니다.


서버가 예측한 이동은 전송 중인 실제 이동 정보와 종종 불일치합니다. 이러한 불일치는 클라이언트에서 올바른 위치로 짧게 순간이동하는 모습으로 나타나는 이동 보정을 야기합니다. 이동 보정이 너무 많아지면 게임이 뚝뚝 끊기는 느낌이 들며 정도가 심하면 플레이할 수 없는 지경에 이릅니다.


서버가 예측하는 이동이 일어나지 않게 하려면 서버에서 이동 정보를 버퍼링하고 약간의 지연 시간을 두고 처리하는 방법을 사용할 수 있습니다. 이는 인터넷을 통해 데이터를 전송할 때 흔히 쓰이는 전략이며 서버가 프레임마다 요원의 움직임을 매끄럽게 처리할 수 있도록 하는 데 도움이 됩니다. 하지만 이렇게 버퍼링을 적용하면 서버가 플레이어의 이동을 처리하기 전에 지연 시간이 생기며 버퍼링이 너무 많으면 네트워크 왕복 시간에 비해 훨씬 높은 핑에서 플레이하는 느낌이 들 수 있습니다.


버퍼링의 균형을 찾아서 적당량으로 유지하는 일은 중요합니다. 버퍼링이 너무 적으면 서버가 예측하는 이동과 클라이언트 측 보정이 많아지며 버퍼링이 너무 많으면 지연 시간이 증가하고 피커스 어드밴티지와 같은 문제에 취약해집니다. 균형을 잘 맞추면 발로란트에서 매끄럽고 빠르게 반응하는 게임플레이를 즐길 수 있습니다.


서버에서 플레이어의 움직임을 버퍼링한 후 적용하듯이 클라이언트에서도 적의 움직임에 관한 정보를 버퍼링한 후 화면에 표시합니다. 그러면 연결이 원활하지 않을 때 적이 순간이동하는 듯해 보이는 현상이 방지되어 다른 플레이어의 움직임이 부드러워지고 눈으로 따라가기 쉬워집니다.

조사 세부 사항


조사의 일환으로 두 가지 버퍼링의 성능을 더 자세히 파악할 필요가 있었습니다. 이동 정보가 각각의 버퍼링을 통과하는 데 걸리는 시간을 추적하는 새로운 디버그 툴을 만들었습니다. 툴을 활용해 이동 버퍼링이 의도하지 않은 방식으로 작동하는 상황이 있는지 파악하고자 실험을 진행했습니다.


이번 조사에서 플레이어의 제보를 토대로 Alt+Tab으로 창 전환 시 사격 처리 지연 시간이 증가하는 문제를 살펴봤습니다. 백그라운드에서의 FPS 제한 설정을 켜고 게임이 백그라운드에서 실행되도록 하면 프레임률 스로틀링을 통해 클라이언트 성능 문제를 가상으로 재현할 수 있습니다. 다시 게임 창으로 전환하면 급증하는 프레임률의 영향으로 서버 측 이동 정보 대기열이 상당한 크기로 불어날 수 있었습니다. 그러면 클라이언트 측에서 느끼기에는 핑이 매우 높은 상태로 플레이하는 듯했으며 현재의 네트워크 왕복 시간 그래프는 이러한 상황을 반영하지 못했습니다.


클라이언트 측 핑이 순간적으로 급증하는 상황을 시뮬레이션하는 방법으로도 비슷한 효과를 낼 수 있었습니다. 핑이 순간적으로 급증했다가 낮아지면 해당 클라이언트의 정보가 서버의 이동 정보 대기열에 쌓이게 되었습니다. 낮았던 핑이 순간적으로 급증했다가 다시 높아지면 다른 플레이어의 정보가 클라이언트의 이동 정보 대기열에 쌓이게 되었습니다. 어떤 경우든 대기열에 이동 정보가 쌓이면 대기열의 크기가 목표치로 돌아갈 때까지 높은 지연 시간이 계속되는 듯했습니다.


두 상황에서 결국에는 지금의 체계가 문제를 해결하고 버퍼의 크기를 목표치로 되돌렸지만, 완전히 복원되기까지 걸리는 시간이 의도한 정도보다 길어서 네트워크 지연 시간이 사실상 증가한 상태가 오랫동안 지속되었습니다.


과도한 버퍼링 상태가 훨씬 더 빠르게 완화되도록 하는 새로운 수정사항 두 가지를 도입한 결과 더 매끄러운 플레이 경험을 위해 꼭 필요할 때만 추가 지연 시간이 일시적으로 발생하게 되리라 예상합니다.

수정사항 및 개선사항


첫 번째로 체증이 발생했을 때 버퍼의 크기를 목표 수준으로 다시 줄이는 속도를 조정하는 수정사항을 도입했습니다. 이동 처리 체계에 버퍼의 크기가 커질수록 보정을 더 공격적으로 하는 기능을 추가했죠.


변경사항이 적용되면 버퍼에서 일어나는 이동 정보 체증이 전보다 빠르게 해결됩니다. 예를 들어 버퍼에 5개의 이동 정보가 밀려있으면 이전에는 이상적인 수준으로 돌아가는 데 5초까지 걸릴 수 있었습니다. 새로운 개선사항을 도입한 결과 그 시간이 1초 미만으로 줄어들었습니다. 이로써 일시적인 문제나 급성 네트워크 악화 등 악영향을 끼치는 상황이 발생했을 때 플레이어가 추가 버퍼링으로 인해 늘어나는 지연 시간의 영향을 받는 시간이 대폭 줄어들게 됩니다.


그러나 수정사항의 도입에도 불구하고 버퍼의 이동 정보 체증이 심각한 수준에 이르면 이동 처리 체계가 밀린 정보를 처리하는 데 몇 초나 걸릴 수 있습니다. 이제 이러한 상황이 발생하면 버퍼를 초기화해서 가장 최근 이동 정보를 제외한 모든 정보를 지우고자 합니다. 그러면 추가 지연 시간이 즉시 사라진다는 장점이 있지만, 반드시 이동 보정이 일어납니다.


극심한 프레임률 문제나 급성 네트워크 악화 등 심각한 지장을 초래하는 상황이 발생했을 때는 이동 처리 체계가 버퍼 크기를 재조정하기까지 기다리기보다 차라리 이동 보정을 받는 편이 낫다는 판단을 내리게 되었습니다. 이 경우 이동 보정에 따르는 지장은 보통 수정사항 도입 전에 플레이어가 겪었을 장시간의 지연 시간 증가로 인한 지장보다 덜 심각했습니다. 심각한 지장을 초래하는 상황의 예를 들자면 백그라운드에서의 최대 FPS가 낮게 설정된 채 Alt+Tab 후 게임 창으로 다시 전환하면 이러한 이동 보정이 일어날 수 있습니다. 이는 심각한 프레임률 변동을 야기해서 버퍼에 정보가 과도하게 쌓이는 문제 상황으로 이어질 수 있지만, 변경사항을 도입한 덕분에 이제 문제가 빠르게 해소될 겁니다.


버퍼링을 조사하며 발견한 연관 문제가 있습니다. 어떤 플레이어의 네트워크 변동성이 지속적으로 높으면 체계가 해당 플레이어의 지연 시간을 고려해 서버가 예측하는 이동의 개수를 적당한 수준으로 유지하려고 하므로 해당 플레이어가 높고 낮은 버퍼링 목표치를 계속 오가게 됩니다. 이와 같은 장기적인 네트워크 변동성을 고려해서 목표 버퍼 크기를 더 효과적으로 조정하는 해결책을 준비하고 있습니다.

앞으로의 계획


위의 변경사항에 추가로 현재 발생하는 이동 처리 지연을 플레이어로서 시각적으로 확인하는 방법이 마땅치 않다는 점을 깨달았습니다. 내부적으로 만든 그래프가 문제 파악에 매우 유용했으므로 네트워크 왕복 시간과 서버 및 클라이언트 측 이동 지연을 보여주는 ‘네트워크 왕복 시간 + 처리 지연’이라는 성능 그래프를 새로 추가했습니다.


그래프에서 측정되는 시간은 과거에 근접 공격으로 벽을 치는 방식으로 연결을 확인했을 때 느껴졌던 지연 시간과 얼추 비슷할 겁니다. 그래프에 표시된 시간이 네트워크 왕복 시간보다 대략 20~30밀리초 높으면 무난하다고 볼 수 있지만, 이상적인 값은 정확한 네트워크 및 프레임률 상황에 따라 다릅니다.


또한 패킷별 네트워크 왕복 시간 변동을 보여주는 ‘네트워크 왕복 시간 변동’ 그래프도 추가했습니다. 핑 급증과 높은 네트워크 변동성은 흔히 추가 버퍼링의 요인으로 작용하므로 평균값을 기준으로 하는 원래의 네트워크 왕복 시간 그래프에서는 나타나지 않는 네트워크 환경 문제를 진단하는 데 도움이 될 수 있는 그래프입니다.


게임에서 플레이어들이 실제로 겪는 처리 지연에 관한 데이터를 수집하고자 추가 원격 측정 수단을 도입하기도 했습니다. 게임의 상태를 관찰하고 위의 수정사항이 의도한 효과로 이어지고 있는지, 수정사항과 개선사항이 추가로 필요한지를 판단할 수 있도록 데이터를 정기적으로 검토하고자 합니다.


마지막으로 각종 SNS에서 글을 확인하기는 하지만, 게임 종료 후 설문 조사를 활용해 연결 품질과 사격 시 느낌 등 대전 품질에 대해 심층적인 플레이어 피드백을 추가로 받고자 합니다. 따라서 이러한 부분을 반영하고자 질문을 추가하고 수정할 계획입니다.

다음 현황


핑이 괜찮은 듯한데도 느껴졌던 일관성 문제가 이동 처리 버퍼의 개선으로 줄어들 수 있기를 바랍니다. 게임에서 여전히 문제가 느껴진다면 변동성 및 처리 지연 정보를 보여주는 새로운 그래프가 느낌을 수치화하고 잠재적 원인을 진단하는 데 도움이 되었으면 합니다. 게임플레이를 녹화하는 경우 일관성 문제를 겪을 때 이러한 그래프에서 확인할 수 있는 추가 정보가 있으면 문제를 진단하기 위해 자세히 살펴봐야 할 부분을 좁히는 데 도움이 될 수 있습니다.


이번 현황은 보고 느낀 문제에 관한 영상과 분석을 올려주신 모든 분께 큰 감사의 말씀을 드리며 마무리 짓고자 합니다. 발로란트를 사랑해주시고 게임을 개선하는 데 힘을 보태주셔서 감사합니다. 언제나 그렇듯 플레이어 여러분의 피드백은 매우 진지하게 받아들입니다.


향후 현황에서는 서버 선택과 핑이 높은 플레이어의 성적 간 관계를 다룰 예정입니다.