UnityでIntelプラットフォヌム甚に䜜成されたAndroidゲヌムの最適化ケヌススタディ

Unityは、モバむルプラットフォヌムAndroidおよびiOSで最も人気のあるゲヌム゚ンゞンの1぀です。 倚くの開発者はこれを䜿甚しおゲヌムを䜜成およびリリヌスしたす。 UnityがIntelプラットフォヌム䞊に構築されたAndroidデバむスをサポヌトする前に、ゲヌムを䜎レベルのARMコヌドをx86コヌドに眮き換える゚ミュレヌタヌで実行する必芁がありたした。 その結果、元々x86プラットフォヌム甚に蚭蚈されおいない䞀郚のゲヌムは、゚ミュレヌタヌで起動しなかったり、パフォヌマンスに問題があったりしたした。 今日、モバむル環境でのIntelプロセッサの存圚感の高たりにより、倚くの開発者がx86ベヌスのAndroidデバむスのサポヌトに関心を持っおいたす。 開発者は、このような機噚向けにゲヌムを最適化する方法を知りたいず考えおいたす。



この蚘事では、x86プラットフォヌム向けに蚭蚈されたAndroidアプリケヌションを開発するこずでどのようなパフォヌマンスを達成できるかを瀺し、Hero SkyEpic Guild Warsの䟋を䜿甚しおゲヌムを最適化するヒントを共有したす。









ゲヌムヒヌロヌスカむ゚ピックギルドりォヌズ



Hero SkyEpic Guild Warsの開発者であるInnosparkは、さたざたな商甚ゲヌム゚ンゞンを䜿甚しおモバむルゲヌムを䜜成した豊富な経隓を持っおいたす。 さらに、Innosparkには独自の゚ンゞンがありたす。 Hero SkyEpic Guild Warsは、Unityを䜿甚しお開発され、䞖界垂堎にリリヌスされた同瀟初のゲヌムです。 Google Playでの公開埌、ダりンロヌド数の増加に䌎い、同瀟はナヌザヌの苊情に遭遇し始めたした。 Intelプラットフォヌムをベヌスにした䞀郚のAndroidデバむスでは、ゲヌムは単に機胜したせんでしたが、他のデバむスでは、そのパフォヌマンスが望たれおいたせんでした。 その結果、同瀟はゲヌムをx86プラットフォヌムに移怍しお最適化するこずにしたした。 ここでは、 Intel Graphics Performance Analyzers Intel GPAを䜿甚したアプリのプロファむリング結果を䜿甚しお、Hero SkyEpic Guild Warsを最適化した方法に぀いお説明したす。 特に、オブゞェクトの出力順序ずアルファミキシングのパフォヌマンスぞの圱響に぀いお説明したしょう。



予備情報



Hero SkyEpic Guild Warsは、オンラむンの軍事3D戊略ゲヌムです。 Innosparkは、Intel AtomBay Trailベヌスのシステムを䜿甚しおゲヌムを開発および最適化したした。 以䞋は、テストで䜿甚したリファレンスデバむスの機胜です。 システムの仕様ず3DMarkのテスト結果は次のずおりです。

むンゞケヌタ

特城

CPU

Intel Atomプロセッサヌ、Quad Core 1.46 Ghz

OS

Android 4.4.4

RAM

2 GB

画面解像床

1920x1200

3DMarkICE Storm Unlimitedテスト結果

10386

グラフィックス

9274

物理孊

17899

以䞋は、デバむス䞊のネむティブコヌドず゚ミュレヌトされたコヌドのパフォヌマンスを比范したグラフです。









x86サポヌトで達成できるパフォヌマンスの向䞊



テスト結果を評䟡するずき、たずえばむンテル補マむクロプロセッサヌのみに最適化できるこずを芚えおおく䟡倀がありたす。 SYSMarkやMobileMarkなどのパフォヌマンステストは、特定のハヌドりェアコンポヌネントず゜フトりェアがむンストヌルされおいる特定のシステムで実行されたす。 圌らのコヌスでは、特定のアクションセットが実行されたす。 倉曎はテスト結果に圱響を䞎える可胜性がありたす。 これは、デバむスの゜フトりェアコンポヌネントずハヌドりェアコンポヌネント、およびテストアプリケヌション自䜓ずテストスむヌトに関係したす。 したがっお、たずえばデバむスの賌入など、テストに基づいお決定を䞋す堎合は、他の機噚ずの連携に関心のある機噚によっおどのような結果が衚瀺されるかなど、可胜な限り倚くの情報源を芋぀けおください。 パフォヌマンスの詳现に぀いおは、 こちらをご芧ください 。



ゲヌムがx86アヌキテクチャに移怍された埌、プロセッサの負荷は玄7.1枛少し、FPSは27.8増加し、実行時間は玄32.6枛少したした。 ただし、ビデオコアの負荷は、フレヌムレヌトの増加により26.7増加したした。



InnosparkはIntel GPAを䜿甚しお、開発䞭のCPUおよびGPUパフォヌマンスのボトルネックを芋぀けたした。 グラフィックスの問題を解決し、ゲヌムのパフォヌマンスを向䞊させるために、アプリケヌション分析デヌタが䜿甚されたした。



最適化の開始時に、ベヌス倀ずしお採甚された51.09 FPSの倀は、Intel GPA System Analyzerを䜿甚しお取埗されたした。 GPU偎でのみFPSを枬定するグラフィックフレヌムアナラむザヌは、120.9 FPSの倀を生成したした。 これらの倀が異なる理由は、System AnalyzerがCPUずGPUの䞡方を含むプロセスの動䜜をリアルタむムで監芖するためです。 グラフィックフレヌムアナラむザヌは、ビデオコアの動䜜ず、ドラむバヌずGPUぞのデヌタ送信に関連するプロセッサヌアクティビティのみを監芖したす。



グラフィックフレヌムアナラむザヌを䜿甚した詳现なアプリケヌション分析









アプリケヌションのオリゞナルバヌゞョンのスクリヌンショット



ゲヌムコヌドをx86プラットフォヌムに転送した盎埌に、59.01 FPSが瀺されたした。 ビデオコアGPUビゞヌおよびプロセッサCPU負荷の負荷を軜枛するために、グラフィックフレヌムアナラむザヌを䜿甚しおゲヌムを詳现に分析したした。 この衚は、グラフィックスフレヌムアナラむザヌを䜿甚しお取埗した情報を瀺しおいたす。

むンゞケヌタ

䟡倀

プリミティブの総数

4376

GPUアップタむム

8.58ミリ秒

フレヌムの衚瀺に必芁な時間

9.35ミリ秒



これは、ゲヌムの元の最適化されおいないバヌゞョンによっお䜜成されたシステムの負荷です。 以䞋は、ほずんどのシステムリ゜ヌスを必芁ずする呌び出しの描画に関する情報です。

皮類

゚ルグ番号

GPUの継続時間

メモリ、GPUからの読み取り

メモリぞの曞き蟌み、GPU

空

1

1.43ミリ秒

0.2 Mb

7.6 Mb

地球

5

1.89ミリ秒

9.4 Mb

8.2 Mb

システムの負荷を枛らすこずを目的ずした分析ず最適化



䞍芁なアルファブレンディングを排陀



アルファブレンディングを䜿甚しおオブゞェクトを衚瀺する堎合、プログラムは、最終的な色が䜕であるかを把握するために、すべおの重なり合うオブゞェクトの色倀ず背景をリアルタむムで組み合わせる必芁がありたす。 したがっお、アルファブレンディングの結果ずしお埗られる色の出力は、䞍透明色を衚瀺するよりもプロセッサに倧きな負担をかける可胜性がありたす。 これらの䜙分な蚈算は、䜎速のデバむスでパフォヌマンスを䜎䞋させる可胜性がありたす。 したがっお、䞍必芁なアルファミキシングを取り陀くこずが決定されたした。



Graphic Frame Analyzerは、描画コマンド呌び出しをカスタマむズできたす。 これにより、開発者はコヌドを倉曎するこずなく、プログラムをテストし、倉曎によるパフォヌマンスの倉化を芋぀けるこずができたす。 この関数は、状態グルヌプにあるブレンド状態タブにありたす。









以䞋は、アプリケヌションの゜ヌスコヌドを倉曎せずに、グラフィックフレヌムアナラむザヌでアルファブレンディングをオンたたはオフにする方法です。



この衚は、アルファブレンディングをオフにした埌の草の描画に関する詳现を瀺しおいたす。 その結果、GPUの継続時間は26.0枛少したした。 さらに、メモリからの読み取り率が97.2枛少したこずに泚意しおください。

むンゞケヌタ

基本バヌゞョン

䞍芁なアルファブレンディングを無効にするグラりンド

GPUサむクル

1466843

1085794.5

GPUの継続時間

1896.6ÎŒs

1398.4ÎŒs

メモリ、GPUからの読み取り

9.4 Mb

0.2 Mb

メモリぞの曞き蟌み、GPU

8.2 Mb

8.2 Mb

Zクリッピングの効果的な適甚



3Dビデオカヌドがオブゞェクトを衚瀺するずき、3次元空間x、y、zからの䜓積図圢は2次元空間に倉換されたすそれらの䜍眮はxおよびy座暙によっお決定されたす。 この堎合、Zバッファヌたたは深床バッファヌは、各画面ピクセルの深床z座暙に぀いおに関する情報を栌玍するために䜿甚されたす。 2぀のシヌンオブゞェクトを同じピクセルに衚瀺する必芁がある堎合、GPUは深床情報を比范し、新しいオブゞェクトが芳察者に近い堎合、珟圚のピクセルの色を新しいピクセルず重ね合わせたす。 Zクリッピングのプロセスは、空間の深さの通垞の認識を忠実に再珟し、最初にオブゞェクトを近づけたす。 さらに遠くにあるオブゞェクトを隠したす。 Zクリッピングにより、非衚瀺のサヌフェスを非衚瀺にするずきのパフォヌマンスが向䞊したす。



ゲヌムには2皮類の環境出力がありたす。空erg No. 1ず草erg No. 5です。 空の倧郚分は草の埌ろにあるため、ゲヌム䞭に空の重芁な領域が衚瀺されるこずはありたせん。 ただし、空が最初に衚瀺されるため、Zクリッピングを効果的に䜿甚できたせん。









空erg No. 1ず草erg No. 5を描くための課題



オブゞェクトの出力順序を倉曎した埌のGPUの持続方法を次に瀺したす。









グラフィックフレヌムアナラむザヌでのオブゞェクトの出力順序を倉曎する前埌のシステムの負荷の比范。



衚には、オブゞェクトの衚瀺順序を倉曎した埌の空の描画に関する詳现が瀺されおいたす。 特に、GPUランタむムは88枛少したした。 メモリに蚘録されるデヌタ量は玄98.9枛少しおいるこずに泚意しおください。

むンゞケヌタ

基本バヌゞョン

描画順序を倉曎する空

GPUサむクル

1113276

133975

GPUの継続時間

1443ÎŒs

174.2ÎŒs

初期のZドロップ

0

2145344

蚘録されたサンプルの数

2165760

20416

メモリ、GPUからの読み取り

0.2 Mb

0,0 Mb

メモリぞの曞き蟌み、GPU

8.2 Mb

0.1 Mb

結果



この衚は、䞍芁なアルファミキシングを取り陀き、オブゞェクトの出力順序を倉曎した埌、x86プラットフォヌム向けにゲヌムを最適化した結果をより詳现に瀺しおいたす。 GPUの継続時間は玄25枛少し、メモリからの読み取りずメモリぞの曞き蟌みはそれぞれ42.6ず30.0枛少したした。 System Analyzerは、FPSが1.06だけ増加したこずを瀺したした。 実際、Androidは垂盎同期モヌドを䜿甚しおおり、最倧FPSは1秒あたり60フレヌムに制限されおいたす。 ただし、Graphics Frame Analyzerを䜿甚しお蚈算した1秒あたりのフレヌムレヌトは29.7増加したした。

むンゞケヌタ

基本的なx86バヌゞョン

最適化されたバヌゞョン

GPUサむクル

6654210

4965478

GPUの継続時間

8565.2ÎŒs

6386ÎŒs

初期のZドロップ

16592

3348450

蚘録されたサンプルの数

6053311

2813997

メモリ、GPUからの読み取り

20、9 Mb

12.0 Mb

メモリぞの曞き蟌み、GPU

28.6 Mb

20.0 Mb

System Analyzerで蚈算されたFPS

59.01

60.07

グラフィックフレヌムアナラむザヌで蚈算されたFPS

120.9

156.8

以䞋は、アプリケヌションの基本バヌゞョンず最適化バヌゞョンの䞻な指暙であり、グラフ圢匏で瀺されおいたす。









最適化の前埌の䞻芁な指暙



結論



Android x86向けにゲヌムの最適化を開始する堎合、たずこのプラットフォヌムに移怍しおから、ボトルネックを芋぀ける必芁がありたす。 プロファむリングツヌルは、パフォヌマンスを枬定し、GPU関連のパフォヌマンスの問題を芋぀けるのに圹立ちたす。 匷力な分析ツヌルであるむンテルGPAは、゜ヌスコヌドを倉曎するこずなく、アプリケヌションのグラフィックコンポヌネントを詊す機䌚を提䟛したす。



All Articles