Version: 2020.2
언어: 한국어
최적화
그래픽스 방법론

모바일용 최적화 실전 가이드

이 가이드는 모바일 게임 개발에 입문하는 개발자를 위한 가이드입니다. 어떻게 개발해야 할지 막막한 개발자, 새로운 모바일 게임을 기획하거나 프로토타입을 만들려는 개발자, 또는 기존 프로젝트가 모바일 디바이스에서 원활하게 실행되도록 이식하려는 개발자에게 도움이 될 것입니다. 또한 가이드는 모바일 게임이나 구형 PC 또는 넷북을 타겟으로 하는 브라우저 게임을 개발하려는 개발자에게도 유용한 레퍼런스가 될 것입니다.

최적화는 방대한 주제이며, 최적화 방법은 게임에 따라 달라집니다. 그러므로 이 가이드는 원활한 제품을 보장하는 단계별 가이드라기보다 입문서 또는 레퍼런스로 활용하는 것이 가장 좋습니다.

모든 모바일 디바이스는 서로 다릅니다

이 정보는 오리지널 iPad, iPhone 3GS, iPod Touch 3세대에 사용된 Apple A4 칩셋, Android의 경우는 Nexus One이나 기타 Android 2.3 Gingerbread를 탑재한 수준의 하드웨어를 염두해 두고 작성되었습니다. 디바이스는 대부분 2010년 초 부근에 출시되었습니다. 경쟁이 활발히 벌어지는 앱 마켓에서, 해당 디바이스는 상대적으로 느린 구형 디바이스에 속합니다. 그러나 시장에서 큰 몫을 차지하므로, 해당 디바이스도 지원이 되어야 합니다.

Apple 최저사양 모바일 디바이스(iPhone 3G 등) 및 iPod Touch 1, 2세대는 제약이 아주 크며 최적화에 더 많이 신경 써야 합니다. 그러나 자신의 디바이스를 업그레이드하지 않고 사용해 온 소비자들이 앱을 구매할 것인지가 의문으로 남습니다. 따라서 무료 앱을 개발하는 것이 아니라면 구형 하드웨어를 지원하는 것이 그다지 가치가 있지 않을 수도 있습니다.

이외에도 훨씬 느리거나 훨씬 빠른 스마트폰 역시 존재합니다. 모바일 디바이스의 연산 기능은 놀라운 속도로 향상되고 있습니다. 새로운 세대의 모바일 GPU가 이전 세대에 비해 5배 더 빠르다는 소식도 전혀 처음 듣는 얘기가 아닐 것입니다. 이는 PC 산업과 비교하면 엄청나게 빠른 발전입니다.

최종 단계가 아닌 기획 단계에서 최적화를 고려해야 합니다.

영국 컴퓨터 과학자 마이클 A. 잭슨(Michael A. Jackson)의 프로그램 최적화 법칙이 자주 인용됩니다.

“프로그램 최적화 제 1법칙: 하지 말아야 합니다. 프로그램 최적화 제 2법칙(전문가에게만 해당!): 아직은 하지 말아야 합니다.”

그의 주장은 컴퓨터의 속도와 속도가 증가하는 추세를 고려할 때 실제 어떤 프로그램을 실행하는 상황에서는 그것이 충분히 빠르게 실행될 가능성이 높다는 것에 근거를 두고 있습니다. 이외에도 지나치게 최적화를 하게 되면 프로그램이 너무 복잡해질 수 있고, 자체적으로 제한되어 버그를 만들어낼 수도 있습니다.

그러나 모바일 게임을 개발한다면 고려해야 할 다른 측면이 있습니다. 현재 시장에 출시된 하드웨어는 보통 사용하는 컴퓨터와 비교할 때 매우 제약이 큽니다. 따라서 이러한 디바이스에서 아예 실행되지도 않을 무엇인가를 만들게 될 위험을 떠안는 것보다는 처음부터 최적화를 실행하여 지나치게 복잡해질 위험을 감수하는 편이 훨씬 낫습니다.

이 가이드에서는 최적화가 크게 도움이 되는 상황과 최적화가 필요하지 않는 상황을 비교하도록 하겠습니다.

최적화는 프로그래머만을 위한 것이 아닙니다.

아티스트 또한 플랫폼의 제한과 이를 우회하기 위한 방법을 숙지하여, 같은 일을 되풀이하는 일 없이 창의적으로 좋은 결과를 이끌어낼 수 있도록 해야 합니다.

  • 게임 디자인에서 환경이나 조명을 베이크하는 대신 텍스처에 그리도록 요구하는 경우, 아티스트에게 더 큰 책임이 주어집니다.
  • 베이크할 수 있는 요소가 있다면 아티스트는 실시간 렌더링 대신 베이크용 콘텐츠를 만들 수 있습니다. 이를 통해 기술적 제한을 무시하고 자유롭게 개발할 수 있습니다.

부드러운 런타임을 위한 게임 설계

다음 두 페이지에서는 게임 퍼포먼스의 일반적인 트렌드를 자세하게 설명합니다. 또한 게임이 최적화되도록 설계하는 최상의 방법 또는 이미 제작에 돌입한 게임에서 어떤 것을 최적화해야 하는지 직감적으로 알아낼 수 있는 방법에 대해 설명합니다.

초기에 프로파일링을 자주해야 하는 이유

프로파일링은 과정을 통해 어떤 최적화가 큰 성능 향상을 이끌어냈고, 어떤 최적화가 시간낭비였는지를 파악할 수 있기 때문에 매우 중요합니다. 렌더링은 별도의 칩(GPU)에서 처리되는 방식이기 때문에, 한 프레임을 렌더링하는 데에 걸리는 시간은 CPU에서 걸리는 시간에 GPU에서 걸리는 시간을 더한 값이 아니라, CPU 또는 GPU에서 걸리는 시간 중 더 오래 걸리는 시간에 해당합니다.

즉 CPU로 인한 속도 저하는 셰이더를 최적화해도 프레임 속도는 전혀 오르지 않으며, GPU로 인한 속도 저하는 물리와 스크립트를 최적화해도 아무 도움이 되지 않습니다.

게임의 각 부분에 따라 또는 상황에 따라 퍼포먼스 역시 종종 달라질 수 있습니다. 어떤 부분에서는 순전히 스크립트로 인해 100ms 프레임이 느려질 수도 있고, 또 다른 부분에서는 렌더링으로 인해 프레임이 느려지는 현상이 나타날 수도 있습니다. 그러므로 게임을 최적화하려면 적어도 어디에서 병목 현상이 나타나는지를 파악할 필요가 있습니다.

Unity 프로파일러(Profiler)

Unity의 주 프로파일러는 iOS, Android, Tizen을 타겟으로 할 때 사용할 수 있습니다. 기본적인 사용 방법은 프로파일러 문서를 참조하십시오.

내부 프로파일러

Android와 iOS에는 빌트인 프로파일러가 있으며, 매 30프레임마다 텍스트를 출력합니다. 이를 통해 게임에서 어떤 측면(물리, 스크립트, 렌더링 등)이 속도 저하를 일으키는지 알아낼 수 있으나, 아주 세부적인 사항까지 알 수는 없습니다. 예를 들어, 어느 스크립트 또는 어떤 렌더러가 문제를 일으켰는지는 알 수 없습니다.

  • 프로파일러에서 대부분의 프로세싱 시간이 렌더링에 쓰인다고 표시된다면 렌더링 최적화 문서를 참조하십시오.
  • 프로파일러에서 대부분의 프로세싱 시간이 렌더링 이외에 쓰인다고 표시된다면 스크립트 최적화 문서를 참조하십시오.

내부 프로파일러 문서를 통해 작동 방법과 켜는 방법을 참조하십시오.

목차

최적화
그래픽스 방법론