네트워크로 연결된 일부 게임에서 보간을 사용하고 일부는 원격 이동에 경로 찾기를 사용하는 이유는 무엇입니까?


21

이것은 약간의 공개 질문이지만 누군가가 두 가지 모두에 대한 좋은 추론을하는 것을보고 싶습니다.

두 가지에 대한 간단한 예를 들면 다음과 같습니다.

보간 모델

클라이언트가 위치 업데이트를 자주받는 밸브 모델을 생각하고 리모컨은이 데이터에 대한 보간을 사용하여 위치를 업데이트합니다.

길 찾기

이 모델에서는 사용자가 목적지를 보내고 모든 사람이 목적지를 찾는다고 생각합니다.

어떤 유형의 게임이 각각에 적합하며 언제 사용해야합니까?


2
GDSE에 비해 너무 광범위하지 않습니까?
크롬 스터는 모니카

@KromStern 나는 그것에 대해 고군분투했다. 따라서 "개방형 질문"이기는하지만, 두 가지를 모두 경험 한 사람이 그것에 대한 객관적인 대답을 할 수있을만큼 충분히 집중되어 있다고 생각한다. upvotes / downvotes로 투표 :)
Vaughan Hilts

어쩌면이 부분을 추가하면 더 좋아질 것입니다 : "BCD 제약에 문제 A가 있습니다". 현재 "E 또는 F를 무엇을 선택합니까?"와 같이 너무 광범위하고 컨텍스트가 부족합니다. ABCD에 대해 말하지 않고.
크롬 스터, 모니카

1
컨트롤은 큰 부분입니다. WASD 또는 조이스틱을 사용하여 움직이고 있습니까? 보간이 잘 맞습니다. 마우스로 대상을 클릭 하시겠습니까? 길 찾기 소리가 훨씬 좋습니다.
Luaan

답변:


43

2 개의 실시간 AAA 네트워크 게임 (스마트 폰 용과 휴대용 콘솔 용)에 대한 네트워킹 코드 작업을했습니다.

"왜"라는 질문에 직접 대답하기 위해 어떤 게임은 다른 게임보다 더 잘 어울리기 때문에 한 게임을 사용합니다. 이것은 게임 유형뿐만 아니라 우리가 이야기하는 네트워크 유형에 달려 있습니다 (연결된 아케이드 캐비닛은 3G를 통해 재생되는 게임과 조건이 다릅니다) 일부 게임은 실제로 두 가지를 사용하거나 완전히 사용합니다 데이터를 동기화하는 다른 접근 방식!

위치 데이터뿐만 아니라 두 네트워크 클라이언트간에 동기화 할 수있는 거의 모든 유형의 데이터를 일반화하고 고려하고 싶습니다.

두 가지 가능성 대신 하드 업데이트와 소프트 업데이트 사이의 스펙트럼을 제안하고 싶습니다.

  • 매우 어려운 업데이트는 데이터가 중요한 특성 (플레이어 사망), 보간이 적용되는 데이터 유형이 아니기 때문에 다른 유형의 보간없이 다른 클라이언트의 상태를 즉시 변경하는 불연속 이벤트입니다. 체스 게임, 채팅 메시지 등) 또는 네트워크에서 할 수 있기 때문에 (초당 60 회 전체 게임 상태를 안정적으로 전송하는 연결된 아케이드 캐비닛이 가능한 범위 내에 있다고 생각하십시오).

    이 방법을 사용하면 네트워크 지연이 항상 지연된 업데이트로 표시되고 캐릭터가 점프하는 것으로 나타납니다.

  • 인터 / 외삽 업데이트가있는 하드는 매우 하드 업데이트와 비슷하지만 지속적으로 데이터를 변경하는 경우에는 데이터가 변경 될 때마다 데이터를 안정적으로 전송할 수 없습니다. 위치와 속도 벡터를 보내는 것을 생각하십시오. 두 점 사이에 데이터를 보간하고 그 다음에 외삽 할 수 있어야합니다. 수신 데이터가 외삽과 일치하지 않는 경우 비상 계획을 세워야합니다. 위치 업데이트가 필요한 대부분의 게임에서이 방법을 사용합니다.

  • 동기화 업데이트가있는 하드는 인터 / 외삽이있는 하드와 유사하지만 동기화가 거의 필요하지 않습니다. 격투 게임의 시계와 같이 실제로 사소한 데이터를 인터 / 외삽하는 데이 데이터를 사용해야합니다.

  • 지연된 하드 업데이트는 하드 업데이트와 유사하지만 현재보고있는 것은 과거의 데이터입니다. 다른 사람과 노래를 연주 할 수있는 일본의 많은 음악 아케이드 게임에서 실제로 과거, 아마도 몇 시간 또는 며칠 전에 기록 된 플레이어 데이터를 상대로 연주하는 것 같습니다. 물론이 유형의 업데이트는 다른 플레이어와 실제로 상호 작용하지 않는 경우에만 사용할 수 있습니다.

  • 소프트 업데이트는 계획 데이터를 전송하고 모든 호스트에서 계획을 실행하는 것으로 구성됩니다. 이것을 "경로 찾기"라고합니다. 이와 같이 데이터를 동기화하는 데 필요한 데이터의 양은 훨씬 적습니다. 수백 명의 적을 동기화 할 때와 같이 데이터가 사용자에게 표시되는 방식에서 특정 불일치를 피할 수있을 때 이러한 유형의 업데이트를 사용할 수 있습니다.

    물론 데이터 업데이트 계획도 원하는만큼 하드 / 소프트 할 수 있습니다.

  • 매우 부드러운 업데이트는 동작 결과가 발생하기 훨씬 전에 안정적으로 계산 될 수있을 때 사용됩니다. 결과를 보내면 다른 클라이언트가 결과를 재생합니다. 예를 들어, 일부 브라우저 및 스마트 폰 게임을 사용하면 다른 사람들과 싸울 수 있지만 실제 전투는 해결하는 데 몇 시간이 걸립니다 (트라 비안과 유사한 게임). 이 게임들은 전투가 시작되는 순간에 결과를 계산할 수 있으며, 그 결과를 볼 수 있습니다.

    네트워크에 연결되지 않은 또 다른 예는 전투 애니메이션이 활성화 된 Civilization 4입니다. 누군가를 공격하면 전투 결과가 즉시 계산되지만 애니메이션이 재생되는 것을 볼 수 있습니다. 애니메이션이 진행되는 동안 전투가 계산되지 않고 있음을 확신 할 수 있습니다.

보시다시피, 데이터를 동기화하는 방법은 여러 가지가 있으며 다른 많은 방법을 상상할 수 있습니다. 가장 단순한 온라인 게임을 제외한 모든 게임은 동기화하는 데이터 유형, 게임 유형 및 네트워크 상태에 따라 이러한 방법을 혼합하여 사용할 가능성이 높습니다. 지연 시간이 길어질 때 업데이트를 더 부드럽게).


1
그것은 좋은 통찰력입니다. 저장 및 보관
Jitsu

승리자에게 전리품을 보내십시오. 정보 답변에 감사드립니다!
Vaughan Hilts

3

Valve의 개발 과정에 대한 통찰력이 없으므로 이것은 내 의견이지만,

보간 : FPS와 같이 빠르게 진행되는 게임에서는 플레이어 간 적의 위치를 ​​일정하게 유지하는 것이 중요하다고 생각합니다. 보간은 일부 패킷이 삭제 되더라도 (AFAIK, 대부분의 멀티 플레이어 FPS는 TCP / IP 대신 UDP를 사용하므로 패킷 도착 순서와 무결성을 보장하지 않음) 화면에서 부드럽게 이동할 수 있습니다.

경로 찾기 : 게임 플레이에서 시간이 결정적인 요소가 아니며 알고리즘이 재실행시 일관된 경로를 찾는 경우 경로 찾기는 자주 보내지 않아도되므로 각 싱글의 위치에 따라 업데이트를 많이하지 않아도되기 때문에 흥미로울 수 있습니다. 실재. 예를 들어 턴 기반 시스템에 적합하다고 생각합니다. 예를 들어 턴 시작시 한 번, 턴이 끝났을 때 한 번에 모든 클라이언트가 "Sane"상태가되도록 네트워크 요청 수를 제한 할 수 있습니다. "상태.

다시 한번, 나는 네트워크 게임이나 큰 게임 스튜디오에서 일한 적이 없지만 때로는 읽은 내용에서 내가 그것에 대해 갈 방법입니다 :)


0

팬더 파자마 답변은 꽤 좋습니다.

기본적으로 문제는 여러 클라이언트가 서로의 상태를 동일하게 인식 할 수있는 전송할 수있는 최소 데이터 양에 대한 것입니다. 지연 클라이언트가 다른 상태에있는 지연을 어떻게 처리합니까?

모든 변수가 알려지면 결과가 알려지기 때문에 모든 상호 작용을 미리 알 수있는 절차 적으로 생성됩니다. 예를 들어, 처리 방법을 알고있는 방에있는 누군가를 격리하고 데이터 세트를 제공하면 결과를 정확하게 예측할 수 있습니다. 따라서 클라이언트가 계산을 마치기를 기다릴 필요없이 다른 모든 클라이언트에게 결과를 제공 할 수 있습니다.

그러나 그는 한 가지 방법을 언급하지 않았습니다. 강제 결과.

시스템이 일부 엔티티의 조치를 예상하고 다른 조치가 해당 조치에 종속되고 다른 계산에서 해당 조치를 고려하고 이미 예상 된 결과로 사전 처리 된 경우. 그런 다음 동기화를 유지하기 위해 전체 시스템이 중지되고 올바른 위치에 있지 않은 하나의 엔티티가 경로에 올바르게 다시 배치됩니다.

실제 사례는 적절한 보상이 나에게 전달되도록하기 위해 보유 패턴의 다른 모든 엔티티입니다.

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