A guide to optimizing Unity UI – 번역
A guide to optimizing Unity UI
– 원문 링크 –
A guide to optimizing Unity UI
확인 완료한 버전: 5.3 – 난이도: 고급
유니티에서 제공되는 사용자 인터페이스(User Interface)를 최적화하는 작업은 예술에 가깝습니다. 엄격한 규칙은 사용하기가 쉽지 않습니다; 그대신, 각각의 상황마다 시스템의 동작을 염두해두고 세밀하게 분석해야합니다. 유니티 UI를 최적화할 때 가장 핵심적인 부분은, 드로우 콜(Draw Call)과 배칭 비용(Batching Cost) 사이에서 균형을 맞추는 일입니다. 일반적인 기술을 사용해서 둘(드로우 콜 또는 배칭 비용) 중 하나를 줄일 수 있겠지만, 복잡한 UI는 드로우 콜과 배칭 비용 사이에서 적절한 절충점을 찾는 것이 중요합니다.
하지만, 모범 사례는 어디에나 있는 것과 마찬가지로, 유니티 UI를 최적화할 때는 프로파일링부터 시작해야 합니다. 유니티 UI 시스템의 최적화를 시도하기 전에, 성능상 문제점의 정확한 원인을 찾는 것이 가장 중요합니다. 유니티 UI 사용자가 겪는 네가지의 공통적인 문제점들은 다음과 같습니다:
- 과도한 GPU 프래그먼트 쉐이더(Fragment Shader) 활용 (즉, fill-rate 초과).
- CPU에서 캔버스 배치(Canvas Batch)를 리빌딩(Rebuilding)하는데 시간이 너무 오래 걸림.
- 캔버스 배치를 리빌딩하는 횟수가 너무 많음.
- CPU에서 정점을 생성하는데 시간이 너무 오래 걸림(주로 Text에서 발생).
원칙적으로는, GPU로 전송되는 드로우 콜(Draw Call)의 수를 정해놓고, 이를 통해서 성능이 제한되는(더 많은 리소스가 사용되지 않도록) 유니티 UI를 생성하는 것이 가능합니다. 하지만, 실제로는 드로우 콜에 의해서 GPU에 과부하가 걸리는 프로젝트는 대부분 fill-rate의 초과로 인해서 문제가 발생하는 경우가 많습니다.
이 글에서는 유니티 UI의 기본이 되는 개념, 알고리즘, 코드는 물론 일반적인 문제와 그에 대한 해결책에 대해서 살펴볼 예정입니다. 총 5개의 챕터로 나눠서 살펴보겠습니다.
- 유니티 UI 기초(Fundamentals of Unity UI) 챕터에서는 유니티 UI에 관련된 용어를 정의하고 배치 처리된(Batched) 메쉬의 생성을 포함하여, UI를 렌더링하기 위해서 처리되는 많은 기본 프로세스에 대해서 세부적으로 살펴봅니다. 이 챕터부터 읽는 것을 권장합니다.
- 유니티 UI 프로파일링 도구(Unity UI profiling tools) 챕터에서는 개발자가 사용할 수 있도록 제공되는 다양한 도구를 활용해서 프로파일링 데이터를 수집하는 방법에 대해서 살펴봅니다.
- Fill-rate, Canvases 그리고 input(Fill-rate, Canvases and input) 챕터에서는 유니티 UI의 캔버스와 입력 컴포넌트의 성능을 향상시키는 방법에 대해서 살펴봅니다.
- UI 컨트롤(UI controls) 최적화하기 챕터에서는 유니티 UI 시스템에만 적용될 수 있는 몇 가지 기술과 함께, UI Text, Scroll View 그리고 기타 컴포넌트 별 최적화 방법에 대해서 살펴봅니다.
- 그 외의 기타 기술 및 팁(Other techniques and tips) 챕터에서는 유니티 UI 시스템에만 적용될 수 있는 몇 가지 기술, 일반적인 팁 그리고 UI 시스템 본질적인 문제를 우회하는 방법에 대해서 살펴봅니다.
UI Source Code
유니티 UI의 그래픽 및 레이아웃 컴포넌트는 모두 오픈소스 입니다. 이 소스코드는 UI 카테고리 아래에 위치한, 유니티의 Bitbucket 저장소에서 찾을 수 있습니다.
내용 끝까지 읽어주셔서 감사합니다.
배너 클릭은 저에게 많은 힘이 됩니다.
감사합니다 🙂