Flashレンダリングのパフォーマンスと最適化



フラッシュゲームの作成中(慎重に-お問い合わせください!)、ある時点でパフォーマンスの問題が発生しました。



FPSは非常に生産性の高いシステムでも低下し始めました...問題はすべてのフラッシュゲームに典型的なものでした-多数のベクターグラフィックス。 ご存知のように、ベクターグラフィックスはリソースを大量に消費します。 実際、レンダリングの際、プレーヤーはさまざまなトリッキーな曲線などを再計算する必要がありますが、これはラスターグラフィックスでは明らかに速度が低下します。 何で-桁の大きさ(またはさらに数桁)を失います。



古き良き伝統によると、グーグルは歯に奪われ、解決策の探索が始まりました...



人材派遣ソリューション



最初につまずくのは、「ビットマップとしてキャッシュ」です。 最初にこのオプションを扱いましょう。



クリップごとにこのオプションを個別に有効にする必要があります。 これは、Flash自体で行われます。同じ名前のチェックボックスを設定して[プロパティ]パネルでクリップを選択します。 または動的に-AS3コードでMovieClipの「cacheAsBitmap」プロパティを「true」に設定します。



このモードを有効にすることで、フラッシュにベクトルMovieClipをラスターイメージとしてメモリに保存し、必要に応じて画面に表示するように指示します-既にラスターとして表示することで、パフォーマンスが大幅に向上します。



問題が発生します-なぜこの方法はデフォルトで有効になっていないのですか?



ここではすべてが簡単です。 実際、キャッシュされたクリップが変更(アニメーション)される場合、または透明度を回転/スケール/変更する場合、このためにフラッシュは既に更新された画像をキャッシュするためにクリップのベクター「ソース」に再度切り替える必要があります。 したがって、すべてのフレームを変更するクリップがある場合、プレーヤーはそれを絶えず再キャッシュする必要があり、逆にパフォーマンスが低下します。



要するに、「ビットマップとしてキャッシュ」は、すべての静的ムービークリップに対して安全に有効にできます。 たとえば、ゲーム内に静的な素材とアニメーションクリップで構成される背景がある場合(たとえば、静的な森林景観に植物を重ねて移動する場合)、静的な部分を個別のムービーに分離し、キャッシュを設定する必要があります。



この方法の良い点と悪い点:

+ methodい方法をオンにするのは簡単です。 さらに、ユーザーは表示の違いを検出しません(クリップの整数以外の座標を使用する場合にのみ微妙なニュアンスが発生する可能性があります)。

+この方法は、あらゆる複雑な静的なムービークリップに最適です(グラデーション、カーブなどをいくつでも)

-このメソッドは、アニメーション、回転、クリップ、および透明度が変化するクリップには使用しないでください。 当然、グラフィックのアーティファクトを受け取ることはありません-すべてがまだ美しいです。 しかしそれどころか、生産性を失う可能性があります。

-メソッドは一定量のメモリを使い果たします(それがなければ、どこにも...プレイヤーはラスタライズされた画像をどこかに保存しなければなりません)。

-一部の開発者によると、大きなクリップ(10,000 x 10,000)を使用しても、速度が低下する可能性があります。



アニメーションクリップのソリューション。



アニメーションクリップのソリューションもあることがわかりました。 このソリューションの本質は、アニメーション化されたクリップを取得し、すべてのフレームを事前にラスタライズして、ビットマップデータとして保存することです。 そして、オリジナルのクリップラスターコピーを操作します。



難しいと言いますか? 実際、自転車は私たちの前ですでに発明されています。 Touch My Pixelブログに投稿されている既製のソリューションを使用できます。 メソッドのパフォーマンスを評価できるオンラインの例もあります



アニメーションキャッシュを使用する場合と使用しない場合の違いは非常に重要です。







この方法の長所と短所:

+この方法はアニメーションクリップに適しており、生産性を大幅に向上させることができます。

-決定は「そのまま」ではありません。 サードパーティのコードを「ねじ込む」必要があります。

-この方法では、アニメーション全体の予備レンダリングが必要です(つまり、フラッシュドライブを起動する前にわずかな遅延があります)。



結果。



グラフィックは次のようなものです。



(中央の怪物はユーザーによって作成されたので、彼の「可愛さ」にぶつからないでください:)



静的に通常の「キャッシュとしてのビットマップ」を含めることで、FPSは12に落ち、通常の30になりました。



現在、アニメーショングラフィックスにキャッシュを正しく適用する方法を考えています。



おわりに



この記事がフラッシュドライブのパフォーマンス向上に役立つことを願っています!



トピックに関する有用な資料:




All Articles