Unity Profiler
프로파일링을 도와주는 Unity 내의 Tool로, Window > Analysis > Profiler 에 있다. 이와 관련된 정식 문헌은 아래 링크를 참조하기를 바란다.
https://docs.unity3d.com/kr/2018.4/Manual/ProfilerWindow.html
프로파일러 창 - Unity 매뉴얼
Unity 에디터에서 툴바를 통해 프로파일러 창에 액세스합니다. Window > Analysis > Profiler.
docs.unity3d.com
Profiler 창에서 성능 분석을 할 때, Hierachy와 Timeline 속성을 선택할 수 있다. Hierachy는 어떤 기능을 실행할 때, CPU/GPU를 어느 정도 차지하는지를 퍼센트로 보여주고 Timeline은 Thread별로 시각화하여 보여준다. 이 둘을 모두 활용한다면 무엇이 CPU를 많이 잡아먹는지 체크하기 편하다.
위처럼 Unity에서 지정한 것들 외에도 개발자가 직접 Tag를 달 수도 있다. 개발자가 직접 Tag를 달아 프로파일링을 한다면 프로젝트 내의 어떤 특정 구간을 집어서 프로파일링을 진행할 수 있다. 사용 방법은 아래와 같다.
void SomeFunction() {
Profiler.BeginSample ("MyPieceOfCode");
// Do Stuff here
Profiler.EndSample();
}
Auto Sync Transforms
위치: Edit > Project Settings > Physics 2D > Auto Sync Transforms
Unity 내에는 게임 엔진의 세상이 있고 물리 엔진의 세상이 있다. 유저가 어떤 Object의 Transform을 변경한다고 가정해보자. 이는 게임 엔진에서의 transform을 변경하는 것을 의미한다. 이렇게 바뀌게 된 Transform은 물리 엔진에도 반영되어야 한다. 만약 'Auto Sync Transforms'을 true로 설정하였다면, 게임 엔진 상의 Transform이 바뀔 때마다 자동적으로 물리 엔진에서의 Transform도 바꾼다. 만약 false로 설정되었다면, 프레임이 바뀔 때마다 Transform Sync를 맞추어주게 된다. 이는 꺼주는 것이 좋다.
CPU boundary VS GPU boundary
성능을 측정할 때는 CPU boundary( = CPU 병목)인지 GPU boundary( = GPU 병목)인지 아는 것이 중요하다.
한 프레임이 시작되면 CPU가 일을 시작한다. 그러다가 그릴게 생기면 GPU에게 명령을 던진다. 그리고 CPU는 GPU가 작업을 끝낼 때까지 기다리는 것이 아니라 CPU는 CPU대로 GPU는 GPU대로 일을 진행한다. 즉, CPU와 GPU는 병렬적으로 일을 처리한다. 또한, CPU와 GPU가 해당 프레임에 해야할 일을 모두 끝냈을 시, 프레임이 종료된다. 따라서 CPU가 자신의 일을 끝내고 GPU의 작업을 기다리게 된다면 GPU의 병목이 크다는 이야기이므로 이를 제거해야 한다. (만약 이런 현상이 발생할 시, Unity Profiler는 Graphics.Blit / Device.Present를 띄운다.) 이런 GPU 병목이 발생하지 않도록 CPU와 GPU상의 밸런스를 맞추는 것이 중요하다.
FPS vs Frame Time
성능을 측정할 때, FPS와 Frame Time이라는 용어를 많이 사용한다. FPS는 'Frame Per Seconds'의 준말로 1초당 몇 프레임을 도느냐이고 Frame Time은 한 프레임 당 몇 초가 걸리냐는 말이다.
ms = 1000 / FPS
FPS = 1000 / ms
Profile Analyzer
Profile Analyzer는 Package Manager에서 Import받아 사용할 수 있으며, Import를 했다면 Window > Analysis > Profile Analyzer 위치에서 찾을 수 있다. 이를 사용하면 프로파일러의 결과물들을 snapshot을 떠서 여러 상황을 비교해볼 수 있다. 어떤 부분을 수정하였다면 수정하기 전 상황을 프로파일링 해놓고 수정한 후 상황을 프로파일링을 한 후, 이를 사용한다면 내가 어떤 상황에서 이런 부분을 수정했더니 이런 차이를 보여주는구나 하는 것을 한 눈에 볼 수 있다. 자세한 사항은 아래 링크를 참조하길 바란다.
https://unity.com/kr/how-to/optimize-your-game-profile-analyzer
Profile Analyzer로 게임 최적화하기 | Unity
Unity Profile Analyzer로 게임 성능 향상에 초점을 맞추어야 하는 부분이 어디인지 알아보세요.
unity.com
Xcode Instruments: best for iOS
만약 대상 플랫폼이 iOS라면 Unity Profiler 보다 Xcode를 사용하여 프로파일링하는 것이 더 좋다. 이를 사용하면 Unity Profiler가 보여주지 않았던 세부적인 사항까지 보여준다.
https://www.youtube.com/watch?v=WncETrdMG0Q
'Unity' 카테고리의 다른 글
[Unity] Unity 최적화 공부(4) (0) | 2021.05.16 |
---|---|
[Unity] Unity 최적화 공부(3) (0) | 2021.05.13 |
[Unity] Unity 최적화 공부(1) (0) | 2021.05.12 |
[Unity] Resources 파일 내에 있는 Sprite Load하기 (0) | 2021.04.17 |
[Unity] RequireComponent (0) | 2021.04.10 |