씬이 무거워져서 프레임이 30 아래로 떨어지면 대부분 먼저 그래픽 옵션부터 낮춰 봅니다. 그림자 품질을 내리고, 루멘을 끄고, 해상도를 줄입니다. 그런데 이렇게 해도 프레임이 거의 그대로인 경우가 있습니다. 원인이 GPU가 아니라 블루프린트 로직이나 드로우콜처럼 CPU 쪽에 있었기 때문입니다.
그래서 성능을 손대기 전에 "어디가 막혀 있는지"를 먼저 확인해야 합니다. 이 판단에 가장 빠르게 쓰는 명령이 stat unit 입니다. 이 글은 Epic 공식 문서(5.8판)의 설명을 기준으로, 숫자를 어떻게 읽고 그다음 무엇을 켜야 하는지 순서대로 정리했습니다.
stat unit 이 보여주는 숫자와 뜻


콘솔(~ 키)을 열고 아래를 입력합니다.
stat unit
화면 오른쪽에 밀리초(ms) 단위 숫자가 나타납니다. 공식 문서 기준으로 각 항목의 뜻은 이렇습니다.
| 항목 | 의미 | 이 값이 Frame 과 비슷하면 |
|---|---|---|
| Frame | 한 프레임을 만드는 데 걸린 전체 시간 | 기준값 |
| Game | 게임 스레드 시간(게임 로직, 블루프린트, 애니메이션 갱신 등) | 게임 스레드 병목 가능성 |
| Draw | 렌더 스레드 시간(무엇을 그릴지 준비해 GPU에 넘기는 작업) | 렌더 스레드 병목 가능성 |
| GPU | 그래픽카드가 장면을 그리는 데 걸린 시간 | GPU 병목 가능성 |
| RHIT | RHI 스레드 시간. 보통 프레임에 동기화되어 Frame 과 비슷하게 나옴 | 단독 판단 기준으로 쓰지 않음 |
| DynRes | 동적 해상도가 켜져 있을 때 기본·보조 화면 비율(Primary·Secondary Screen Percentage) | 해상도가 자동으로 깎이고 있는지 확인 |
핵심은 Frame 과 가장 가까운 값을 찾는 것입니다. 문서도 "Frame 시간이 Game 시간에 가까우면 게임 스레드가, Draw 시간에 가까우면 렌더 스레드가 병목일 가능성이 크다"고 설명합니다. 세 스레드는 동시에 돌아가기 때문에 가장 느린 하나가 전체 프레임 시간을 결정합니다. 가장 느린 쪽을 줄이지 않으면 다른 쪽을 아무리 줄여도 프레임은 거의 오르지 않는 이유가 여기에 있습니다.
참고로 목표 프레임을 ms 로 바꾸면 판단이 쉬워집니다. 60fps 는 약 16.7ms, 30fps 는 약 33.3ms 입니다. Frame 이 25ms 라면 60fps 목표까지 약 8ms 를 줄여야 한다는 뜻입니다.
측정 전에 맞춰야 할 조건


숫자가 믿을 만하려면 측정 환경부터 정리해야 합니다.
- 디버그 빌드가 아닌 환경에서 잽니다. 공식 문서도 "디버그가 아닌 빌드로 게임을 실행해" 병목을 판단하라고 안내합니다. 에디터 뷰포트에서 잰 값에는 에디터 자체의 부담이 섞이므로, 가능하면 Standalone Game 이나 Development 패키지로 확인합니다.
- 수직동기화(VSync)나 프레임 제한이 걸려 있으면 Frame 이 16.7ms 같은 값에 붙어서 실제 여유를 알 수 없습니다. 측정할 때는 제한을 풀고 봅니다.
- 같은 위치, 같은 카메라 방향에서 비교합니다. 시점만 바뀌어도 화면에 들어오는 오브젝트 수가 달라져 숫자가 크게 흔들립니다.
한 순간의 숫자는 튀기 쉬우므로 그래프로 보는 것도 방법입니다.
stat unitgraph
이 명령은 stat unit 값을 시간 흐름 그래프로 보여 줍니다. 특정 순간에만 튀는 스파이크(히치)인지, 계속 높은 상태인지 구분할 때 유용합니다.
병목별로 다음에 켤 명령
어느 쪽이 느린지 가려졌다면 그 영역을 더 자세히 봅니다.
GPU 가 Frame 에 가까울 때
stat gpu
GPU 작업을 패스별 시간으로 보여 줍니다. 그림자, 루멘, 반투명, 후처리 중 어디가 큰지 확인한 뒤 해당 기능의 품질이나 범위를 조정합니다. 한 프레임을 더 자세히 쪼개 보고 싶다면 ProfileGPU 명령을 씁니다. Epic 공식 콘솔 변수 문서에 따르면 ProfileGPU 결과는 로그·콘솔에도 기록되므로, 창이 뜨지 않으면 출력 로그(Output Log)를 확인합니다.
Draw 가 Frame 에 가까울 때
stat scenerendering
공식 문서는 이 명령을 "렌더링에서 느린 영역을 찾는 좋은 출발점"이라고 설명합니다. 드로우콜 수와 보이는 메시 수를 보고, 너무 많다면 액터 병합이나 인스턴싱, 거리별 컬링을 검토합니다.
Game 이 Frame 에 가까울 때
그래픽 설정은 거의 효과가 없습니다. 매 프레임 실행되는 Tick 이벤트, 많은 캐릭터의 애니메이션 갱신, 물리 처리 등 로직 쪽을 의심합니다. 이 경우에는 Unreal Insights 로 함수 단위 시간을 보는 것이 다음 단계입니다.
화면에 켜 둔 통계를 모두 끌 때는 아래를 씁니다.
stat none
자주 하는 오해 세 가지
첫째, 프레임이 낮으면 무조건 그래픽카드 문제라고 보는 경우입니다. 위에서 본 것처럼 Game 이 가장 크면 그래픽 옵션을 낮춰도 개선이 거의 없습니다.
둘째, stat fps 만 보고 판단하는 경우입니다. stat fps 는 결과(초당 프레임)만 보여 줄 뿐 원인은 알려 주지 않습니다. 원인을 가르려면 stat unit 이 필요합니다.
셋째, GPU 값이 Frame 보다 작으니 GPU 는 여유가 있다고 단정하는 경우입니다. 동적 해상도가 켜져 있으면 엔진이 해상도를 자동으로 낮춰 GPU 시간을 맞추고 있을 수 있습니다. DynRes의 Primary Screen Percentage가 100%보다 낮으면 기본 렌더링 해상도를 낮춘 상태라는 뜻입니다. Secondary Screen Percentage와 함께 확인합니다.
정리하면 순서는 간단합니다. stat unit 으로 Frame 과 가장 가까운 값을 찾고, GPU 면 stat gpu, Draw 면 stat scenerendering, Game 이면 로직 쪽 프로파일링으로 넘어갑니다. 이 순서를 지키면 효과 없는 옵션을 하나씩 끄며 시간을 쓰는 일을 줄일 수 있습니다.
자주 묻는 질문
Game, Draw, GPU 가 모두 비슷하게 높으면 어디부터 봐야 하나요?
세 값이 비슷하면 어느 한쪽만 줄여도 다른 쪽이 곧바로 새 병목이 됩니다. 이럴 때는 화면에 보이는 오브젝트 수 자체를 줄이는 작업(컬링 거리, LOD, 인스턴싱)이 CPU 두 스레드와 GPU 에 동시에 영향을 주기 때문에 먼저 검토할 만합니다.
에디터 뷰포트에서 잰 값과 패키지 빌드 값이 크게 다릅니다. 어느 쪽을 믿어야 하나요?
최종 사용자가 경험하는 성능은 패키지 빌드 쪽에 가깝습니다. 에디터는 편집 도구 자체의 부담이 더해지므로 대략적인 경향 확인용으로 쓰고, 목표 프레임 달성 여부는 Development 패키지나 Standalone 실행에서 확인하는 것이 정확합니다.
stat 명령이 화면에 안 뜹니다.
배포(Shipping) 빌드는 일반적으로 콘솔과 통계 표시가 비활성화되어 있습니다. 에디터, Standalone, Development 빌드에서 사용하세요. 이미 켜 둔 다른 stat 창에 가려진 경우도 있으니 stat none 으로 모두 끈 뒤 다시 켜 보는 것도 방법입니다.
용어 설명
- 게임 스레드(Game Thread): 게임 규칙, 블루프린트, 입력, 애니메이션 갱신 같은 로직을 처리하는 CPU 작업 흐름.
- 렌더 스레드(Render Thread): 어떤 오브젝트를 어떤 순서로 그릴지 정리해 GPU 에 넘기는 CPU 작업 흐름. stat unit 에서는 Draw 로 표시된다.
- RHI(Rendering Hardware Interface): DirectX·Vulkan 같은 그래픽 API 와 엔진 사이를 잇는 계층.
- 병목(Bottleneck): 전체 속도를 결정하는 가장 느린 구간.
- 드로우콜(Draw Call): CPU 가 GPU 에 "이 물체를 그려라"라고 보내는 명령 한 번. 많을수록 렌더 스레드 부담이 커진다.
- 동적 해상도(Dynamic Resolution): 프레임 시간을 맞추려고 렌더링 해상도를 자동으로 조정하는 기능.
- 히치(Hitch): 특정 순간에만 프레임이 크게 튀는 현상.
- Unreal Insights: 함수·스레드 단위로 시간을 기록해 분석하는 언리얼 공식 프로파일링 도구.
근거 출처
- Epic Games, Stat Commands in Unreal Engine (UE 5.8 문서): https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine
- Epic Games, Unreal Engine Console Variables Reference: Profile GPU · r.ProfileGPU.ShowUI
- Epic Games, Dynamic Resolution: 기본·보조 화면 비율과 프레임 시간