インディーズゲーム「Abi」のシーンCPUコスト分析

本日共有したコンテンツは、LILITHが開発した人気のインディーズゲームAbiからのもので、現在高い評判を獲得しています。 該当プロジェクトをテストしたところ、ローエンドおよびミッドレンジの携帯電話でフレーム率が低く、デバイスの発熱の問題がより深刻になることがわかりました。開発スタッフとのコミュニケーションを通じて、問題の原因を分析し、分析プロセスとソリューションを共有しました。

一   問題の説明

このシーンでゲームをテストすると、ローエンドデバイスとミッドレンジデバイスのパフォーマンスが低下し、デバイスの発熱問題がより深刻になります。

二   問題の再現

開発チームから提供された例に対して分析した結果、ローエンドデバイス(Redmi 2 & Redmi Note 2)においてこの問題が再現されました。具体的なCPUコストは、下の図で示している。Redmi 2 & Redmi Note 2において、いずれも25フレーム以下となります。

[caption id="attachment_898" align="alignnone" width="675"] Redmi Note 2:Gfx.WaitForPresent – 平均31ms[/caption][caption id="attachment_899" align="alignnone" width="671"] Redmi Note 2:Gfx.WaitForPresent – 平均31ms[/caption]

三   問題の分析

Gfx.WaitForPresentはローエンドでの温度が持続的に高まっています。これは、現在のパフォーマンスのボトルネックがCPUではなくGPUにあることを示しています。そのシーンをテストした結果を踏まえて次のことがわかりました。

(1)Android側でAA機能が無効になっています。

(2)シーンには2つのRealtime Directional Lightがあり、両方のRealtimeシャドウがオンになっています。

(3)シーンには5〜6個のRealtime Point Lightがあります。

検出結果から、シーンにはRealtimeの光源が多すぎます。これが、GPUの過剰な圧力の主な理由です。 シーン内の1つのDirectional LightのみをImportantな光源として予約し、他の光源は「Importantでない」に設定しましたRedmi Note2デバイスのパフォーマンスを次の図に示します。Gfx.WaitForPresentは平均14msに削減され、フレーム率は45FPSで安定しました。

同時に、Directional LightのRealtimeシャドウをオフにしようとしましたが、パフォーマンスの向上は明らかではありません。これは、シャドウがGPU側の主なプレッシャーではないことを示しています。

さらに、2つの異なる状況でデバイスのコスト消費量もテストしました。 最適化されていない場合、モバイルデバイス(テストデバイスはXiaomi 5S)の電力消費率は20.07%/時間です。Importantな指向性ライトを1つだけ予約すると、モバイルデバイスの電力消費率は16.44%/時間、つまりデバイス電力消費率は20%節約されます。

四   結論

上記の分析から、ローエンドデバイスとミッドエンドデバイスでの現在のゲームシーンの低フレーム率と主な理由は、GPUパフォーマンスの圧力が大きすぎることであり、根本的な原因はシーンで使用されているRealtime光源が多すぎることです。 この点に関して、開発チームは、実際の状況に応じてシーン内のImportantRealtime光源の数を可能な限り制御し、GPUのパフォーマンス圧力を軽減することをお勧めします。