수백 명의 플레이어와 서버 측 물리 시뮬레이션


9

저는 현재 물리가 서버 측에서 시뮬레이트되기를 원하는 단일 플레이어 물리 지향 게임에서 일하고 있습니다. 게임에는 리더 보드, 지속적인 플레이어 진행 등이 있으며 모든 종류의 부정 행위를 방지하고 싶습니다. 기본적으로 순수한 클라이언트-서버 아키텍처 인 클라이언트는 "멍청한"것이며 서버가 원하는 것을 표시하기 만합니다.

그러나 문제는 게임이 동시에 수백 (수천 명)의 사람들이 할 가능성이 높다는 것입니다. 수백 개의 상태를 동시에 유지하고 유지해야하는 경우 서버 처리 능력을 떨어 뜨릴 가능성이 높기 때문에 이것은 나에게 중요합니다.

모든 물리 시뮬레이션을 클라이언트 측으로 옮기는 데 아무런 문제가 없지만 클라이언트 시뮬레이션 결과가 유효한지 실제로 확인할 방법이 필요합니다. 그러나 방법을 알 수 없습니다.

클라이언트가 여전히 공정한지 확인하기 위해 시뮬레이션 서버 측을 한 번에 한 번 실행하는 것에 대해 생각했지만 서버가 가능한 한 적은 부담을 갖기를 원합니다.

물리는 글렌 피들러 (Glenn Fiedler)GDC 2011 데모 만큼이나 복잡 해져서 훨씬 더 단순해질 것입니다. 그러나 훨씬 더 충돌하는 강체는 단일 장면에 있으며 모두 한 번에 볼 수 있습니다.

글렌 피들러 (Glenn Fiedlers)의 웹 사이트 대부분이 훌륭한 웹 사이트 인 소규모 네트워크 물리학 (예 : Halo와 같은 30 명의 플레이어가있는 FPS)에 대해 이야기하면서이 특정 사례에 대한 답변을 얻는 데 어려움을 겪고 있습니다.

주제에 대한 모든 조언, 웹 사이트, 논문 등은 대단히 감사하겠습니다.

내가 대답하고 싶은 질문을 요약하면 다음과 같습니다.

  • 클라이언트-서버 모델은 얼마나 실현 가능합니까? 서버 처리 능력이 합법적이고 접지되어 있습니까?
  • 서버에서 클라이언트가 실행하는 물리 시뮬레이션을 안정적으로 검증 할 수 있습니까? 그렇다면 어떻게?

더 많은 사람들이 자신의 생각을 게시 할 수 있도록이 질문을 조금 더 길게 열어 두겠습니다. 벌써 해주신 분들께 감사드립니다!
Lennard Fonteijn

서로 다른 클라이언트가 독립적 인 한 수평 확장에 문제가 없어야합니다. EC2와 같은 것을 사용하고 필요에 따라 온라인 용량을 확보하십시오.
ipeet

1
누군가 단일 플레이어 게임에서 속임수를 쓰면 문제는 어디에 있습니까? 그냥 리더 보드 아이디어를
내놓고

2
"서버에서 클라이언트가 실행하는 물리 시뮬레이션을 안정적으로 검증 할 수 있습니까?" 예, 그것을 검증 할 수는 있지만 아래의 의견을 읽으십시오. RL 돈을 최고 점수에 제공하려는 계획과 다트 게임과 유사합니다. 여기서 문제는 물리를 검증하는 것보다 적습니다. 이것은 쉽습니다. 문제는 컴퓨터 프로그램이 완벽한 점수를주기 위해 던지는 사기꾼이 있다는 것입니다.
Daniel Carlsson

공유 세계에서 서버 검증 물리학은 전적으로 가능합니다. DCUO가 이에 대한 좋은 예입니다. "서버"는 실제로 "다수의 서버 박스"를 의미하는 반면 "서버"는 어딘가에 앉아있는 단일 박스라는 의미로 작성하는 것 같습니다. 현재 동일한 물리적 공간에서 수천 명의 독립 배우를 시뮬레이션 할 수 없으므로 이에 대한 논의가 부족합니다. 당신이 할 수있는 일은 수천 명의 플레이어를 상호 작용하지 않는 독립적 인 시뮬레이션 섬으로 퍼뜨리는 것입니다.
Patrick Hughes

답변:


5

다른 사용자의 제출을 ​​클라이언트 측에서 검증하고 제출이 유효하지 않은 경우 클라이언트가 서버에보고하도록 할 수 있습니다.

그런 다음 조치를 취할 수 있습니다 (사기꾼을 금지하거나 허위 신고를 한 사람을 금지). 제출이 실제로 유효하지 않은지 여부를 확인하려면 특수 클라이언트 또는 기타를 사용할 수 있습니다.


3
그것은 실제로 꽤 똑똑하다! 생각하지 못했을 것입니다. 다른 사람이 자신의 시뮬레이션을 실행하는 클라이언트가 바람을 피우는 경우 적어도 2 ~ 3 명의 클라이언트가 시뮬레이션을 실행해야합니다.이 경우 모든 클라이언트가 이상한 것을보고하면 서버는 항상 최종 시뮬레이션을 수행 할 수 있습니다 .
Lennard Fonteijn

1

귀하의 게임은 싱글 플레이어이며 다른 플레이어와의 유일한 '상호 작용'은 리더 보드입니다. 각 제출에 대해 서버에서 시뮬레이션을 확인하기 위해 인스턴스를 생성 할 수 있습니다. 물리학이 30 개 이상의 클라이언트와 동일한 지 확인하는 모든 트릭이 필요하지 않으므로 이전보다 더 많은 리소스가 필요하다고 생각하지 않습니다 물리학은 이미 작동하고 있습니다 :).

모든 결과를 확인하는 것은 약간 과잉 일 것입니다. 누군가 리더 보드에 점수를 보낼 때마다 시뮬레이션을 서버에 압축 한 다음 자신의 서버에서 상위 5 % 점수 만 확인하거나 상위 1 % 또는 심지어 1 % 더 똑똑한 사람은 새로운 최고 점수 만 확인하고 # 1보다 나은 사람은 부정 행위가 아닌 것으로 가정합니다.

시뮬레이션이 같은지, 설정 및 상호 작용하지 않는지 (확인하기 쉬운) 또는 플레이어가 시뮬레이션을 실행하는 동안 시뮬레이션과 상호 작용할 수 있는지는 모르겠지만 다른 플로팅 방식으로 물리를 수행해야합니다. 포인트 표현은 물건을 엉망으로 만들지 않고 유효한 런을 무효로 만듭니다.


나는 게임 플레이 자체의 세부 사항에 들어가고 싶지 않지만 내 게임을 다트 게임의 게임과 비교할 수 있습니다. 더 이상 이 지식이 당신의 대답을 바꾸겠습니까?
Lennard Fonteijn

아니, 그것은 바뀌지 않을 것입니다 :). 서버에 리플레이를 저장하고 의심스러운 것만 확인하십시오 (예 : 새로운 최고 점수)
Roy T.

1

그렇게하지 마십시오. 서버에서만 물리를 시뮬레이션하는 것은 매우 나쁜 생각입니다. 주요 문제는 서버로드가 아니라 응답 성입니다. 클라이언트의 응답 성은 엄청나게 좋지 않습니다. 플레이어가 버튼을 누르면 시뮬레이션 결과를 얻기 전에 서버를 왕복해야합니다. 나는 과거 (대부분 버튼 누름)에서 이것의 변형을 해왔으며 결과는 예쁘지 않고 아주 느리게 게임을 할 수있는 매우 느린 게임에서만 수행되어야합니다 (심지어 그런 경우에도 응답 성 부족은 큰 문제입니다).

다음에 이러한 유형의 시나리오가 제시 될 때 시도하려고했던 더 좋은 계획은 플레이어에게 플레이어베이스의 매우 작은 하위 집합을 선택한 다음 서버 측을 잠시 시뮬레이션하고 결과를 자신의 결과와 비교하는 것입니다. 그들의 지식없이. 그들이 많이 벗어나고 있다면 (어떤 정도의 발산을 기대해야한다면) 잠재적 사기꾼으로 분류하고 한참 동안 계속 시뮬레이션하여 확인합니다. 얻을 수있는 것은 합법적 인 플레이어가 서버와 비교하여 네트워크 조건 등에 의해 영향을받는 정도에 따라 일종의 곡선이며, 사기꾼 이이 곡선 밖에 있음을 빨리 알 수 있습니다. 이 시스템에는 다음과 같은 이점이 있습니다.

  • 자동화
  • 당신은 응답 성을 희생하지 않습니다
  • 플레이어베이스의 아주 작은 서브셋을 시뮬레이션 할 때로드를 관리하고 확장 할 수 있습니다 (부하가 높을 경우 시뮬레이션 할 플레이어를 더 적게 선택)
  • 내가 생각할 수있는 모든 게임에 적용 가능하여 재사용 성이 높음

따라서 Roy와 마찬가지로 기본적으로 다음과 같이 말합니다. 고객이 점수를 제출할 때 클라이언트 쪽을 유지하고 "재생"을 저장하고 한 번에 한 번만 재생을 유효성 검사합니다 (모두가 아님). 고객이 제출 한 점수를 기반으로 크레딧 지불이 완료되면 플레이어 진행 부분, 크레딧도 실제 돈으로 구입할 수 있습니다 (!!!)-여전히이 방법을 권장합니까? 부정 행위가 과도한 크레딧을 제공하고 한 번에 한 번만 확인하면 기본적으로 돈을 잃게됩니다. 자신의 점수가 특정 임계 값을 초과하면 사람에게 플래그를 지정할 수 있지만 더 좋은 방법이 있습니까?
Lennard Fonteijn

물리 엔진이 결정 론적이어야하고 서버가 클라이언트와 동일한 시작 상태 및 입력을 사용하여 시뮬레이션하는 경우 (가능한 것이어야 함) 결과는 합리적인 부동 소수점 오류 범위 내에 있어야합니다 (중요하지 않음). 임의의 효과가 있고 RNG 상태를 통과하는 것이 가능하지 않더라도 임의의 숫자를 전달하여 검사에 사용할 수 있습니다 (임의 롤을 피하는 것이 게임 플레이 차이를 크게 만드는 경우에도 분포를 확인). .
ipeet

부정 행위가 더 이상 최고 점수 목록에 오르지 않고 돈을 받기 때문에 모든 크레딧을 확인하는 것이 좋습니다. 돈이 관련되어 있다면 더 많은 보안을 원합니다. 도와 드릴 수 없습니다.
Roy T.

@RoyT. 크레딧을 기반으로 돈을 지불하지 않더라도 어쨌든 그렇게 할 것입니다 (누군가가 잘못 읽은 것 같습니까?). 허용 오차가없는 정책을 사용하려고하므로 유효성 검사를 위해 재생 파일을 일괄 처리하면됩니다. 정말 의심스러운 경우 조치를 취합니다.
Lennard Fonteijn

1

다니엘이 말했듯이, 여기서 큰 문제는 플레이어의 행동을 수행하는 프로그램입니다. 플레이어가 신경 외과 수술을 위해 정상적으로 분해되는 로봇 팔이라면 게임 내 물리 왜곡이 필요하지 않습니다.


조금 불분명했을 수도 있습니다. 게임을 완료하면 내 게임에서 가상 크레딧을 제공합니다. 이 크레딧을 사용하여 재생할 새 콘텐츠의 잠금을 해제 할 수 있습니다. 또한 실제 돈을 사용하여 크레딧을 구매하여 콘텐츠를 더 빨리 잠금 해제 할 수 있습니다 (Pay2Win이 아니라는 점을 명심하십시오). 크레딧을 기준으로 실제 돈을 지불 할 의사가 없습니다. 즉, 다트는 게이머가 강체의 상태에 얼마나 많은 영향을 미치는지를 설명하는 은유 일뿐입니다. 나는 "aimbots"를 두려워하지 않으므로 0의 이점을 얻을 수 있습니다.
Lennard Fonteijn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.