box2d の物理演算をかなり集中的に使用するゲームを開発していますが、私のベータ テスターは、画面上に多くのオブジェクトがあるとパフォーマンスが低下すると報告しました。私はほぼ常にアプリの DEBUG バージョンを使用しており、常に 60 fps でかなり安定していました。ONLY_ACTIVE_ARCH
実質的にすべてのビルド設定をいじった後、DEBUGビルドモードではフラグがYES
あり、RELEASEではフラグであることに気付きましたNO
. ARMv6 専用の RELEASE バージョンをビルドし、ARMv7 対応デバイスにインストールした後、安定した 60 fps が得られました。ARMv7 (Thumb) 用にビルドしようとすると、再びずさんな (30 - 50% 悪い) パフォーマンスが得られました。また、非物理シミュレーション環境では、わずかなパフォーマンス ヒットが見られました。テスト デバイスは、iPod Touch 4、iPhone 4、および iPhone 3GS でした。なぜそうなるのかについて、ご意見をお聞かせいただけますか。何も思いつきません :)
2 に答える
同じ問題に気付きました。いくつかのテストの後、次のレンダーモードを設定するとパフォーマンスが大幅に向上することがわかりました。
<renderMode>gpu</renderMode>
これをgalaxy s2でテストしました。他の端末への影響は今のところわかりませんが…
まず第一に、常にリリースビルドでのみパフォーマンスを測定してください。デバッグ ビルドには、アサーション、ロギング、およびパフォーマンス結果を歪める可能性のあるその他のものが含まれ、通常はさらに悪化します。
これが正しければ、ARMv6 コードはすべてのデバイスでスムーズに (60 fps) 実行されますが、Thumb 命令を有効にして ARMv7 用にビルドすると、「ずさんな」パフォーマンスが得られます。「30 ~ 50% 悪い」とは、前述の 3 つのデバイスすべてで ARMv7 コードの約 30 ~ 45 fps を意味すると私は考えています。また、比較可能なテストシナリオ、つまり、デバイス間のパフォーマンスを正確に比較できるように、同じ位置にある同じ数のオブジェクトからゲームを開始することもないようです。ゲームをプレイして「オブジェクトが多い」シーンを手動で再現すると、実際のパフォーマンスの違いを評価することは困難です。
ARMv7 と親指の命令が既に有効になっているため、特に第 4 世代のデバイスでは、実際に優れたパフォーマンスが得られるはずです。親指を無効にして再テストしてみてください。リリース ビルドの最適化レベルも確認する必要があります。一般に、ARMv6 または ARMv7 のみに影響するエントリのビルド設定を確認します (そのようなエントリには展開するための矢印が付いています)。
また、パフォーマンスの問題が実際に物理に関連していることも確認する必要があります。「オブジェクトが多い」ということは、画面上に「スプライトが多い」ことも意味します。それらがスプライト バッチ処理されていない場合、パフォーマンスが大幅に低下する可能性があります。それらも部分的に透明、回転、またはスケーリングされている場合、スプライトバッチを使用しない場合のパフォーマンスはさらに低下します。