게임 렉 백서 › 일부에게만 생기는 문제
연결별 전송 예산·우선순위 Per-connection bandwidth budget and priority
원인 ID pt-priority · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
서버가 연결마다 보낼 양에 한도를 두고 가까운 것부터 보내면, 한도가 낮게 잡힌 쪽은 멀리 있는 NPC를 늦게 받거나 못 받습니다.
왜 사람 많은 곳에서 서버가 연결별 전송량 한도 안에서 중요도 순으로 전송 → 그러면 대역폭 추정이 낮게 잡힌 연결(예: 백그라운드 창이라 수신 확인이 늦은 쪽)은 뒤쪽 개체를 계속 미룸 → 화면에서는 멀리 있는 NPC가 한쪽에서만 늦게 보이거나 안 보임
- 증상
- 안 보임·유령 개체, 입력 지연
- 요인
- 지연
- 누가 겪나
- 같은 PC의 한쪽 클라만, 특정 장소·채널
- 언제
- 사람이 몰릴 때
- 담당
- 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 서버: 밀린 개체의 우선순위를 시간이 지날수록 올리기(starvation 방지), 최소 갱신 주기 보장. 클라이언트: 백그라운드에서도 수신 확인을 제때 보내 대역폭 추정이 낮아지지 않게.
- 그래프에서는
- 인원·부하를 따라 오름 · 연결별 미룬 개체 수, 연결별 전송량
- 확인할 곳
- 서버에 연결마다 틱별 전송 바이트, 전송 한도(추정 대역폭), 보내지 못하고 미룬 개체 수, 개체별 마지막 전송 뒤 지난 시간을 남김. Unreal은 Networking Insights에서 연결별 패킷 크기와 그 안에 담긴 복제 개체를 볼 수 있음
- 이러면 맞음
- 안 보이는 NPC가 그 연결에서 오래 미뤄진 개체이고 그 연결의 한도가 다른 연결보다 낮으며 사람이 붐빌수록 미룬 개체가 늘어남
- 이러면 아님
- 미룬 개체가 없고 그 NPC도 제때 보냈으면 전송 뒤 단계(수신 버퍼, 로딩, 표시 옵션). 모든 연결이 한도에 붙어 있으면 서버 전체의 전송량·시야 설계 문제
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
출처
- Actor Priority in Unreal Engine Epic Games
대역폭이 포화되면 우선순위(거리·시선·마지막 복제 후 경과 시간)에 따라 복제할 액터를 고름. 모든 액터가 매번 복제되지는 않음 - State Synchronization Gaffer On Games
우선순위 누적: 이번 패킷에 못 들어간 개체가 다음 패킷에 먼저 들어가고 대역폭 한도는 실시간 조절 - Networking Insights in Unreal Engine Epic Games
연결별로 주고받은 패킷의 크기와 그 안에 담긴 복제 개체·속성을 보여 줌
함께 보면 좋은 원인
같은 층: 일부에게만 생기는 문제
같은 증상(안 보임·유령 개체)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기