게임 렉 백서 › 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는 멀쩡한데 다른 사람 움직임만 밀리면 “메인 스레드 패킷 처리 병목”
- 확인 수단
- 유저 쪽 환경에서 확인
출처
- Introduction to level of detail Unity
LOD가 없으면 화면에 작게 보이는 물체도 같은 복잡도로 그림, LOD로 그리기 부담을 줄임 - Animation Budget Allocator in Unreal Engine Epic Games
스켈레탈 메시의 애니메이션 갱신(틱)을 동적으로 줄여 애니메이션에 쓰는 시간을 예산 안으로 제한 - PresentMon Capture Application (README-CaptureApplication.md) Intel
FrameTime·CPUBusy·GPUBusy로 CPU와 GPU 중 어느 쪽이 프레임을 늦추는지 구분 - Stat Commands in Unreal Engine Epic Games
stat Unit: 전체 프레임 시간과 게임 스레드·렌더링 스레드·GPU 시간
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(뚝뚝 끊김)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기