SlideShare a Scribd company logo
1 of 40
DevRookie
AAA게임 UI
최적화
및
빌드하기
2022.04.30
By TonyChoiMS
개요
AHUD::Tick
CreateWidget
DrawWindow
SlatePrepass
SMeshWidget
Index
01
02
03
04
05
06
개요
UI는 왜 최적화를 해야할까?
UI는 왜 이렇게 비싼 비용이 드는 것일 까요?
간단한 것 같으면서도 심오한듯한 UI의 세계..
개요
01
4
게임은 갈수록 구체적이고 더 자세한 정보들을 유저에게 제공해주길 원
합니다.
- 모바일 게임
개요
01
5
게임이 고도화됨에 따라 정보량이 계속 늘어나고 있는 이유도 있습니다.
- 모바일 게임2
개요
01
6
그래픽 퀄리티가 좋아지는 것은 인게임 뿐만 아니라 UI 또한 마찬가지인
이유도 있을 것입니다.
- 모바일 게임3
개요
01
7
모바일 뿐만 아니라 PC 게임도 마찬가지입니다.
- PC 게임
개요
01
8
- 개발 할 때 사람들은 UI가 빠르게 반복처리 되길 바라면서도 프로그
래머 병목 현상은 없기를 바랍니다.
- 다이나믹 텍스트, 복잡한 레이아웃 규칙들은 UI로 하여금 많은 퍼포먼
스를 요구하게 됩니다.
개요
01
9
AHUD::Tick
Tick 함수 제거를 고려해야 합니다.
- HUD는 일반 액터와도 같으며, Tick 함수 또한 그와 같은 행동을 합니
다.
- ‘무조건 사용하면 안된다.’ 와 같은 뜻은 아니며, Tick을 제거한다고
무조건 퍼포먼스 향상을 가져온다는 보장은 없습니다.
AHUD::Tick
02
11
- Tick을 삭제하는 진짜 이유는 구현하기 쉽다는 이유로 매 프레임마다
작업을 추가하는 일을 방지하기 위해서입니다.
- 게임 코드와의 통신, 위젯 이동, 위젯 생성/삭제
- 이를 방지하기 위해 이벤트 기반의 작업으로 진행하는 것을 권장합니
다.
- TimerEvent를 통해 원하는 만큼만 갱신될 수 있도록 작업
AHUD::Tick
02
12
CreateWidget
위젯을 런타임에 생성하다.
- ‘CreateWidget’ 함수는 매우 비싸기 때문에 사용에 주의해야 합니다.
- 컨텐츠 상 너무 잦은 함수 호출을 하게 되는 경우, Pooling해서 사용
할 것을 권장합니다.
- 시작(Loading) 시간에 Pool을 채운 후, 필요할 때 가져와서 재사용
- 모든 위젯을 Pooling하는 것을 권장하지는 않습니다.
CreateWidget
03
14
DrawWindow
프로파일링 시 확인해야 할 목록
- 프로파일링 할 때 볼 수 있는 목록
- 위젯 최상위 계층부터 하위까지 재귀적으로 호출되며 각 위젯의 Paint
함수가 호출되는 것을 얘기합니다.
DrawWindow
04
16
- Paint 함수는
1. 내부적으로 블루프린트 위젯과 네이티브(C++) 틱 함수를 호출합니다.
2. Hit Test Grid 를 리빌드 합니다.
3. 렌더러 정보를 Slate Element Batcher에 추가합니다.
Paint Function
04
17
- Hit Test Grid는
1. UI와 상호작용을 하기 위해 Hit Test를 진행해야 하는 위젯들을 모아
놓은 컨테이너
2. 쿼드 트리로 구성되어 있습니다.
3. Hit Test를 진행할 위젯들을 다시 선별하여 트리를 재구성하는 것을
의미합니다.
Hit Test
04
18
- 위젯이 보이지만, 상호작용이 필요한 위젯이 아닌 경우에는 Visible
Type을 HitTestInvisible 또는 SelfHitTestInvisible로 설정하는 것을 권장
합니다.
- 위젯을 Hit Test Grid에 추가하지 않게 하기 위해서입니다.
Hit Test
04
19
- HitTestInvisible : Hit Test Grid에 자신의 모든 자손에 대한 검색을
중지합니다.
- SelfHitTestInvisible : 자기 자신만 Hit Test Grid에 포함시키지 않습
니다.
Hit Test
04
20
- Paint 함수는 렌더러 정보를 Slate Element Batcher에 추가합니다.
- FSlateElementBatcher
- UI Slate를 렌더링하기 위해 정보를 저장/관리 하는 클래스
Slate Element Batcher
04
21
- 이 행동들을 각 컨테이너에 재귀적으로 호출하게 됩니다.
- 그렇기 때문에, 컨테이너 안에 컨테이너를 넣고, 그 안에 또 컨테이너를 넣
으면 재귀 함수 호출 수가 더욱 늘어나게 되어 vtable 룩업 속도도 저하되며,
CPU 캐시 미스가 발생할 수 있습니다.
- 이를 최적화 하기 위해 UI 위젯 평탄화 작업을 진행합니다.
- UMG UI 디자이너의 위젯 트리는 위젯의 코드를 처리하는 Task Graph를 직
접적으로 나타내고, 이 트리가 작을 수록 호출하는 함수 수도 줄어든다는 것
을 의미합니다.
Paint Function
04
22
SlatePrepass
의문을 갖게 되는 항목
- 프로파일링 항목
- 엔진 프로그래머가 의문을 던지는 부분
-프로파일링 장치가 너무 적어서 처음엔 무엇을 하는 부분인지 알 수 없음.
SlatePrepass
05
24
1. 각 위젯의 모든 캐시 지오메트리 엔트리를 리빌드 하는 역할을 합니
다.
- 리빌드 하기 위해 위젯의 계층구조 바닥까지 내려갔다가 맨 위까지 다시 올라옵니다. (leaf-most 노
드)
- 따라서 위젯들의 지오메트리는 계층구조의 위아래 모두에 영향을 준다는 것을 알 수 있습니다.
- 예를 들면 테이블 셀의 크기를 결정하는 것은 그 안의 컨텐츠 뿐만이 아닙니다.
- 열과 행의 크기도 셀의 크기를 제한하는 역할을 합니다.
SlatePrepass
05
25
2. 이 함수는 각 프레임마다 위젯 트리 전체를 재계산한 캐시 지오메트
리 값을 가져옵니다.
- 위젯을 숨길 때 Visible Type을 Hidden 보다는 Collapsed 을 사용하는 것을 권장합니다.
SlatePrepass
05
26
- Hidden을 사용하면 위젯이 안보이는 상태가 되더라도, 주변 위젯의 지오메트리에 영향을 주기
때문입 니다.
- 숨겨진 위젯의 지오메트리를 계산하려면 그 위젯 자손들의 지오메트리도 계산해야 하기 때문인
데, 이는 자 손 위젯들이 화면 상에 렌더링 되지 않더라도 마찬가지 입니다.
- Collapsed를 사용하면 SlatePrepass가 leaf-most 노드로 내려가는 중간 재귀 함수 호출을 중
단시켜 줄 수 있는 유일한 Visibilty Setting입니다.
※ Hidden이 필요한 경우도 있으나, 최대한 자제.. (UI 디자이너와 협의 필요)
SlatePrepass
05
27
1. Invalidation Box 컨테이너 하위 트리의 레이아웃과 변동성 캐싱
2. 퍼포먼스가 개선될 수도 있지만, 애니메이션이나 레이아웃과 관련된
문제가 발생할 수도 있음.
1. 이와 같은 이슈를 해결하기 위해 Invalidation Box를 삭제하는 것으로 문제를 해결하는 것을 본 적이
있는데, 이것은 좋지 못한 것이라 생각합니다.
2. 상황에 맞는 적절한 해결 방법을 찾아서 문제를 해소하는 것이 좋습니다.
3. Tick 함수에서 Invalidation 함수를 호출하는 것을 봤는데, 이것은 최선이 아닐 거
라 생각합니다.
4. Invalidation Box는 프로젝트 작업 후반부에 하는 것이 좋습니다.
Invalidation Box
05
28
Invalidation Box
05
29
SMeshWidget
좀 더 극단적인 최적화를 위한 내용
1. 발표자는 SMeshWidget 클래스를 통해 구현하는 커스텀 위젯을 많이
사용함.
2. 현재 UMG에서는 구현된 부분이 없으며, 사용되지 않는 것으로 알고
있습니다.
- 원하는 2D메시를 이용해 그에 대응하는 머티리얼로 직접 그리는 인터페이스를 제공합니다.
- 이것을 이용하면 버텍스/인덱스 버퍼에 레퍼런스와 함께 전달되는 버퍼를 Slate Element Batcher
에 직접 생성할 수 있습니다.
- 렌더 배치에서는 렌더링 가능한 인스턴스 수를 포함하는 버퍼를 사용하여 메시의 수많은 인스턴스
를 렌더링하고 해당 버퍼를 머티리얼 쉐이더에 전달할 수 있습니다.
- 결과적으로 버퍼 하나로 수많은 메시 인스턴스를 렌더링할 수 있습니다.
- 이를 이용한 첫번 째 예가 Particle Emitter입니다.
SMeshWidget
06
31
3. 이를 구현하면 다른 위젯에 레이어링 할 파티클을 스폰할 수 있습니다.
- UMG 위젯 트리에 순서대로 레이어링 된다는 것을 의미합니다.
SMeshWidget
06
32
SMeshWidget
06
33
4. 파티클 위젯 이외에도 수많은 복잡한 위젯들을 만들 수 있으며, 그 중 지도가 좋은
예 입니다.
- 맵에 그려지는 모든 아이콘은 하나의 머리티얼 인스턴스에 포함될 수 있지
만, 인스턴 스 버퍼에서는 각 아이콘에 엔트리마
다 다른 파라미터가 전송된다는 것을 알아야 합니 다.
- 한마디로 이 맵은 한번의 페인트 함수 호출로 모든 아이콘을 그릴 수 있다는
것을 의미 합니다.
SMeshWidget
06
34
4. 커스텀 위젯을 사용할 때 발생하는 문제점도 있습니다.
- 게임을 위해 직접 제작한 커스텀 위젯을 구축한 것은 일반적인 솔루션을 만
드는게 아 니므로, 아티스트의 워크플로우에 영향을 미칩니다.
- 아티스트가 시퀀스 툴을 사용할 수 없으므로, 파티클을 붙일 때 프로그래머
와 협업을 해 야 하므로, 반복 작업 시 병목현상을 일으킬 수 있습니다.
- 그렇기 때문에 모든 것을 커스텀해서 사용하게 된다면, 오히려 낮은 생산성
을 초래할 수 있습니다.
SMeshWidget
06
35
- UI는 우리가 생각한 것보다 더 많은 퍼포먼스를 요구하기에, 커스텀보다는
일반적인
솔루션을 가져가는 것이 더 효율적일 수 있습니다.
SMeshWidget
06
36
[Unreal ListView]
https://bornsoul.tistory.com/32
[Unreal Atlas Group]
https://m.blog.naver.com/PostView.naver?blogId=jinwish&logNo=2215597
25843&targetKeyword=&targetRecommendationCode=1
추가 팁
06
37
[Unreal Fest Online 2020 – AAA 게임 UI 최적화 및 빌드하기]
https://www.youtube.com/watch?v=SYLeRHu6ras
참고 자료
06
38
[프로그래머의 길, 멘토에게 묻다]
- 당신이 프로그래밍한지 3개월이 되었든 5년이 되었든 간에,
소프트웨어 장인 정신의 관점에서는 여전히 초보자라는
사실을 이해해야 한다.
- 흰 띠를 매라. : 내가 어떤 전문 지식을 익혔든지 간에 초심으로
돌아가라.
참고 자료
06
38
감사합니다

More Related Content

What's hot

언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017devCAT Studio, NEXON
 
[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니Yongha Kim
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들강 민우
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부Eunseok Yi
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원강 민우
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.Wuwon Yu
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인강 민우
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리강 민우
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지영준 박
 

What's hot (20)

언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
 
[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니[NDC 2021] 게임 PD가 되어 보니
[NDC 2021] 게임 PD가 되어 보니
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
 

Similar to AAA게임_UI_최적화_및_빌드하기.pptx

유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들
유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들
유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들Hong-Gi Joe
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1DataUs
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수NAVER Engineering
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법SooHwan Ok
 
이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기Devgear
 
디자인 시스템 디자인하기
디자인 시스템 디자인하기디자인 시스템 디자인하기
디자인 시스템 디자인하기sangyong lee
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Minsu Park
 
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표Minho Lee
 
Unity3D - SmoothMoves
Unity3D -  SmoothMovesUnity3D -  SmoothMoves
Unity3D - SmoothMovesSungWook Hong
 
Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Jiseob Park
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교Wonjun Hwang
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례미래웹기술연구소 (MIRAE WEB)
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android AnimationNAVER D2
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험Lee Sang-Ho
 

Similar to AAA게임_UI_최적화_및_빌드하기.pptx (20)

유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들
유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들
유니티3D 2017의 UI Sprite Atlas 와 아쉬운 UI 기능들
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법
 
이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기
 
디자인 시스템 디자인하기
디자인 시스템 디자인하기디자인 시스템 디자인하기
디자인 시스템 디자인하기
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표
220806 UX/UI 해외 인기 아티클 6기 : 3주차 발표
 
Unity3D - SmoothMoves
Unity3D -  SmoothMovesUnity3D -  SmoothMoves
Unity3D - SmoothMoves
 
Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교
브라우저 렌더링 - Reflow와 Repaint 애니메이션 성능 비교
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례
Sencha ExtJS 5 와 Sencha Architect 3 를 활용한 엔터프라이즈 솔루션 개발사례
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - HTML, Android Animation
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험
 

More from TonyCms

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptxTonyCms
 
Unreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxUnreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxTonyCms
 
Unreal python
Unreal pythonUnreal python
Unreal pythonTonyCms
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
Unreal animation system
Unreal animation systemUnreal animation system
Unreal animation systemTonyCms
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식TonyCms
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perceptionTonyCms
 
About matinee
About matineeAbout matinee
About matineeTonyCms
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow MapTonyCms
 

More from TonyCms (10)

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptx
 
Unreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptxUnreal_GameAbilitySystem.pptx
Unreal_GameAbilitySystem.pptx
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
Unreal animation system
Unreal animation systemUnreal animation system
Unreal animation system
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perception
 
About matinee
About matineeAbout matinee
About matinee
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow Map
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

AAA게임_UI_최적화_및_빌드하기.pptx

  • 4. UI는 왜 이렇게 비싼 비용이 드는 것일 까요? 간단한 것 같으면서도 심오한듯한 UI의 세계.. 개요 01 4
  • 5. 게임은 갈수록 구체적이고 더 자세한 정보들을 유저에게 제공해주길 원 합니다. - 모바일 게임 개요 01 5
  • 6. 게임이 고도화됨에 따라 정보량이 계속 늘어나고 있는 이유도 있습니다. - 모바일 게임2 개요 01 6
  • 7. 그래픽 퀄리티가 좋아지는 것은 인게임 뿐만 아니라 UI 또한 마찬가지인 이유도 있을 것입니다. - 모바일 게임3 개요 01 7
  • 8. 모바일 뿐만 아니라 PC 게임도 마찬가지입니다. - PC 게임 개요 01 8
  • 9. - 개발 할 때 사람들은 UI가 빠르게 반복처리 되길 바라면서도 프로그 래머 병목 현상은 없기를 바랍니다. - 다이나믹 텍스트, 복잡한 레이아웃 규칙들은 UI로 하여금 많은 퍼포먼 스를 요구하게 됩니다. 개요 01 9
  • 10. AHUD::Tick Tick 함수 제거를 고려해야 합니다.
  • 11. - HUD는 일반 액터와도 같으며, Tick 함수 또한 그와 같은 행동을 합니 다. - ‘무조건 사용하면 안된다.’ 와 같은 뜻은 아니며, Tick을 제거한다고 무조건 퍼포먼스 향상을 가져온다는 보장은 없습니다. AHUD::Tick 02 11
  • 12. - Tick을 삭제하는 진짜 이유는 구현하기 쉽다는 이유로 매 프레임마다 작업을 추가하는 일을 방지하기 위해서입니다. - 게임 코드와의 통신, 위젯 이동, 위젯 생성/삭제 - 이를 방지하기 위해 이벤트 기반의 작업으로 진행하는 것을 권장합니 다. - TimerEvent를 통해 원하는 만큼만 갱신될 수 있도록 작업 AHUD::Tick 02 12
  • 14. - ‘CreateWidget’ 함수는 매우 비싸기 때문에 사용에 주의해야 합니다. - 컨텐츠 상 너무 잦은 함수 호출을 하게 되는 경우, Pooling해서 사용 할 것을 권장합니다. - 시작(Loading) 시간에 Pool을 채운 후, 필요할 때 가져와서 재사용 - 모든 위젯을 Pooling하는 것을 권장하지는 않습니다. CreateWidget 03 14
  • 16. - 프로파일링 할 때 볼 수 있는 목록 - 위젯 최상위 계층부터 하위까지 재귀적으로 호출되며 각 위젯의 Paint 함수가 호출되는 것을 얘기합니다. DrawWindow 04 16
  • 17. - Paint 함수는 1. 내부적으로 블루프린트 위젯과 네이티브(C++) 틱 함수를 호출합니다. 2. Hit Test Grid 를 리빌드 합니다. 3. 렌더러 정보를 Slate Element Batcher에 추가합니다. Paint Function 04 17
  • 18. - Hit Test Grid는 1. UI와 상호작용을 하기 위해 Hit Test를 진행해야 하는 위젯들을 모아 놓은 컨테이너 2. 쿼드 트리로 구성되어 있습니다. 3. Hit Test를 진행할 위젯들을 다시 선별하여 트리를 재구성하는 것을 의미합니다. Hit Test 04 18
  • 19. - 위젯이 보이지만, 상호작용이 필요한 위젯이 아닌 경우에는 Visible Type을 HitTestInvisible 또는 SelfHitTestInvisible로 설정하는 것을 권장 합니다. - 위젯을 Hit Test Grid에 추가하지 않게 하기 위해서입니다. Hit Test 04 19
  • 20. - HitTestInvisible : Hit Test Grid에 자신의 모든 자손에 대한 검색을 중지합니다. - SelfHitTestInvisible : 자기 자신만 Hit Test Grid에 포함시키지 않습 니다. Hit Test 04 20
  • 21. - Paint 함수는 렌더러 정보를 Slate Element Batcher에 추가합니다. - FSlateElementBatcher - UI Slate를 렌더링하기 위해 정보를 저장/관리 하는 클래스 Slate Element Batcher 04 21
  • 22. - 이 행동들을 각 컨테이너에 재귀적으로 호출하게 됩니다. - 그렇기 때문에, 컨테이너 안에 컨테이너를 넣고, 그 안에 또 컨테이너를 넣 으면 재귀 함수 호출 수가 더욱 늘어나게 되어 vtable 룩업 속도도 저하되며, CPU 캐시 미스가 발생할 수 있습니다. - 이를 최적화 하기 위해 UI 위젯 평탄화 작업을 진행합니다. - UMG UI 디자이너의 위젯 트리는 위젯의 코드를 처리하는 Task Graph를 직 접적으로 나타내고, 이 트리가 작을 수록 호출하는 함수 수도 줄어든다는 것 을 의미합니다. Paint Function 04 22
  • 24. - 프로파일링 항목 - 엔진 프로그래머가 의문을 던지는 부분 -프로파일링 장치가 너무 적어서 처음엔 무엇을 하는 부분인지 알 수 없음. SlatePrepass 05 24
  • 25. 1. 각 위젯의 모든 캐시 지오메트리 엔트리를 리빌드 하는 역할을 합니 다. - 리빌드 하기 위해 위젯의 계층구조 바닥까지 내려갔다가 맨 위까지 다시 올라옵니다. (leaf-most 노 드) - 따라서 위젯들의 지오메트리는 계층구조의 위아래 모두에 영향을 준다는 것을 알 수 있습니다. - 예를 들면 테이블 셀의 크기를 결정하는 것은 그 안의 컨텐츠 뿐만이 아닙니다. - 열과 행의 크기도 셀의 크기를 제한하는 역할을 합니다. SlatePrepass 05 25
  • 26. 2. 이 함수는 각 프레임마다 위젯 트리 전체를 재계산한 캐시 지오메트 리 값을 가져옵니다. - 위젯을 숨길 때 Visible Type을 Hidden 보다는 Collapsed 을 사용하는 것을 권장합니다. SlatePrepass 05 26
  • 27. - Hidden을 사용하면 위젯이 안보이는 상태가 되더라도, 주변 위젯의 지오메트리에 영향을 주기 때문입 니다. - 숨겨진 위젯의 지오메트리를 계산하려면 그 위젯 자손들의 지오메트리도 계산해야 하기 때문인 데, 이는 자 손 위젯들이 화면 상에 렌더링 되지 않더라도 마찬가지 입니다. - Collapsed를 사용하면 SlatePrepass가 leaf-most 노드로 내려가는 중간 재귀 함수 호출을 중 단시켜 줄 수 있는 유일한 Visibilty Setting입니다. ※ Hidden이 필요한 경우도 있으나, 최대한 자제.. (UI 디자이너와 협의 필요) SlatePrepass 05 27
  • 28. 1. Invalidation Box 컨테이너 하위 트리의 레이아웃과 변동성 캐싱 2. 퍼포먼스가 개선될 수도 있지만, 애니메이션이나 레이아웃과 관련된 문제가 발생할 수도 있음. 1. 이와 같은 이슈를 해결하기 위해 Invalidation Box를 삭제하는 것으로 문제를 해결하는 것을 본 적이 있는데, 이것은 좋지 못한 것이라 생각합니다. 2. 상황에 맞는 적절한 해결 방법을 찾아서 문제를 해소하는 것이 좋습니다. 3. Tick 함수에서 Invalidation 함수를 호출하는 것을 봤는데, 이것은 최선이 아닐 거 라 생각합니다. 4. Invalidation Box는 프로젝트 작업 후반부에 하는 것이 좋습니다. Invalidation Box 05 28
  • 30. SMeshWidget 좀 더 극단적인 최적화를 위한 내용
  • 31. 1. 발표자는 SMeshWidget 클래스를 통해 구현하는 커스텀 위젯을 많이 사용함. 2. 현재 UMG에서는 구현된 부분이 없으며, 사용되지 않는 것으로 알고 있습니다. - 원하는 2D메시를 이용해 그에 대응하는 머티리얼로 직접 그리는 인터페이스를 제공합니다. - 이것을 이용하면 버텍스/인덱스 버퍼에 레퍼런스와 함께 전달되는 버퍼를 Slate Element Batcher 에 직접 생성할 수 있습니다. - 렌더 배치에서는 렌더링 가능한 인스턴스 수를 포함하는 버퍼를 사용하여 메시의 수많은 인스턴스 를 렌더링하고 해당 버퍼를 머티리얼 쉐이더에 전달할 수 있습니다. - 결과적으로 버퍼 하나로 수많은 메시 인스턴스를 렌더링할 수 있습니다. - 이를 이용한 첫번 째 예가 Particle Emitter입니다. SMeshWidget 06 31
  • 32. 3. 이를 구현하면 다른 위젯에 레이어링 할 파티클을 스폰할 수 있습니다. - UMG 위젯 트리에 순서대로 레이어링 된다는 것을 의미합니다. SMeshWidget 06 32
  • 34. 4. 파티클 위젯 이외에도 수많은 복잡한 위젯들을 만들 수 있으며, 그 중 지도가 좋은 예 입니다. - 맵에 그려지는 모든 아이콘은 하나의 머리티얼 인스턴스에 포함될 수 있지 만, 인스턴 스 버퍼에서는 각 아이콘에 엔트리마 다 다른 파라미터가 전송된다는 것을 알아야 합니 다. - 한마디로 이 맵은 한번의 페인트 함수 호출로 모든 아이콘을 그릴 수 있다는 것을 의미 합니다. SMeshWidget 06 34
  • 35. 4. 커스텀 위젯을 사용할 때 발생하는 문제점도 있습니다. - 게임을 위해 직접 제작한 커스텀 위젯을 구축한 것은 일반적인 솔루션을 만 드는게 아 니므로, 아티스트의 워크플로우에 영향을 미칩니다. - 아티스트가 시퀀스 툴을 사용할 수 없으므로, 파티클을 붙일 때 프로그래머 와 협업을 해 야 하므로, 반복 작업 시 병목현상을 일으킬 수 있습니다. - 그렇기 때문에 모든 것을 커스텀해서 사용하게 된다면, 오히려 낮은 생산성 을 초래할 수 있습니다. SMeshWidget 06 35
  • 36. - UI는 우리가 생각한 것보다 더 많은 퍼포먼스를 요구하기에, 커스텀보다는 일반적인 솔루션을 가져가는 것이 더 효율적일 수 있습니다. SMeshWidget 06 36
  • 37. [Unreal ListView] https://bornsoul.tistory.com/32 [Unreal Atlas Group] https://m.blog.naver.com/PostView.naver?blogId=jinwish&logNo=2215597 25843&targetKeyword=&targetRecommendationCode=1 추가 팁 06 37
  • 38. [Unreal Fest Online 2020 – AAA 게임 UI 최적화 및 빌드하기] https://www.youtube.com/watch?v=SYLeRHu6ras 참고 자료 06 38
  • 39. [프로그래머의 길, 멘토에게 묻다] - 당신이 프로그래밍한지 3개월이 되었든 5년이 되었든 간에, 소프트웨어 장인 정신의 관점에서는 여전히 초보자라는 사실을 이해해야 한다. - 흰 띠를 매라. : 내가 어떤 전문 지식을 익혔든지 간에 초심으로 돌아가라. 참고 자료 06 38