Blog

ENGINEERING NOTE

[Unreal Engine] Tick 함수 최적화 성능 분석

해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.\[Unreal Engine] Tick 함수 최적화에서 감시 타워의 Tick 코드를 다음과

Unreal Engine
해당 포스팅은 Stuart Butler , Tom Oliver의 Game Development Patterns with Unreal Engine 5를 바탕으로 작성한 내용입니다.

얼마만큼의 개선이 이루어졌을까?

[[Unreal Engine] Tick 함수 최적화](https://velog.io/@imeamangryang/Unreal-Engine-Tick-%ED%95%A8%EC%88%98-%EC%B5%9C%EC%A0%81%ED%99%94-1)에서 감시 타워의 Tick 코드를 다음과 같이 최적화해보았다.

항목수정 전수정 후
적 감지매 Tick 스피어 트레이스SphereComponent Overlap 이벤트 + LineTrace
라이트 회전Tick에서 AddLocalRotation, 하드코딩Timeline + CurveFloat로 프레임 독립적 회전
Gated Polling미적용, 항상 검사적 발견 여부에 따라 회전/트레이스 제어
성능매 프레임 불필요 연산이벤트 발생 시에만 최소 연산
가독성Tick에 모든 로직 포함함수 분리, 역할 별 모듈화

그렇다면 과연 정량적인 수치적으로 얼마만큼의 개선이 이루어 냈는 지 알아보도록 하자.


Unreal Insight 사용하기

우선 성능 측정을 위해 수정 전 버전과 후 버전의 감시 타워를 배치하자.

에디터를 활성화하여 게임플 플레이한 후 아래의 언리얼 인사이트의 프로파일링을 위한 트레이스 시작 버튼을 누르자.

그 전에 프로파일링한 데이터를 바로 볼 수 있도록 아래의 옵션을 체크해주면 편리하다.

어느정도 성능 측정이 된 것 같다면 다시 트레이스 버튼을 눌러 종료하면 에디터 내에서 일어난 다양한 기록을 볼 수 있다.

많이 복잡해 보이지만

  • 위쪽 화면은 각 프레임당 얼마만큼의 시간이 걸렸는 지 확인
  • 아래 화면은 프레임 내 어떤 테스트들이 어떤 순서로 발생했는 지 확인

이 가능하다.

우리가 구현한 감시 타워의 테스크는 Game Thread에서 찾을 수 있다.

이 중에서도 UWorld_Tick Task를 확대해보면 하위에 위치한 모든 오브젝트들이 바로 우리가 보고 있는 월드에서 벌어지고 있는 작업들이다.

Performance Profiling

최적화 전 성능

최적화 이전의 감시 타워는

  • Inclusive Time : 95.6 µs
  • Exclusive Time : 47.8 µs

의 시간이 소요됐다.

Inclusive Time과 Exclusive Time

Inclusive Time은 해당 함수나 이벤트가 실행되는 전체 시간을 의미한다. (자신과 자식들의 총 비용) Exclusive Time은 해당 함수가 직접 소비한 시간만 의미한다. (순수하게 이 함수 내부에서만 사용된 시간)

최적화 후 성능

최적화 이후의 감시 타워는

  • Inclusive Time : 1.1 µs
  • Exclusive Time : 1.1 µs

의 시간이 소요됐으며,

타임라인으로 바꾼 Task는

  • Inclusive Time : 36.8 µs
  • Exclusive Time : 200 ns

가 걸렸다.


비교

구분최적화 전최적화 후 (Tick + Timeline)개선 비율
감시 타워95.6 µs1.1 µs + 36.8 µs = 37.9 µs2.5배 감소
최적화 후에도 Timeline Task 때문에 일부 비용이 발생하지만, 전체 Inclusive Time은 95.6 µs → 37.9 µs로 약 2.5배 감소한 것을 볼 수 있다.
⚠️주의

해당 분석은 단순 시뮬레이션을 통한 수치이며, 실제로는 타임라인을 이용한 방식도 Tick 만큼이나 시간을 소요할 수 있다. 어디까지나 유연하게 수치를 보며 다양한 방법을 통해 최적화를 이루어 내는 것이 좋다.