게임 렉 백서 › L1 클라이언트 게임 프로세스
보간 버퍼가 없거나 짧음 Missing/short interpolation buffer
원인 ID cg-no-buffer · 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
그림과 실험이 있는 원본 카드로 열기 →
서버 패킷을 받자마자 그리면 지터(도착 간격의 흔들림)가 그대로 화면에 드러납니다.
왜 받은 위치를 바로 그리거나 버퍼가 지터보다 짧음 → 그러면 늦게 온 패킷만큼 멈추고 몰려온 패킷만큼 튐 → 화면에서는 다른 캐릭터가 멈칫멈칫 움직임
- 증상
- 뚝뚝 끊김
- 요인
- 지터
- 누가 겪나
- 나만
- 언제
- 항상
- 담당
- 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
- 게임개발팀 할 일
- 클라이언트: 보간 버퍼 두기, 회선 상태에 따라 버퍼 길이를 자동 조절. 서버: 버퍼만큼 과거 모습을 보고 쏴도 판정이 맞도록 지연 보상(되감기 판정) 적용.
- 수치 감각
- 보통 서버가 패킷을 보내는 간격의 2배 정도(1초에 20번 받으면 100ms)를 버퍼로 둡니다.
- 그래프에서는
- 처음부터 늘 높음 · 패킷 도착 간격, 보간 버퍼가 빈 횟수
- 확인할 곳
- 클라이언트에서 서버 패킷의 도착 간격 분포와, 보간할 다음 스냅숏이 없어 멈추거나 외삽으로 넘어간 프레임 수를 기록
- 이러면 맞음
- 도착 간격의 흔들림이 보간 버퍼 길이보다 자주 커지고 그때마다 버퍼가 비어 다른 캐릭터가 멈칫함. 버퍼를 늘리면 줄어듦
- 이러면 아님
- 버퍼가 충분한데도 멈칫하면 서버가 보내는 간격 자체가 불규칙한지(틱 지연) 확인
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
- 더 알아보기
- 버퍼를 늘리면 매끄러워지지만 그만큼 상대를 과거 모습으로 봅니다. 그래서 공격 판정은 서버가 “그 사람이 보던 과거”로 되감아 확인하는 지연 보상을 함께 씁니다.
출처
- Interpolation and extrapolation (Netcode for Entities 6.5) Unity
늦게 온 패킷을 기다리려고 일부러 늦춰 그리는 버퍼 보간, 버퍼가 클수록 정확하지만 그만큼 지연이 늘어남 - Struct ClientTickRate (Netcode for Entities 6.5) Unity
보간 버퍼 기본값 InterpolationTimeNetTicks = 2(서버 전송 2번 분량) - Physics (Netcode for Entities 6.5) Unity
지연 보상: 서버가 클라이언트가 그 틱에 보던 충돌 세계를 찾아 명중 여부를 판정
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(뚝뚝 끊김)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기