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

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

float 시간 정밀도 손실 Float time precision loss on long sessions

원인 ID cg-float-time · 주 담당 게임개발팀·클라이언트 개발

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

게임 시각을 정밀도가 낮은 소수 형식(float)으로 들고 있으면, 켜 둔 시간이 길수록 시간 해상도(구별할 수 있는 가장 작은 시간 차이)가 떨어져 움직임과 이펙트가 떨립니다.

왜 게임을 켠 뒤 흐른 시간을 float로 쌓거나 그대로 셰이더에 넘김 → 그러면 켜 둔 시간이 길수록 float가 나타낼 수 있는 가장 작은 차이가 커짐 → 화면에서는 며칠 켜 둔 클라이언트만 캐릭터·애니메이션·흐르는 이펙트가 덜덜 떨리고 다시 켜면 멀쩡함

증상
뚝뚝 끊김
요인
지터
누가 겪나
나만
언제
오래 켜 둘수록
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
흐른 시간은 double(64비트)이나 정수로 보관, 셰이더에 넘기는 시간은 일정 주기로 되감기, 며칠짜리 장시간 자동 테스트.
수치 감각
32비트 float는 유효 숫자가 7자리 남짓입니다. 켜 둔 지 하루(약 86,400초)면 시간 해상도가 약 8ms로 60FPS 한 프레임(16.7ms)의 절반쯤이 되고, 일주일이면 약 60ms로 한 프레임보다 커집니다.
그래프에서는
서서히 오름 · 켜 둔 시간별 떨림 제보
확인할 곳
떨림 제보에 클라이언트를 켜 둔 시간을 함께 받고 재시작 전후를 비교. 개발 쪽은 게임 시작 시각 값을 며칠 지난 값으로 두고 돌려 보는 테스트
이러면 맞음
며칠 켜 둔 클라이언트에서만 떨리고 재시작하면 사라지며 켜 둔 시간이 길수록 심해짐
이러면 아님
켜자마자 떨리면 “보간 버퍼가 없거나 짧음”이나 “타이머 해상도”
확인 수단
유저 쪽 환경에서 확인
더 알아보기
자동 사냥을 켜 두고 며칠씩 끄지 않는 모바일 MMO에서 특히 나옵니다. 유니티의 Time.time도 float라서, 유니티는 double로 된 Time.timeAsDouble을 따로 두고 이쪽을 권합니다.

출처

  1. Time.timeAsDouble Unity
    Time.time의 double 버전, 오래 켜 둘수록 float보다 정밀해 대부분 이쪽을 권장
  2. Floating-point numeric types (C# reference) Microsoft
    float 정밀도 약 6~9자리, double 약 15~17자리

함께 보면 좋은 원인

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

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

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