본문 바로가기
언리얼_엔진_게임개발_공부/언리얼 UI

[UI] 최적화 방식 1

by jaboy 2025. 4. 2.

https://dev.epicgames.com/documentation/en-us/unreal-engine/optimization-guidelines-for-umg-in-unreal-engine

위 공식 문서를 살펴보며 언리얼 엔진의 Slate 와 UMG 를 활용하는 UI의 최적화 방식을 정리하고자 한다.

 

크게 아래와 같이 항목을 정리해볼 수 있다.

 

1. Invalidation

- 위젯의 paint, layout, hierarchy 에 변경사항이 없는 경우 repaint 하는 대신에 캐시된 정보를 활용하도록 한다.

- 매 프레임 repaint 하기 위해 사용되는 CPU 부하를 줄일 수 있다.

>> 이 부분은 테스트 후 별도 포스팅이 필요할 것 같다~

https://dev.epicgames.com/documentation/en-us/unreal-engine/invalidation-in-slate-and-umg-for-unreal-engine

 

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 로 마킹