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

게임 렉 백서 › 동기화 설계

타임스탬프 없는 도착 즉시 재생 Events played on arrival (no timestamps)

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

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

서버 이벤트에 발생 시각을 붙이지 않고 받자마자 재생하면, 네트워크 지터 때문에 연출 타이밍이 그대로 들쭉날쭉해집니다.

왜 “공격 시작”, “이펙트 재생” 이벤트를 도착 즉시 실행 → 그러면 패킷마다 도착 시간이 달라 간격이 들쭉날쭉 → 화면에서는 연속 공격 모션이 빨라졌다 느려졌다, 보스 패턴 타이밍이 매번 다름

증상
뚝뚝 끊김, 몰아치기
요인
지터
누가 겪나
나만
언제
항상
담당
주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
게임개발팀 할 일
클라이언트: 이벤트에 붙은 시각에 맞춰 재생(이벤트 예약·보간 버퍼). 서버: 이벤트에 발생 시각(서버 시각)을 붙여 보내기.
그래프에서는
가끔 무작위로 튐 · 이벤트 재생 간격, 패킷 도착 간격
확인할 곳
서버 로그의 이벤트 발생 시각과 클라이언트 로그의 도착·재생 시각을 이벤트 번호로 맞춰 간격을 비교. 개발 빌드에서 지터를 넣어(tc netem의 지터 값, Unreal 네트워크 에뮬레이션의 최소·최대 지연) 재현해 봄
이러면 맞음
서버에서 잰 발생 간격은 일정한데 재생 간격이 도착 간격을 그대로 따라 들쭉날쭉함
이러면 아님
도착 간격은 고른데 재생이 들쭉날쭉하면 클라이언트 프레임 문제(프레임 타임 스파이크). 서버 발생 간격부터 흔들리면 틱 예산 초과
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    업데이트마다 서버 시각을 붙이고 현재 시각에서 보간 시간(100ms)을 뺀 목표 시각의 위치로 그림
  2. Snapshot Interpolation Gaffer On Games
    받은 스냅샷을 바로 그리면 지터 때문에 끊기고 보간 버퍼에 잠깐 모았다 그리면 매끄러움
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    RPC에 보낸 시각을 담아 받는 쪽이 서버 시각에 맞춰 효과를 재생하는 예
  4. tc-netem(8) — Linux manual page iproute2
    나가는 패킷에 지연·지터(delay TIME JITTER)와 손실(loss random PERCENT)을 넣어 실제 네트워크를 흉내 내는 시험 도구
  5. Using Network Emulation in Unreal Engine Epic Games
    서버·클라이언트에 최소·최대 지연과 패킷 손실 비율을 넣어 시험, 콘솔에서는 NetEmulation.PktLag처럼 설정

함께 보면 좋은 원인

같은 층: 동기화 설계

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

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