본문 바로가기
Unity

[Unity] 병목 프로파일링 (그래픽스 최적화 스타트업)

by 소리쿤 2022. 7. 17.

최적화를 하기 위해선 다양한 방법이 있겠지만, 

가장 기본이 되는 것은 병목을 탐지하는 것입니다.

 

이를 '프로파일링'이라고 합니다.

 


 

최적화 방향을 설정할 때 가장 먼저 해야할 것은 타겟 기기를 설정하는 것입니다.

사양이 좋은 하드웨어인지, 아닌지, pc인지 모바일인지 등을 말합니다.

 

원하는 것이 캐주얼 모바일 게임이라면, 정말 저렴한 기기에서도 돌아갈 수 있도록 하여야 할 것입니다.

 

83p 상단에 나와있는 예시는 정말 재밌게 읽었습니다.

 

디바이스가 발전되어도 게임이 더 높은 성능으로 돌아간다는 법은 없습니다.

CPU가 발전되어도 해상도가 같이 올라가거나 하면 픽셀 처리로 인해 GPU 병목이 생길 수 있기 때문입니다.  

 

추가로 모바일 기기라면 쓰로틀링으로 인해 성능 저하가 발생할 수 있기 때문에,

작업 시 더욱 깊게 고려하여야 합니다.


다음은 FPS 프로파일링에 대해서입니다.

 

FPS보단 SPF를 측정하기를 권장합니다. (초 당 프레임보단, 프레임 당 초를 권장한다는 말)

그 이유는 fps는 성능이 얼마나 좋아졌는 지 알기가 힘들기 때문입니다.

 

코드가 개선되어 20FPS > 90FPS가 되었다고 하면 70FPS만큼 성능은 좋아졌지만,

코드가 얼마나 영향을 끼쳤는 지 선형적으로 알기가 힘듭니다.

 

40FPS > 110FPS 또한 70FPS 차이가 나기 때문입니다.

하지만 코드가 미친 영향은 다릅니다.

 

하지만 SPF로 하면, 90ms > 20ms가 되었을 때 70ms 만큼 좋아졌고,

110ms > 40ms또한 70ms만큼 좋아졌다고 판단할 수 있습니다.

 


병목은 시나리오마다도 다릅니다.

 

오브젝트가 하나 있는 씬과 오브젝트가 여러 개 있는 씬은 서로 병목 위치가 다를 것입니다.

 

오브젝트가 여러 개 있는 경우는 역시 오브젝트 메시 버텍스가 많다고 추측할 수 있고

오브젝트가 하나 있는 경우엔 병목이 발생하면 오브젝트에 쓰이는 텍스처가 큰 것일 수도 있고,

설정 문제일 수도 있습니다.

 

 

다음과 같이 렌더링 패스를 '디퍼드'로 사용하거나 포스트 프로세싱을 사용하는 경우일 수도 있고요.

 

https://m.blog.naver.com/blue9954/220296252565

 

포워드 랜더링, 디퍼드 랜더링.

포워드 랜더링. 전통적인 랜더링 방식인 포워드 랜더링 방식은 3D 역사의 산증인이다. 많은 수많은 명작들...

blog.naver.com

포워드 vs 디퍼드


유니티 내 target frame rate를 설정하게 되면, 해당 rate를 달성하고 남는 시간 동안 프로세서가 잠시 쉽니다.

 

이는 프로파일러에 WaitForTargetFPS의 형태로 남기 때문에, 측정에 도움이 됩니다.


 모니터와의 수직 동기화의 영향일 수도 있습니다.

 

VSync를 켜면, 티어링 현상을 막기 위해 렌더링 퍼포먼스가 조절됩니다.

 

병목 측정할 때는 이를 꺼두어야 합니다.


Edit > Project Settings > Quality 의 퀄리티 세팅에서는

 

텍스처 해상도, 안티앨리어싱, 소프트 파티클, 그림자 등의 퀄리티에 영향을 미칠 수 있다.

안티앨리어싱 : https://post.naver.com/viewer/postView.nhn?volumeNo=21010728&memberNo=42689664 

 

게임 그래픽 옵션 "안티앨리어싱"이란 무엇일까?

[BY 뀨히나] ※모바일 사진 확대 팁 : 1.사진을 터치한다 - 2. 생겨나는 확대 버튼을 눌러 새 창에서 확...

m.post.naver.com


CPU와 GPU는 병렬 처리 방식입니다.

CPU는 GPU가 필요한 시점에 일을 던지고, 계속 다른 일을 수행합니다.

하지만 프레임이 끝나고, GPU가 일이 끝나지 않으면 CPU는 GPU를 기다립니다.

 

이런 식으로 동작하기 때문에, 병목이 CPU 바운드인지, GPU 바운드인지 반드시 체크가 필요합니다.