Frame과 가까운 축을 찾고, 해결책은 다음 도구에서 고른다
`stat unit`은 자동 처방표가 아니다. Frame은 결과 시간이고, Game, Draw, RHIT, GPU 중 어느 값이 Frame을 붙잡는지 본 뒤 Insights나 profilegpu로 실제 호출 위치를 확인한다.
호출 빈도와 Game Thread 전용 작업을 분리한다
Tick을 끄는 것만 보지 말고 GC, AI service, animation update, physics request, UObject 접근을 Insights에서 확인한다.
드로우 제출과 상태 변경을 줄인다
Instancing과 Merge는 조건부 처방이다. material section, dynamic material, component 수, occlusion 단위를 함께 본다.
패스와 픽셀 비용을 GPU 도구로 다시 본다
GPU 값은 idle이나 sync가 섞일 수 있다. 해상도 스케일 테스트와 profilegpu로 shadow, post, translucency를 분리한다.
그래픽 API 제출과 대기를 따로 추적한다
RHIT가 길면 리소스 전환, command submission, render thread와 GPU 사이 동기화 대기 가능성을 캡처로 확인한다.
기준 캡처
같은 맵, 카메라, 입력, resolution scale에서 stat unit과 캡처를 남긴다.
Frame 근접 축 선택
가장 큰 숫자보다 Frame과 같이 움직이는 축을 우선 후보로 둔다.
원인 도구 전환
Game은 Insights, GPU는 profilegpu, Draw/RHIT는 렌더 제출 신호를 본다.
이동한 병목 확인
수정 뒤 다른 축이 Frame을 붙잡는지 다시 기록한다.
Frame은 고칠 대상이 아니라 결과다
Game, Draw, RHIT, GPU 중 어떤 축과 맞물려 움직이는지 본다.
Use Complex as Simple은 단순화가 아니다
시뮬레이션 대상은 단순 콜리전과 primitive component를 우선한다.
Async는 UObject 제약을 넘지 않는다
계산은 분리해도 Actor/Component 변경은 Game Thread로 되돌린다.
셰이더 실행 비용은 GPU에서 확인한다
Render Thread 병목과 pixel shader 비용을 같은 문제로 묶지 않는다.