네트워크 스무딩 구현


13

우리는 다중 1 인칭 슈팅 게임을 만들고 있습니다. 클라이언트는 고정 된 속도 (현재 10Hz)로 서버에 위치를 보냅니다. 서버는 모든 플레이어의 위치를 ​​오염시키는 단일 메시지를 모든 플레이어에게 동일한 속도 (10Hz)로 보냅니다.

예상대로, 60fps 게임은 초당 10 회만 업데이트를 받기 때문에 움직임이 꽤 고르지 않습니다. 이 움직임을 부드럽게하는 가장 좋은 방법은 무엇입니까? 가장 확실한 방법은 마지막 두 패킷 사이를 보간하여 새 패킷을받을 때 보간이 완료되도록하는 것입니다. 그러나 이것은 모든 플레이어에게 즉각적인 100ms 지연을 추가합니다.

다른 방법은 마지막 몇 패킷에서 추론 된 속도와 가속을 사용하여 다음 패킷이 도착하기 전에 플레이어의 위치를 ​​예측하는 것이지만 예측이 잘못되면 새 패킷을 수신하자마자 플레이어가 점프하는 경향이 있습니다. .

AAA 타이틀이 어떻게이 문제를 해결하는지 아는 사람이 있습니까?

답변:


9

그들은 당신이 방금 말한 것을 정확하게 수행합니다 – 그 두 가지 접근법 중 하나 또는 둘 사이의 타협. (예 : 가능한 한 작은 지연을 받아들이고 보간하고, 핑이 해당 지연을 초과 할 때 외삽합니다.) 올바른 위치로 다시 점프 ( '스냅 핑'이라고도 함)하는 대신 일반적으로 잘못된 예측 사이에 일종의 보간을 수행합니다. 가능한 경우 보정 된 값으로 부드럽게합니다. 또한 적용해야 할 수정 양을 줄이기 위해 과거에 수정을 처리합니다.

이것은 자주 묻는 질문이며 검색하면 gamedev.stackexchange.com의 다른 곳에서 찾을 수있는 몇 가지 표준 링크가 있으며 다음을 포함합니다.

모든 프로그래머가 게임 네트워킹에 대해 알아야 할 사항 (다음 두 링크에 요약되어 있음)

소스 멀티 플레이어 네트워킹

언리얼 네트워킹 아키텍처

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.