위 공식 문서를 살펴보며 언리얼 엔진의 Slate 와 UMG 를 활용하는 UI의 최적화 방식을 정리하고자 한다.
크게 아래와 같이 항목을 정리해볼 수 있다.
1. Invalidation
- 위젯의 paint, layout, hierarchy 에 변경사항이 없는 경우 repaint 하는 대신에 캐시된 정보를 활용하도록 한다.
- 매 프레임 repaint 하기 위해 사용되는 CPU 부하를 줄일 수 있다.
>> 이 부분은 테스트 후 별도 포스팅이 필요할 것 같다~
2. 어트리뷰트 바인딩 최소화하기
- 위젯의 field를 attribute 에 기본 바인딩하는 경우 매 틱마다 값을 대입하므로 비효율적이다.
- 이벤트 기반으로 필드를 업데이트 하는 방식을 적극적으로 활용해야 한다.
3. 위젯 로드와 생성
- 복잡한 위젯의 경우 항상 보여져야 하는 위젯 / 빠르게 보여져야 하는 위젯 / 조금 느려도 되는 위젯 등으로 쪼개서 구현한다.
- 빠른 반응이 필요한 위젯의 경우 화면에 표시되지 않더라도 로드해놓을 수 있다.
- 조금 느려도 되는 위젯은 동적으로 로드 및 표시 후 삭제한다.
- 베이스 위젯은 로드해놓고, 자손 위젯 중 일부는 추후 async 로드하는 방식 등을 활용할 수 있다.
4. 레이어 ID 에 따른 드로우 콜 최소화
- 슬레이트에서 같은 레이어 ID 내에서 같은 리소스가 사용되는 경우 드로우 콜은 1회로 합쳐진다.
- 캔버스 패널과 오버레이는 레이어 ID 를 증가시키므로 같은 리소스라도 별도의 드로우 콜이 실행된다.
- Horizontal Box, Vertical Box 등의 컨테이너 위젯은 레이어 ID를 증가시키지 않으므로 자손 위젯의 드로우 콜을 줄일 수 있다.
- 아틀라스 그룹에 같이 등록된 Paper2D 스프라이트의 경우 다른 이미지여도 별도 드로우콜이 발생하지 않는다.
아래의 블로그에서 실제 드로우콜 테스트 결과를 확인할 수 있다.
UMG 드로우콜 분석
한줄요약 드로우 콜은 같은 리소스와 같은 레이어 ID라는 두 가지 조건이 동시에 만족되어야 하나로 합칠 수 있습니다. UMG에서의 드로우 콜 언리얼 공식 문서에는 드로우 콜과 관련하여 이런 설
blog.nullbus.net
5. 그 외 레이아웃 요소 선택 시 고려사항
- Size Box 의 경우 크기 조정과 렌더링에 있어 몇 번의 패스를 거치므로 특정 크기를 지정할 때 Spacer를 활용한다.
- Rich Text 는 다른 text box 에 비해 비용이 크므로 사용을 피한다.
6. 위젯 애니메이션
머티리얼 애니메이션 - 가장 효율적
시퀀서 활용하지 않는 블루프린트 스크립트 애니메이션 - 낮은 CPU 비용
UMG 에디터에서 만든 애니메이션 (=시퀀서 활용) - 높은 CPU 비용
레이아웃 변경을 필요로 하는 애니메이션 (e.g. 렌더 트랜스폼 변경) - 가장 높은 CPU 비용
>> Invalidation 을 활용한 후 해당하는 위젯만 Volatile 로 마킹
'언리얼_엔진_게임개발_공부 > 언리얼 UI' 카테고리의 다른 글
[UI] 최적화 방식 2 - Invalidation Box (0) | 2025.04.09 |
---|---|
[UI] MVVM 패턴 / 언리얼 엔진의 ViewModel (0) | 2025.03.31 |