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

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

대규모 인원 렌더링 부하 Render/animation cost of crowds

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

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

공성전·월드 보스처럼 수백 명이 한 화면에 들어오면 그리는 비용 자체가 감당이 안 됩니다.

왜 한 화면에 수백 명과 이펙트가 겹침 → 그러면 애니메이션·그림자·이름표·이펙트 비용이 인원에 비례해 증가 → 화면에서는 FPS가 60 → 15로 떨어져 모든 움직임이 뚝뚝 끊기고 입력도 늦음

증상
뚝뚝 끊김, 입력 지연
요인
정체
누가 겪나
특정 장소·채널, 나만
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
거리별 간소화(LOD), 표시 인원 상한, 이펙트 간소화 옵션, 애니메이션 갱신 주기 낮추기.
수치 감각
캐릭터 1명당 0.02~0.1ms라도 300명이면 6~30ms. 60FPS의 프레임 예산이 16.7ms이므로 이것만으로 예산의 3분의 1 넘게 쓰고 많으면 예산을 넘깁니다.
그래프에서는
인원·부하를 따라 오름 · 프레임 시간, 화면 안 캐릭터 수
확인할 곳
PresentMon의 프레임 시간과 CPUBusy·GPUBusy를 공성전·월드 보스 전후로 비교. 개발 빌드는 언리얼 stat Unit(게임 스레드·렌더링 스레드·GPU 시간)
이러면 맞음
화면 안 인원이 늘수록 프레임 시간이 함께 오르고 표시 인원 제한이나 이펙트 간소화 옵션을 켜면 바로 나아짐
이러면 아님
인원과 상관없이 튀면 “프레임 타임 스파이크”나 “클라이언트 가비지 컬렉션”. FPS는 멀쩡한데 다른 사람 움직임만 밀리면 “메인 스레드 패킷 처리 병목”
확인 수단
유저 쪽 환경에서 확인

출처

  1. Introduction to level of detail Unity
    LOD가 없으면 화면에 작게 보이는 물체도 같은 복잡도로 그림, LOD로 그리기 부담을 줄임
  2. Animation Budget Allocator in Unreal Engine Epic Games
    스켈레탈 메시의 애니메이션 갱신(틱)을 동적으로 줄여 애니메이션에 쓰는 시간을 예산 안으로 제한
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    FrameTime·CPUBusy·GPUBusy로 CPU와 GPU 중 어느 쪽이 프레임을 늦추는지 구분
  4. Stat Commands in Unreal Engine Epic Games
    stat Unit: 전체 프레임 시간과 게임 스레드·렌더링 스레드·GPU 시간

함께 보면 좋은 원인

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

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

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