UnrealEngine/UnrealEngine C++ 관련
언리얼엔진 UI UMG 및 C++ 최적화에 관하여
에드윈H
2024. 7. 21. 20:08
(해당 정보는 대부분 웹 서칭을 통해 찾아보고 나중에 제가 혼자 참고하려고 정리해보고 있습니다.)
렌더링 프로세스에 대해
- Game thread(게임 스레드)에서 Slate Tick은 프레임당 두 번 위젯 트리를 탐색.
1번 틱 :Prepass 트리를 아래->위로 탐색하여 각 위젯의 이상적인 크기( DesiredSize )를 계산.
2번 틱: OnPaint 트리를 위->아래로 탐색하여 렌더링에 필요한 Draw Elements 를 계산.
- Render Thread에서 Slate 렌더링은 두 단계로 나뉜다.
1. Widget Render: UI의 RTT를 수행합니다. Retainer Box를 사용하는 경우 Draw Elements는 Retainer Box의 Rtain Target에 렌더링됩니다.
2. Slate Render: Draw Elements를 Back Buffer에 렌더링합니다. Retainer Box를 사용하는 경우 Retainer Box에 해당하는 Texture Resource가 Back Buffer에 렌더링됩니다.
최적화를 위한 위젯
- Invalidation box
- 위젯을 지오메트리 cache에 담아 최적화
- prepass, tick, paint
- 갱신 빈도에 따라 역효과가 날 수 있음
- Child widget 을 모두 검사
- Animation 실행 시 CanCache 프로퍼티
- 위젯 리플렉터의 인벨리데이션 디버깅을 활용
- Hidden 대신 Collapsed 를 사용(레이아웃의 자리 계산을 없앨 수 있다.)
- UTextblock에서는 SimpleTextMode 적용하면 Preppass OnPaint call 감소
- Retainer box에서 틱 웨이트를 조절하자
- 불필요한 Tick 제거
- UCLASS(meta=(DisableNativeTick))
출처 :
https://topic.alibabacloud.com/a/ui-optimization-tips-in-unreal-engine-4_8_8_10274886.html
https://youtu.be/PqNm22br7y8?si=dwY8qXBg7uZeyA4I&t=1985