Core Graphicsを使用して、パーティクルシステムとして雨と雪を描画しようとしています。シミュレーターではレンダリングは正常に進行しましたが、実際のデバイスでアプリを実行するとレンダリングが遅くなります。
だから、 iPhoneでパーティクルシステムの描画パフォーマンスを向上させるためのアプローチを教えてください。
これまたはCoreAnimationにOpenGLを使用する必要があるのでしょうか?
Core Graphicsを使用して、パーティクルシステムとして雨と雪を描画しようとしています。シミュレーターではレンダリングは正常に進行しましたが、実際のデバイスでアプリを実行するとレンダリングが遅くなります。
だから、 iPhoneでパーティクルシステムの描画パフォーマンスを向上させるためのアプローチを教えてください。
これまたはCoreAnimationにOpenGLを使用する必要があるのでしょうか?
Core Graphicsを使用してビューを描画し、フレームごとに再描画してパーティクルの動きを反映するだけの場合、パフォーマンスが低下します(詳細については、この回答を参照してください)。パーティクルシステムのアニメーションについては、OpenGLESまたはCoreAnimationにアクセスすることをお勧めします。
私のおすすめは、 iPhoneOS3.0とSnowLeopardで追加された新しいCoreAnimationレイヤータイプであるCAReplicatorLayerを調べることです。多くのコードを使用せずに、この1つのレイヤータイプを使用して作成されたいくつかの印象的なパーティクルシステムを見てきました。ReplicatorDemoサンプルアプリケーション(Macの場合ですが、コアコンセプトは同じです)、またはJoeRicioppoの「To1e100fAndBeyondwithCAReplicatorLayer」の記事を参照してください。
OpenGLは、レンダリングのためにドロップする最低レベルになるため、最高のパフォーマンスを提供する必要があります(正しく実行された場合)。パーティクルが多すぎない場合、CoreAnimationは十分に近くなります(正確な数値は他の要因によって異なりますが、最大で約50個で問題ありません)。現在CoreGraphicsを使用していると言うとき、それはタイマーに基づいて再描画していることを意味しますか?もしそうなら、CoreAnimationは間違いなくあなたを助けます-あなたが各粒子をビューに分離できる限り。CoreGraphicsを使用して、個々のパーティクルをレンダリングすることもできます。
位置を計算するために物理エンジンを使用していますか?
実装に関する情報がほとんどまたはまったくない状態でアドバイスを提供することは困難です。私の経験からiPhoneの大きなボトルネックになっているのは、メモリの割り当てです。したがって、スポーンされたパーティクルごとに新しいオブジェクトを割り当てる場合は、それを最初に修正する必要があります。(オブジェクトのプールを割り当てて、それらを再利用します。)