22.7 C
Seoul
Monday, September 20, 2021
Home Blog 1 어떻게 시작할까?

[유니티 최적화 잡담] 1 어떻게 시작할까?

출처: 픽사베이

안녕하세요 CodingDad입니다. 제가 처음 유니티를 사용하기 시작한 것이 2013년도니까 유니티로 밥을 먹고 사는지도 이제 9년이 되어갑니다. 프로그래머 경력의 절반에 가까운 시간을 유니티와 함께 보냈다니 미안하기도 하고 고맙기도 하고 그러네요. 그동안 미운정 고운정 다 들었죠. 유니티로 모바일 게임을 만들기 시작하면서 여러 가지 힘든 부분이 있었지만 최적화에 관한 정보를 찾기가 정말 힘들었습니다. 분명히 아는 사람은 많은 것 같은데 아무도 알려주지 않고 자기들끼리만 알고 있는 그런 느낌? 여기저기 찾아 헤매다 보면 조금씩 힌트는 나오는데 그 조각들을 맞춰서 전체 그림을 얻기가 쉽지 않더군요. 그때부터 이런 생각을 했던 것 같아요. 언젠가 내가 유니티를 잘 알게 되면 이런 정보들을 좀 정리해서 공유해야겠다. 그래서 많은 분이 삽질하는 시간을 줄였으면 좋겠다. 이런 생각이요.

유니티로 라이브 서비스하시고 최적화를 해보신 분들이라면 대부분 알고 있는 정보일 거예요. 저는 다만 그런 내용을 차근차근 알기 쉽게 풀어보는 것뿐입니다. 그래도, 기초가 제일 중요한 것 아시죠? 대단한 비급은 아닐지라도 기본만 잘 알고 실행해도 중간 이상 갈 수 있습니다!

사실 최적화라는 게 너무 많은 요소가 얽혀있어서 한 마디로 “이렇게 하면 빨라. 이렇게 하면 느려”라고 명확하게 말해주기가 어려워요. 유니티, 운영체제, 렌더링 API, 드라이버, GPU 각각의 제작사나 버전에 따라서도 동작이 다르고 게임 프로젝트의 성격에 따라서도 다를 수 있다 보니 어디에나 통하는 절대적인 가이드를 만들기는 어려운 부분이 있습니다. 그렇다 하더라도 최적화를 진행하는 방법론이라던가 배경지식, 도구 사용법같이 공통으로 적용할 수 있는 부분도 있어서 그런 요소들을 주제로 하나씩 잡담을 풀어볼 생각입니다.

우선은 최적화의 목표를 “기능을 유지하면서 성능을 높이는 것”으로 한정한다면 최적화의 과정은 이런 식이 될 거예요.

  • 성능을 의미하는 지표를 정의한다
  • 이 지표를 나쁘게 만드는 요소를 찾는다 = 병목
  • 이 요소를 개선해서 지표를 좋게 만든다

아주 간단하게 적어 본 것이지만 큰 틀에서 보자면 이 과정의 반복일 수밖에 없습니다. 그러므로 최적화를 위해서는 어떤 지표가 있는지와 그 지표들이 어떤 의미가 있는지. 그리고 그 지표를 어떻게 구할 수 있는지를 먼저 알아봐야겠죠? 잠깐만 생각해도 아래와 같은 지표가 떠오르네요.

  • FPS(Frames per Second) 와 Frame Time
  • CPU 사용량
  • GPU 사용량
  • 메모리 사용량
  • 메모리 대역폭 사용량
  • 게임 컨텐츠 파일 크기
  • 로딩 속도

이번에는 이 지표가 무엇을 의미하는 것이고 왜 중요한지 가볍게 짚어보고, 다음 포스트에서 하나하나 자세하게 살펴보면 좋을 것 같습니다.

FPS는 굳이 설명이 필요 없을 정도로 유명한 지표죠. 1 초에 화면을 몇 번 그리는지를 수치로 나타낸 값입니다. Frame Time은 역으로 화면을 한 번 그리는데 얼마나 많은 시간이 걸리는지를 나타냅니다. 결국은 같은 얘기인데 표현하는 방식이 다를 뿐이죠. FPS나 Frame Time을 통해서 성능을 평가할 수는 있지만 왜 성능이 좋은지 나쁜지는 알 수 없습니다.

CPU 사용량, GPU 사용량, 메모리 대역폭 사용량을 확인해보면 성능저하의 원인을 좁혀 나갈 수 있습니다. CPU나 GPU 사용량이 많으면 FPS가 떨어지는 것은 상식이지만, 메모리 대역폭 역시 중요하다는 부분은 놓치고 계신 분들이 있을 거예요. 매 프레임 메시나 텍스쳐같은 다양한 리소스가 메모리에서 GPU로 로딩되기 때문에 대역폭을 넘겨서 사용하게 되면 그만큼 GPU가 리소스를 기다리는 시간이 늘어나고 FPS가 떨어지게 됩니다.

전체 메모리 사용량은 앱이 죽느냐 마느냐를 결정하는 요소라서 정말 중요해요. 시스템 메모리가 부족해지면 OS가 앱을 내려버리게 됩니다. 그래서 전체 메모리 사용량을 줄이기 위해서 큰 노력이 필요합니다.

컨텐츠 파일의 크기는 게임의 다운로드 시간이나 기기의 저장공간에 영향을 줍니다. 두 가지 모두 사용자가 게임을 떠나는 원인이 될 수 있습니다.

로딩 속도는 최초의 게임 로딩이나 중간중간의 씬 전환의 속도도 해당되고, 인게임중에서 동적으로 애셋을 로딩할 때의 속도나 순간적인 멈춤 같은 것도 포함할 수 있을 것 같습니다. 로딩 속도와 전체 메모리 사용량은 트레이드 오프 관계인 경우가 많아서 게임에 따른 전략이 필요합니다.

생각나는 것만 적어봐도 적지 않네요. 오늘은 여기까지 하고 다음번에 하나하나 살펴볼게요. 혹시나 궁금하신 부분 있으시면 트위터나 블로그에 댓글로 남겨주세요. 다음 포스팅 주제를 정할 때 참고하겠습니다. 긴 글 읽어주셔서 고맙습니다.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay connected

58FansLike
56FollowersFollow
156FollowersFollow
128FollowersFollow
- Advertisment -

Recipe of the day