2

基本システムをCocos2d-x1.0(Qtポート0.6)からCocos2d-x 2.0(Qtポート1.0)に変更したいのですが、システムを変更する前にテストする必要のあるタスクがいくつかあります。それらのタスクの1つは、パーティクルシステムのパフォーマンスです。1.0から2.0に変更するとパフォーマンスが向上することを念頭に置いて、反対のことを発見しました。バージョン1.0は、バージョン2.0よりもはるかに優れたパフォーマンスを発揮するようです。今、私たちはこれが正しいかどうかを発見したいと思います、そしてうまくいけば誰かが私たちが見逃す可能性のあるヒントを私たちに与えることができます(Cocos2d-xの間違った設定、間違った設定、...)。

パフォーマンスをテストするために、簡単なテストシナリオを作成しました。シーンを押すたびに複数回追加できる1つのパーティクルシステムを使用します。このパーティクルシステムは、さまざまなサイズのテクスチャ(4x4pxと32x32px)とクアッドパーティクルシステムを使用します。

テストのベースは、Cocos2d-xのHelloWorldの例です。さらに、タッチレシーバーを有効にし、バッチを作成し(必要な場合)、ラベルをカウンターに変換し、パーティクルシステム挿入ルーチンを追加しました。ソースコードとリソースは、以下のzipアーカイブへのリンクとして添付されています。

LinuxバージョンのCocos2d-xとQt(MeeGo Harmattan)バージョンのCocos2d-xを比較しました。テスト結果は、Excelシートhttp://www.fantasyhaze.com/sof/Particle_Performance_Tests.odsにあります。すべてのテストケースで、1.0バージョンは2.0よりもパフォーマンスが優れていました。すべてのテストケースで、バッチ処理されたパーティクルシステムは、Cocos2d-x2.0のバッチ処理されていないパーティクルシステムと同じパフォーマンスを示しました。性能はFPS/パーティクルシステムで測定されました。

結果:

すべてのエフェクトで使用されているテクスチャが小さいため、バッチシステムと非バッチシステムのパフォーマンスに違いは見られません。したがって、OpenGLの状態の変化はそれほど多くありません。透明度の高い巨大なテクスチャやパーティクルの数が多い場合(パフォーマンスの低下により不可能)、または異なるテクスチャを使用してOpenGLの状態変化を予測する場合に、より強い効果が見られる可能性があります。

したがって、一般的なパフォーマンスの低下は、グラフィック側だけでなく、CPUの使用率が高いこと(数千の粒子の各フレーム内の粒子の位置を計算すること、つまり、350個の粒子を含む47個の粒子システムがペイロードを生成すること)にある可能性があります。 47 * 350 = 16450パーティクルで、フレームごとに再計算する必要があります)。バッチ処理されたパーティクルを使用する場合、これは使用できるパーティクルの最大量でもあります。これは、GL描画関数が、16450パーティクルで到達する符号なしの短い値を使用するためです。16450 * 4(頂点)= 65800(ushort = 65535)。これは、デスクトップマシンでバッチ処理されたパーティクルとバッチ処理されていないパーティクルを使用した場合に(スクリーンショットで)確認できます。47個のパーティクルをバッチに挿入すると、新しいエフェクトの表示が停止します。さらにエフェクトを追加しても、パフォーマンスは低下し続けます。これは、パフォーマンスの低下がGPUではなく主にCPU側に基づいていることを示しています。これは、32x32pxの代わりに4x4pxテクスチャを使用している場合にも気付くことがあります(デスクトップ上に配置できるエフェクトはあと約10個のみです)。

関連トピック:

エクセルシート、スクリーンショット、ソースコードはアーカイブにあります-http: //www.fantasyhaze.com/sof/Particle_Perfromance_Tests.zip http://www.fantasyhaze.com/sof/Particle_Perfromance_Tests.ods

4

0 に答える 0