클라이언트측 예측

Client-side prediction

클라이언트예측은 비디오 게임에서 사용되는 네트워크 프로그래밍 기술로, 지연 시간이 연결의 부정적인 영향을 감추기 위한 것입니다.이 기술은 원격 서버에서 플레이어의 동작을 제어하면서 플레이어의 입력을 보다 순간적으로 느끼도록 시도합니다.

클라이언트 측 예측 프로세스는 서버가 입력을 승인하고 게임 [1]상태를 업데이트하기 전에 클라이언트가 사용자의 입력에 로컬로 반응하도록 하는 것입니다.따라서 클라이언트는 제어입력만 서버에 송신하고 그 대가로 갱신된 유기상태를 기다리는 대신 로컬로 유기상태를 예측하여 서버로부터의 갱신된 유기상태를 기다리지 않고 사용자 피드백을 제공한다.

네트워크 ping 시간으로 인해 입력과 클라이언트 측의 시각적 피드백 사이에 지연이 없어지기 때문에 클라이언트 측 예측에 의해 지연 문제가 감소합니다.다만, 클라이언트와 서버의 게임 스테이트의 비동기화도 도입하고 있어 게임을 플레이 [1]할 수 있도록 하기 위해서는 이 처리를 실시할 필요가 있습니다.일반적으로 클라이언트가 업데이트된 게임 상태를 수신하면 디스싱크가 수정되지만, 순간적인 수정이 "스냅"으로 이어지기 때문에 일반적으로 몇 가지 "스무팅" 알고리즘이 관련됩니다.예를 들어, 일반적인 스무딩 알고리즘 중 하나는 보이는 각 객체의 클라이언트 측 위치를 확인하여 서버 측 위치의 오류 엡실론 내에 있는지 확인하는 것입니다.그렇지 않으면 클라이언트 측 정보가 서버 측으로 직접 업데이트됩니다(너무 많은 비동기화로 인해 스냅됨).다만, 클라이언트측의 로케이션이 그리 멀지 않은 경우는, 클라이언트측과 서버측의 사이에 새로운 위치가 삽입됩니다.이 위치는 클라이언트측의 로케이션으로부터 몇개의 작은 스텝의 델타내에 있는 것으로 설정되어 일반적으로는 유저에게 방해가 되지 않는 「충분히 작다」라고 판단됩니다.

클라이언트측 예측과 함께 일반적으로 사용되는 비동기 문제에 대한 또 다른 해결책은 서버 [2]조정입니다.클라이언트는 서버로 전송되는 모든 입력에 시퀀스 번호를 포함하며 로컬 복사본을 유지합니다.서버가 클라이언트에 신뢰할 수 있는 업데이트를 전송할 때 해당 클라이언트에 대해 마지막으로 처리된 입력의 시퀀스 번호가 포함됩니다.클라이언트는 새로운 상태를 받아들이고 서버에 의해 아직 처리되지 않은 입력을 재적용하여 대부분의 경우 눈에 보이는 비동기 문제를 완전히 제거합니다.

클라이언트 측 예측을 사용한 최초의 1인칭 슈팅은 Duke Nukem 3D로, 1996년 1월 29일 쉐어웨어 [3][4]출시 이후 내장되어 있습니다.이 기술은 또한 Quake의 인기 애드온인 Quake World의 두드러진 특징이기도 했다.오리지널 퀘이크 게임에는 네트워크 플레이가 포함되어 있었지만, 주로 LAN 플레이에 최적화되어 있었습니다.고속 홈 접속(당시에는 드물었지만)이 가능했던 Quake의 설계자들은 높은 대역폭과 낮은 PING 시간에 대한 그들의 가정을 간과하여 다이얼[5]사용자들에게 온라인 플레이를 좌절시켰다.긴 비공개 베타에서 일련의 실험을 한 후, id Software는 대기 시간이 많은 플레이어와 낮은 레이텐시 플레이어 모두에게 인기가 있음이 증명된 새로운 예측 모델을 사용하여 Quake World를 출시했습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Bernier, Yahn W. (2001). "Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization" (PDF). Retrieved 2008-12-19.
  2. ^ Gabriel Gambetta, 클라이언트예측서버 조정
  3. ^ Dransfield, Ian (2018-07-14). "The Engine Room: Build". Retro Gamer. United Kingdom: Future plc (182): 62–67. ISSN 1742-3155. Retrieved 2018-11-24.
  4. ^ Duke Nukem 3D (v1.5 CD Version) Source Code Release - April 1, 2003, See domovethings(), fakedomovethings(), and fakedomovethingscorrect(), Video Game Preservation, 2019-05-15, retrieved 2019-05-15{{citation}}: CS1 유지보수: 기타 (링크)
  5. ^ 카맥, Quake World .plan