한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L1 클라이언트 게임 프로세스

보간 버퍼가 없거나 짧음 Missing/short interpolation buffer

원인 ID cg-no-buffer · 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발

그림과 실험이 있는 원본 카드로 열기 →

서버 패킷을 받자마자 그리면 지터(도착 간격의 흔들림)가 그대로 화면에 드러납니다.

왜 받은 위치를 바로 그리거나 버퍼가 지터보다 짧음 → 그러면 늦게 온 패킷만큼 멈추고 몰려온 패킷만큼 튐 → 화면에서는 다른 캐릭터가 멈칫멈칫 움직임

증상
뚝뚝 끊김
요인
지터
누가 겪나
나만
언제
항상
담당
주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
게임개발팀 할 일
클라이언트: 보간 버퍼 두기, 회선 상태에 따라 버퍼 길이를 자동 조절. 서버: 버퍼만큼 과거 모습을 보고 쏴도 판정이 맞도록 지연 보상(되감기 판정) 적용.
수치 감각
보통 서버가 패킷을 보내는 간격의 2배 정도(1초에 20번 받으면 100ms)를 버퍼로 둡니다.
그래프에서는
처음부터 늘 높음 · 패킷 도착 간격, 보간 버퍼가 빈 횟수
확인할 곳
클라이언트에서 서버 패킷의 도착 간격 분포와, 보간할 다음 스냅숏이 없어 멈추거나 외삽으로 넘어간 프레임 수를 기록
이러면 맞음
도착 간격의 흔들림이 보간 버퍼 길이보다 자주 커지고 그때마다 버퍼가 비어 다른 캐릭터가 멈칫함. 버퍼를 늘리면 줄어듦
이러면 아님
버퍼가 충분한데도 멈칫하면 서버가 보내는 간격 자체가 불규칙한지(틱 지연) 확인
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
버퍼를 늘리면 매끄러워지지만 그만큼 상대를 과거 모습으로 봅니다. 그래서 공격 판정은 서버가 “그 사람이 보던 과거”로 되감아 확인하는 지연 보상을 함께 씁니다.

출처

  1. Interpolation and extrapolation (Netcode for Entities 6.5) Unity
    늦게 온 패킷을 기다리려고 일부러 늦춰 그리는 버퍼 보간, 버퍼가 클수록 정확하지만 그만큼 지연이 늘어남
  2. Struct ClientTickRate (Netcode for Entities 6.5) Unity
    보간 버퍼 기본값 InterpolationTimeNetTicks = 2(서버 전송 2번 분량)
  3. Physics (Netcode for Entities 6.5) Unity
    지연 보상: 서버가 클라이언트가 그 틱에 보던 충돌 세계를 찾아 명중 여부를 판정

함께 보면 좋은 원인

같은 층: L1 클라이언트 게임 프로세스

같은 증상(뚝뚝 끊김)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기