프로파일링이란?
범행 수법을 추론한 뒤, 이를 바탕으로 범인을 찾아내는 수사 기법이다.
방금 발생해서 드러난 문제는 마치 현행범과 같아서 금방 잡아낼 수 있지만, 오래전에 숨어있던 문제는 증거나 기록이 잘 남아 있지가 않아 잡기가 힘들다.
최적화를 위한 프로파일링 기법도 여러가지 작은 증거들을 모으고 분석하여 문제의 정확한 원인을 찾아내고 최적화를 하는 기법이라고 할 수 있다.
프로파일링 시기와 방법
개발 초기부터 일찍, 그리고 자주하는 것을 권장한다.
아마 다들 공감하겠지만, 최적화 작업을 뒤로 미루어 두었다가 출시 전에 한 번에 하는 것은 좋은 방법은 아니다.
그래서, 증거가 사라지거나 다른 문제들로 인해 가려지기 전에 프로젝트 초기 버전부터 꾸준히 프로파일링을 해서 개발 중인 게임에서 어떤 기능에, 어느 정도의 부하가 걸리고 있는지 검사하고 기록하여야 한다.
하지만, 개발에 집중하다 보면 컨텐츠 개발에 바빠서 최적화를 소홀하게 하는 경우를 자주 보게 될 텐데, 프로그래머나 TA 한두 명이 전체를 책임지기에는 범위가 너무 넓기 때문에, 팀원들이 각자 자기가 만드는 컨텐츠에 대해서는 스스로 검증하려는 자세가 필요하다.
프로파일링의 최종 목표
프로파일링 작업은 결국 주어진 하드웨어의 자원을 최대한 효율적으로 사용하는 것(최적화)이 목표다.
하드웨어가 어떻게 구성되는 지 이해하면 좀 더 쉽게 원인을 찾아서 문제의 범위를 좁혀나가고, 성능 하락의 원인을 찾을 수 있다.
최적화를 위해 살펴봐야할 요소들
게임이 느려지는 데에는 굉장히 다양한 요소들이 있다.
먼저, 컴퓨터를 구성하는 요소에서 어느 부분에 병목이 걸렸는지 확인해야 한다.
그 부분에서 구체적으로 어떤 기능이 부하가 걸리고 있는지, 용의자를 하나씩 줄여나가는 방식으로 문제의 근본 원인을 찾아나가야 한다.
- CPU = AI, 물리, 블루프린트 Tick, 드로우 콜
- GPU = 그림자, 오버드로우, UI, 반투명, 라이팅 등등
- I/O = 영상 재생, 레벨 로딩, 텍스처 로딩
- 네트워크 = 대역폭, 전송 지연
- 메모리 = GC, Out of Memory
- 발열로 인한 가속(Throttling)
- 등등등
정확한 프로파일링 결과를 도출해내는 법
정확한 프로파일 결과를 얻기 위해서는 성능에 영향을 주는 변수들을 통제할 필요가 있다.
- PIE(Play In Editer)가 아닌 독립형 게임으로 실행.
- V-Sync OFF
- 'Smooth Framerate', 'Physics Sub Stepping', 'GC Verify'와 'AI Logging'을 OFF
- Test 빌드나 Shipping 빌드로 실제 기기에서 프로파일링
릴리즈 배포환경과 최대한 유사하게 실행해야 정확한 프로파일링 결과를 얻을 수 있다.
또한, 쉽게 시도해볼 수 있는 간단한 방법부터 활용하여 큰 부분부터 시작하여 작은 부분까지, 구체적으로 어떤 기능이 부하가 걸리고 있는지, 용의자를 하나씩 줄여나가는 방식으로 문제의 근본 원인을 찾아나가야 한다.
프로파일링을 통한 성능 지표의 활용
프로파일링을 하다 보면, 다양한 성능 지표들을 얻을 수 있는데, 이를 잘 활용하여 프로젝트 초기에 게임의 레퍼런스 하드웨어를 결정하고, 목표 Frame Rate를 설정할 수 있다.
[ 목표 Frame Rate 설정 : 30Hz(33.3ms) or 60Hz(16.6ms) ]
만약 30프레임으로 동작하는 게임을 개발해야 하는 경우, 한 프레임을 처리하기 위해서는 33.3 ms의 프레임 타임이 필요하고, 이 33.3 ms를 각 기능 별로 나누어 성능 예산을 배정할 수 있다.
[ 목표 Frame Rate에 따른 CPU 예산 편성 (ms 단위 사용) ]
- AI (5ms) + Animation (3ms) + Character (3ms) + Physics (5ms) + UI (5ms) + Particles (5ms) = 26ms
[ GPU 예산 편성 ]
GPU 예산의 경우 보통 아트 팀의 제작 가이드라인으로 관리가 필요하다.
- 캐릭터 당 폴리곤 수
- 동시에 영향 받는 동적 라이트 개수의 제한
- 머티리얼 인스트럭션 수
- 포스트프로세스 (DoF, Anti Aliasing, V-Sync 등등)
등등, 다양한 가이드라인으로 관리가 필요하다.
[ 프로파일링의 결과가 게임 내의 기획 방향이나 비즈니스 모델을 결정하는 데에 중요한 지표가 된다. ]
프로토타입 단계에서 데디케이티드 서버에 서버당 수용가능한 동시 접속자 수를 프로파일링 했는데, 예상되는 매출액보다 서버 운영비용이 클 것이라고 예상되는 경우도 있다.
그런 경우에는 어쩔 수 없이 BM을 바꾸거나 서버 부하를 좀 더 최소화하기 위해서 기획의 방향을 크게 변경하는 경우도 있음.
프로파일링을 통한 성능 지표의 관리
프로파일링을 통해서 얻은 성능 지표는 그때그때 기록을 잘해두는 것이 좋음.
언리얼엔진의 경우 프로파일링 결과에 영향을 주는 요소들을 최소화하기 위해서 Stat 커맨드보다는, 언리얼 인사이트나 언리얼 프론트엔드같은 프로파일링 도구가 조금 더 정확한 값을 기록하는 게 가능하다.
프로파일링 과정에서 만약 반복되어서 발생하는 문제나 성능에 미치는 영향이 큰 기능이 있으면, 그런 부분들은 테스트 케이스를 만들어서 관리하고, 지속적으로 품질 지표를 모니터링하는 것이 좋다.
- GPU의 부하를 주는 장면이 있는 지 확인하기 위해서 맵을 빠른 속도로 이동했을 때 동선 상에서 목표하는 성능 이하로 떨어지는지 지속적으로 테스트를 반복 가능.
- 새로 추가된 캐릭터나 이펙트가 있을 때마다 로딩 시간을 측정해서 목표 로딩 시간을 초과하는 에셋이 있는 지 확인 가능.
'여러 분석 > [ 단어 정의 ]' 카테고리의 다른 글
텍스처 관련 : 텍스처 필터링 (4) | 2023.10.23 |
---|---|
비등방성 필터링(AF) (2) | 2023.10.23 |
'에일리어싱'과 '안티에일리어싱' (0) | 2023.10.23 |
텍스처 관련 : Mip(밉), 밉맵(Mipmap)에 대하여 (0) | 2023.10.23 |
나이퀴스트 이론 : Nyquist Frequency (0) | 2023.10.23 |