Profiling - 모바일 게임 성능 최적화 팁 (1)
Unity 공식 document인 "Optimize your mobile game performance" 를 정리한 내용입니다.
1. Unity Profiler가 무엇인가?
Application의 성능 데이터(CPU, Memory, Renderer, ...)를 알려주는 툴
Unity Profiler를 통해서 개발 중인 Application의 성능 개선이 필요한 영역을 확인하고 개선 포인트를 모색할 수 있다.
Window > Analysis > Profiler에서 Unity Profiler를 확인할 수 있다.
2. 성능 최적화에서의 Profiling
런타임 시 성능 저하 또는 중단의 원인을 감지하고
특정 프레임(또는 시점)에 발생하는 상황을 이해하는 데 도움이 될 수 있음
Project에서 최적화를 수행하기 전에 최적화 전/후 비교를 위해서 먼저 Profiler.data 파일을 저장할 필요가 있다.
그렇다면 Profiling 진행은 어떤 방식으로 진행하는 것일까?
문서에는 다음과 같이 기재 되어있다.
- 개발 초기부터 자주 Profiling을 실행
- 올바른 영역을 최적화
- Target Platform에서 Profiling을 실행
- Profile Analyzer 사용
- Frame당 정해진 시간 예산으로 작업
- GPU Bound or CPU Bound 여부 판단
- Device 온도 고려
- 지원하는 최저사양의 Device에서 테스트
개발 초기부터 자주 Profiling을 실행
출시가 얼마 남지 않은 시점에 Profiling하는 것 보다 개발 초기부터 여러 오류나 성능 문제를 발생 즉시 조사해야 한다.
올바른 영역을 최적화
최적화를 진행할 영역을 잘 선정해야 하는데, 실제 bottle neck 지점을 파악하고 실질적으로 최적화가 필요한 부분에 집중해야 한다.
( 엉뚱한 영역을 수정해서 오히려 게임 성능을 저하시킬 수 있다.)
Target Platform에서 Profiling을 실행
Unity Editor에서 Profiling을 진행하면 여러 시스템의 상대적인 성능 정보를 얻을 수 있지만,
가능하면 실제 Target Platform에서 Profiling을 진행하자.
Android : Android Studio & Android Profiler iOS : Xcode & Instruments |
Profile Analyzer 사용
About the Profile Analyzer package | Profile Analyzer | 1.0.3 (unity3d.com)
Frame당 정해진 시간 예산으로 작업
각 Frame은 Application이 목표로 하는 초당 프레임 수 (fps)를 기반으로 시간 예산을 가진다.
예를 들어, 60fps의 목표를 가지는 경우 목표 시간 예상은 프레임당 16.66ms(1000ms/60fps)이다.
모바일 기기에서는 기기의 과열로 인해 OS에서 쓰로틀링할 수 있으므로 이 시간을 지속적으로 사용하지 않는 것이 좋다.
즉, 컷씬이나 로딩 시퀀스 같은 짧은 시간 동안에는 예산을 초과해도 무방하지만 긴 시간 동안 초과하는 것은 바람직하지 않다.
GPU Bound or CPU Bound 여부 판단
Profiler를 통해 CPU 혹은 GPU에 문제가 있는지 파악할 수 있다.
CPU Bound
프로그램이 CPU의 성능에 의해 제약을 받는 경우
예를 들어,
복잡한 수학 계산 or 논리 연산이 많이 필요한 경우
많은 데이터 처리를 필요로 하는 경우
멀티 스레드 프로그램에서 스레드 관리와 같은 작업이 CPU에 부담을 주는 경우
CPU Bound가 발생할 수 있다.
GPU Bound
프로그램이 GPU의 성능에 의해 제약을 받는 경우
예를 들어,
그래픽 렌더링 작업이 많은 경우
병렬 연산이 많은 경우 (딥러닝 등)
GPU Bound가 발생할 수 있다.
Device 온도 고려
Profiling 타임을 짧은 간격으로 진행하자.
물리적인 열기가 성능에 직접적인 영향(쓰로틀링 등)을 미칠 수 있기 때문에 Profiling 과열을 방지해야 한다.
지원하는 최저사양의 Device에서 테스트
Application이 지원하려는 기기 중 최저 사양의 기기에서 테스트한다.
cpdm
choppadontbiteme.tistory.com
'Dev > Unity' 카테고리의 다른 글
[Unity] Programming & Code Architecture - 모바일 게임 성능 최적화 팁 (3) (0) | 2024.07.19 |
---|---|
[Unity] Memory - 모바일 게임 성능 최적화 팁 (2) (1) | 2024.07.19 |
[Unity] apk 설치 에러 INSTALL_FAILED_NO_MATCHING_ABIS (0) | 2024.02.09 |
[Unity] 게임 화면 세로 방향으로 지정하기 Portrait display (0) | 2024.02.03 |
[Unity] CommandInvokationFailure: Gradle build failed (0) | 2022.11.01 |