멀티 플레이어 공간 파티셔닝을위한 효율적인 솔루션?


10

이 질문은 조금 까다 롭지 만 명확하게하려고 노력할 것입니다.

내가 MMO 규모가 아닌 온라인 게임을 만들고 있지만 권한있는 서버 접근 방식으로 가능한 많은 플레이어를 지원한다고 가정 해 보겠습니다. 내가 정말 원하는 과 세계 많은 AI 시뮬레이션 원수를.

공간을 세분화하고 처리 할 필요가없는 것을 처리하지 않음으로써 서버 CPU를 절약하는 몇 가지 전략을 알고 있습니다. 나는 이미 세계를 지역별로 나누었습니다. 로딩 시간과 작은 전환이 필요할 것입니다. 로컬에서 (혼자 또는 친구와 함께) 재생할 때 게임 플레이의 품질을 유지하는 것이 중요하다고 생각합니다. 나는 선수들이 하나 또는 두 개 이상의 지역에있을 것으로 기대하지 않습니다.

문제는 지역이 꽤 커질 수 있고 많은 NPC가 한 번에 시뮬레이션 할 수 있다는 것입니다. 플레이어의 경험에 영향을 미치지 않으면 서 어떻게 처리합니까? 리 전당 하나의 서버와 같은 접근 방식은 비슷합니다.

나는 주로 적의 무리와 평화로운 NPC를 보유 할 데이터 구조를 찾고 있습니다. 질문을 마무리하기 위해 차량이 존재하므로 한 지역 내에서 여행하는 것이 상당히 빠르며, "때"가 차가워지는 지역에 영향을 미칩니다.


하나의 물리적 서버로 제한되어 있습니까?
Patrick Hughes

궁극적으로, 아닙니다. 그러나 단순성과 달성 가능성을 위해 지금은 프로젝트를 더 복잡하게 만들 수 없습니다.)
Grimshaw

간단하게 시작하십시오. "서버"당 여러 개의 물리적 상자에서 작동하는 와우와 같은 것은 세상을 그리드로 나누고 모든 업데이트는 누가 같은 상자에 있는지에 따라 결정됩니다. 매우 간단하고 조정하기 쉽고 잘 작동하며 상자 하나만 사용하여 처리를 제어 할 수 있습니다.
Patrick Hughes

나는 당신의 견해에 전적으로 동의하며, 아마도 내 질문에 뭔가를 놓쳤을 것입니다. 박스 셀의 가장 오른쪽에 한 플레이어가 있고 오른쪽 이웃 셀의 가장 왼쪽에 다른 플레이어가 있다면 어떨까요? 그들은 서로를 봐야합니다! 세상은 WoW와 같은 게임을 계속 찾습니다. 이것이 이해하지 못하는 것입니다. 효율적인 세계 그리드를 유지하면서 효율적으로 그리드를 만드는 방법은 무엇입니까? 확실히 두 "서버"의 플레이어가 서로를 볼 수있는 상황이 있습니다 :)
그림 쇼

1
그렇습니다. 만약 당신이 온갖 물건을 가지고 있고, 많은 플레이어들이 당신의 모든 것을 언제 어디서나 활동할 수 있도록 계획해야한다면, 마법적인 방법은 없습니다. 이것이 MMO 서버 그룹의 단일 박스가 최대 200-500 명의 플레이어에게만 서비스를 제공하는 이유와 NPC를위한 MMO AI가 어리석게 계산되는 이유입니다.
패트릭 휴즈

답변:


5

내가 이해 한 바에 따르면 서버에서 일종의 물리가 실행됩니다.

이 경우 공간 분할 이외의 인공 지능 / 물리에 사용할 수있는 다른 기술도 있습니다. 가장 덜 명백한 것까지 :

  • 우선 순위 : 플레이어와 직접 상호 작용하지 않는 NPC는 새로 고침 빈도를 낮춰 CPU 시간을 줄일 수 있습니다. 우선 순위 대기열과 우선 순위가 높은 대기열을 처음부터 끝까지 사용할 수 있지만 다른 대기열은주기마다 대기열의 1/2, 1/4 또는 1/8 만 실행합니다. 이런 방식으로 각 객체가 특정 시점에 실행되도록하지만 CPU 소비 횟수를 줄입니다.
  • 물리도 낮출 수 있습니다 (로밍 중이나 시야에서 멀어 질 때 충돌 상자와 구만 사용할 수 있음).
  • 플레이어가 멀리있는 동안 매우 기본적인 행동을 NPC와 환경에 할당하여 AI / 시뮬레이션을 단순화합니다. 보통 사냥, 채집, 농사 대신에 로밍 또는 적을 스캔합니다 ...
  • 일부 물리학과 AI는 클라이언트에게 위임 될 수도 있습니다. 서버에 실제로 CPU가 부족한 경우 객체를 부분적으로 해결 된 것으로 태그 할 수 있으며 클라이언트는 NPC 부동을 피하기 위해 해당 객체의 물리 및 위치를 로컬로 조정합니다. AI 실행에 대한 클라이언트의 책임은 클라이언트에게 있습니다 (플레이어와의 전투 중에 대상 플레이어의 장치가 공격하는 NPC를 직접 실행할 수 있음)
  • 플레이어의 경우 서버에서 물리를 낮출 수 있으며 충돌 해결에 대한 클라이언트의 책임이 더 커집니다. 예 : 차량으로 물체를 때리면 서버는 충돌 상자의 충돌 만 해결하고 충돌 가능성이있는 것으로 표시합니다. 클라이언트는 타임 스탬프와 함께 해상도를 서버에 전송하여 개체에 태그가 지정되고 솔루션이 올바르게 보이는 경우이를 허용합니다.

이러한 메커니즘을 구현 한 후에는 필요한 메커니즘의 양과 빈도를 결정할 수 있습니다. 이것에 대한 좋은 점은 나중에 클라이언트 앱 대신 일부 작업을 수행 할 수있는 몇 대의 서버를 추가 할 수 있다는 것입니다.

물론 대략적인 충돌 감지로 인해 수차가 발생하지만 때때로 더 많은 정밀도를 추가하여 문제를 해결할 수 있습니다.

또한 물리학에 관해서 는 OpenCL 또는 CUDA와 같은 일종의 GPGPU 시스템 을 지원하는 libs를보아야 합니다.


지역의 공간 분할과 우선 순위 업데이트를 결합하는 것은 내가 필요한 것, 적은 수의 플레이어에게 최적이어야하며 많은 영역이로드 될 때 여전히 최적화되어야합니다. 감사.
그림 쇼

@DevilWithin 도움이되며 클라이언트 측에서 변경할 필요가 없습니다. 또한 답변에 몇 가지 세부 정보를 추가했습니다.
코요테

단순화 된 AI는 훌륭한 아이디어입니다. NPC는 플레이어와는 거리가 멀지 만 대부분의 경우 이사 외에는 아무것도 할 필요가 없습니다. 즉, 나는 그들이 1 분마다 또는 무엇이든, 그들이 전 세계를 돌아 다니도록하기 위해 근사한 것을 할 수 있다는 것을 의미합니다. 좀비로 생각하면, 그들은 그렇게 할 것입니다!
그림 셔
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.