일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- GeeksForGeeks
- 프로그래머스
- 1563
- 오블완
- RVO
- Programmers
- 언리얼엔진5
- DirectX11
- UE5
- RootMotion
- DeferredRendering
- C++
- UnrealEngine5
- Frustum
- Unreal Engine5
- 줄 세우기
- C
- NRVO
- const
- 2294
- UnrealEngine4
- 팰린드롬 만들기
- 티스토리챌린지
- IFileDialog
- algorithm
- baekjoon
- 백준
- winapi
- softeer
- directx
- Today
- Total
Game Develop
[UE5] 언리얼 UI 최적화. 본문
전체내용은 맨하단의 링크를 참고. 링크가 총 3갠데, 3개 전부 내용을 적는게 아니라 첫번째꺼의 당장 소화할 수 있는 극히 일부분만 조금 적어보려 한다. 3개링크 한번쯤 읽어보면 괜찮은 글 같다.
먼저 Visibility 옵션에 관해 짤막한 소개.
UnreanEngine4에서 이름만 조금 바뀐정도인 것 같다.
내용은 사실상 동일하다.
아래는 UnrealEngine5에서의 옵션들 이름이다.
Visible : 화면에 보이면서 마우스 클릭,터치등의 인터랙션 가능.
해당 레이어 밖에서의 인터랙션은 통하지 않음. ( ex) 화면 전체를 가리는 레이어를 쓸 때)
Collapsed : 화면에 보이지 않게하면서 공간을 차지하지 않게 하고 싶을 때 사용
(보이지 않을 때 공간을 차지하면 어색한 위젯에 사용)
Hidden : 화면에 보이지 않지만 공간은 차지하는 경우 (공간 차지해도 상관없는 경우 사용)
Not Hit - Testable (Self & Children) : 현재 위젯과 자식들을 보이긴 하지만 인터랙션은 불가능.
Not Hit - Testable (Self Only) : 현재 위젯을 보이게 하고, 인터랙션 불가능.
1. Collapsed는 레이아웃 공간을 차지하지 않아 숨겨진 후에 Prepass 계산을 무시하기 때문에 Hidden 보다 성능이 우수하다고 할 수 있다.
2. 다른것들과 마찬가지로 일단 Tick기반의 로직은 작성 안하는게 좋다. 이벤트기반이 좋다.
3. 2번과 비슷한 느낌인데, CreateWidget 함수는 매우 비싸기 때문에 사용에 주의한다.
너무 잦은 호출을 해야하는 경우, Pooling을 사용하는것을 권장한다. 그렇다고 모든 위젯을 하는건 또 권장하지 않는다.
즉 알아서.. 성능 프로파일링하든가 해서 타협점을 찾자.
[ 간략한 구조설명 ] (첫번째 링크)
언리얼 위젯은 최상위 계층부터 하위까지 재귀적으로 Paint함수가 호출된다.
Paint함수는 내부적으로 블루프린트위젯과 네이티브(C++)틱 함수를 호출한다.
그리고 Hit Test Grid를 리빌드하며 렌더러정보를 Slate Element Batcher에 추가한다.
여기서 Hit Test Grid란, UI와 상호작용하기위한(마우스터치 등) HitTest 를 진행해야하는 위젯들을 모아놓은 컨테이너이다.
틱마다 피킹검사하는거라 생각하면 된다.
이 컨테이너는 쿼드트리로 구성되어 있다.
즉, 상호작용을 하기위한게 아니면 반드시 Visibility옵션에서 Not Hit 옵션으로 설정하자. 굳이 Hit Test Grid의 컨테이너에 포함시켜서 검사비용을 증가시킬 필요가 없다.
그리고 Slate Element Batcher에 추가한다고 했었는데, 이것은 UI Slate를 렌더링하기 위한 정보를 저장/관리하는 클래스이다. (FSlateElementBatcher)
... 일단은 여기까지.
첫번째링크글의 일부의 내용이고, 이후의 디테일한 글은 링크를 참고바람.
https://www.slideshare.net/slideshow/aaauipptx/251701961
https://codeonwort.tistory.com/362
https://coding-hell.tistory.com/78
'UnrealEngine5 > 이것저것' 카테고리의 다른 글
[UE5] NotifyState에서 GetWorld()는 nullptr만 반환한다. (0) | 2024.07.31 |
---|---|
[UE5][이슈] 몽타주재생시 노티파이호출타이밍 조심해야 한다. (0) | 2024.06.21 |
[UE5] 몽타주 관련함수 호출순서. (0) | 2024.06.14 |
[UE5] Enum class 상태들 순서 변경시 주의할점. (0) | 2024.06.11 |
[UE5] Enum class 사용법. (0) | 2024.05.13 |