PART 7 · 강의 3/3

Physics 프로파일링

stat 명령, Unreal Insights, Debug Draw로 물리 성능 분석하기

01

콘솔 명령으로 빠른 진단

stat 명령과 물리 디버그 시각화

콘솔 명령표시 정보용도
stat Physics물리 시뮬레이션 시간, 파티클 수전반적 물리 성능 확인
stat ChaosChaos 솔버 세부 시간솔버 병목 분석
stat Collision충돌 감지 통계Broadphase/Narrowphase 비용
p.Chaos.DebugDraw.Enabled 1물리 형상 시각화콜리전 형상 확인
ShowFlag.Collision 1콜리전 와이어프레임콜리전 형상 시각화
p.Chaos.Solver.Joint.DebugDrawSettings 1조인트 디버그Constraint 상태 확인
p.Chaos.DebugDraw.ShowContactGraph 1접촉 그래프충돌 네트워크 시각화
C++ - 물리 디버그 시각화
// C++에서 물리 디버그 정보 출력 void APhysDebugActor::DrawPhysicsDebug() { UWorld* World = GetWorld(); // 콜리전 형상 디버그 드로우 FBodyInstance* Body = MeshComp->GetBodyInstance(); if (Body) { // 속도 벡터 시각화 FVector Velocity = Body->GetUnrealWorldVelocity(); DrawDebugDirectionalArrow( World, GetActorLocation(), GetActorLocation() + Velocity, 20.0f, FColor::Red, false, -1.0f, 0, 2.0f ); // 무게중심 시각화 FVector COM = Body->GetCOMPosition(); DrawDebugSphere(World, COM, 10.0f, 8, FColor::Yellow); // 슬립 상태 표시 bool bSleeping = Body->IsInstanceAwake() == false; FColor StateColor = bSleeping ? FColor::Blue : FColor::Green; DrawDebugBox(World, GetActorLocation(), FVector(5), StateColor, false, -1.0f); } }
02

Unreal Insights로 심층 분석

프레임 단위 물리 성능 프로파일링

Unreal Insights는 엔진의 모든 서브시스템을 프레임 단위로 분석할 수 있는 강력한 프로파일링 도구입니다. 물리 스레드의 시간 분포를 정확히 확인할 수 있습니다.

Insights 사용 방법
  • 1단계 — 에디터에서 -trace=cpu,frame,bookmark 옵션으로 실행하거나, 콘솔에서 Trace.Start 입력.
  • 2단계 — 문제가 되는 씬을 재현하고 Trace.Stop으로 캡처 종료.
  • 3단계 — UnrealInsights 앱(Binaries/Win64/UnrealInsights.exe)으로 .utrace 파일을 열기.
  • 4단계 — Timing 뷰에서 "Physics" 관련 스레드와 이벤트를 확인.
Insights 타이머측정 대상병목 시 대응
FPhysScene_Chaos::Tick전체 물리 틱전반적 물리 비용 확인
Broadphase충돌 후보 검색오브젝트 수 줄이기
NarrowPhase정밀 충돌 감지Simple Collision 사용
ConstraintSolver제약 풀이Solver Iteration 줄이기
GenerateContacts접촉점 생성접촉 오브젝트 수 최소화
UpdateResults결과 동기화활성 바디 수 줄이기
03

물리 성능 최적화 체크리스트

프로덕션 물리 성능을 위한 핵심 사항

최적화 체크리스트
  • 활성 바디 수 제한 — 동시에 시뮬레이션 중인 바디를 200~300개 이하로 유지합니다.
  • Sleep 활용 — 정지된 오브젝트가 빠르게 Sleep에 들어가도록 Sleep Threshold를 조정합니다.
  • Simple Collision 사용 — Per-Poly collision은 Trace에만 사용합니다.
  • 불필요한 Overlap 비활성화 — GenerateOverlapEvents를 필요한 곳에만 true로 설정합니다.
  • Destruction 파편 관리 — 파편 수명을 제한하고, 동시 활성 파편 수를 1000개 이하로 유지합니다.
  • Cloth 파티클 최적화 — 파티클 수를 500개 이하로, Self-Collision은 선택적으로 사용합니다.
  • Solver Iteration 최적화 — 필요한 최소한의 반복 횟수를 사용합니다.
  • CCD 선택적 적용 — 고속 물체에만 CCD를 활성화합니다.
플랫폼물리 예산 (ms)권장 활성 바디Solver Iteration
PC (하이엔드)2~3ms300+8~16
콘솔 (PS5/Xbox)2ms200~3008~12
모바일1~1.5ms50~1004~8
04

일반적인 물리 문제 해결

자주 발생하는 물리 문제와 해결 방법

문제증상원인해결
Jitter물체가 떨림질량 비율 불균형인접 물체 질량 비율 10:1 이내로
Tunneling물체가 관통고속 이동, 얇은 벽CCD 활성화, 벽 두께 증가
Explosion물체가 갑자기 튕겨나감초기 관통 상태스폰 위치 확인, 충돌 마진
Floating물체가 공중에 떠있음Sleep 후 지지물 제거WakeInstance() 호출
Stacking 불안정쌓인 물체가 무너짐Solver Iteration 부족반복 횟수 증가 (16+)
성능 저하프레임 드롭활성 바디 과다Sleep, 파편 제거, LOD 적용
질량 비율 규칙

접촉하는 두 물체의 질량 비율이 10:1을 초과하면 솔버가 불안정해질 수 있습니다(Jitter, 관통). 거대한 건물 위에 작은 물체를 올릴 때, 건물의 질량을 무한대로 설정하기보다 적절한 범위 내로 제한하세요.

SUMMARY

핵심 요약

  • stat Physics, stat Chaos 콘솔 명령으로 물리 성능을 빠르게 진단합니다.
  • Unreal Insights로 Broadphase, Narrowphase, ConstraintSolver 등 세부 비용을 프레임 단위로 분석합니다.
  • 플랫폼별 물리 예산: PC 2~3ms, 콘솔 2ms, 모바일 1~1.5ms 이내를 목표로 합니다.
  • Jitter, Tunneling, Explosion 등 일반적 문제는 질량 비율, CCD, 스폰 위치를 확인하여 해결합니다.
  • 프로덕션에서는 활성 바디 수 200~300개, Sleep 최적화, 파편 수명 관리가 핵심입니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Physics 디버그 시각화

p.Chaos.DebugDraw.Enabled 1, show Collision 등 디버그 명령어로 물리 콜리전, 접촉점, Constraint를 시각화하세요. 각 시각화 모드의 의미를 이해하고 문제를 진단하세요.

실습 2: Unreal Insights 물리 프로파일링

Unreal Insights를 실행하고 Physics 채널의 Timing 데이터를 분석하세요. Broadphase, Narrowphase, Solver 각 단계의 시간 비율을 파악하고 성능 병목을 식별하세요.

심화 과제: 자동화된 물리 성능 벤치마크

C++로 물리 객체 수를 점진적으로 증가시키며 FPS, Physics Thread 시간, 메모리 사용량을 CSV로 기록하는 자동화 벤치마크 시스템을 구축하세요.