49
© 2012 Adobe Systems Incorporated. All Rights Reserved. 60fpsへの道: Flashゲームにおける パフォーマンスチューニングの A to Z Andy Hall Adobe Japan

CEDEC2012 - Flashコンテンツの最適化

Embed Size (px)

DESCRIPTION

60fpsへの道:Flashゲームにおけるパフォーマンスチューニングの A to Z

Citation preview

Page 1: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

60fpsへの道: Flashゲームにおける

パフォーマンスチューニングの A to Z

Andy Hall Adobe Japan

Page 2: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Andy Hall Game Evangelist

Adobe Japan

アンディ ホール ゲーム エバンジェリスト アドビ システムズ 株式会社 @fenomas

Page 3: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Agenda

• 最適化の全体的な話 • ActionScript 3.0 最適化 • Flash Player 内部設計 • レンダリング最適化 • 今後のトピック

Page 4: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

最適化の原則

“Premature optimization is the

root of all evil” Donald Knuth

(早すぎる最適化は諸悪の根源)

Page 5: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

最適化の流れ

パフォーマンス 向けの設計作り

効率よく、 迅速に開発

最適化 (ボトルネックのみ)

Page 6: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Metrics

最適化の前には測定基準が必要。

• FPS • メモリー使用量 • CPU 使用率 • Bandwidth? • バッテリー消費 • etc...

Page 7: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

プロファイリング

現在: Flash Builder 4.6 プロファイラー

近未来: コードネーム「モノクル」

Page 8: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

ACTIONSCRIPT 最適化

Page 9: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

ActionScript 3.0 の最適化

注意: • レンダーリングの方が

ネックの場合が多い

• 良く見る最適化の 「コツ」は多くの場合 無視しましょう

Page 10: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

基本の基本

• AS3.0 は必須 • すべての変数に型付け • Array、Dictionaryより

Vector.<type> • RegExpよりStringメソッド • E4X、XML は要注意

( ) • イベントよりコールバック

常に!

ネック の場合

Page 11: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Pooling

インスタンス化のコストが高い! オブジェクトのプール、再利用で、インスタンス化と 処理のコストを抑える

• Static temps

• オブジェクト pooling

Page 12: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Function コール

ファンクションコールにもコストそこそこ。 コールスタックを浅く、再帰的定義を避けよう。

Page 13: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

ガベージコレクション

GCを良く知ろう!

• Flash のGCは参照カウント、 マーク・スイープを 両方実装している。 (メモリー使用量の最適化には上記の理解が絶対条件!)

• モノクルを利用して、GC発生の頻度をチェックしよう。 • プール、再利用してGCの発生を抑えよう。 • リテラル(String、intなど)はヌルにするだけで処理

が済むので、大量データをリテラルとして扱おう。

Page 14: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

GCをスマートに

GCの都合の良いタイミングをFlashに教えよう。

画面切り替え、ポーズ画面等で上記を呼ぼう。 FlashのGC処理の準備は徐々に進んでいる。上記コマンドでは、 今のタイミングで処理するようにFlashに指示する。 因数は緊急性を表す。 imminence=0.99; // すぐに処理ができれば発生させる imminence=0.01; // 処理の準備がまだ多少残っても発生させる

Page 15: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

参考文献:

「ActionScript 3.0 パフォーマンスチューニング」 (野中 文雄 著)

Page 16: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

FLASH 内部設計

Page 17: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

全体像 // フラッシュの内部ループ(単純的に) while() { sleep until (nextEvent OR externalEvent) if ( various events pending ) { handleEvents(); // Timerイベント、 // audio/video バッファー等を処理する } if ( time for next SWF frame ) { parseSWFFrame(); executeActionScript(); } if ( screen needs update ) { updateScreen(); } }

Page 18: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Flash の内部ループ

外部からの イベント処理

次のSWF フレームを処理 スクリプト実行

レンダー (表示)

sleep

Page 19: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

ポイント! 定期的な処理は基本的に

Event.ENTER_FRAME で!

sleep

ENTER_FRAME

外部からの イベント処理

次のSWF フレームを処理 スクリプト実行

レンダー (表示)

Page 20: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

表示リスト

Display List

Bitmap Video

Vector shapes

Page 21: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

再描画領域

Display List フレーム アップデート

“Dirty” (再描画される)

Page 22: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

表示プレーン

Display List

3D Video

Vector

Page 23: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

描画モード

wmode (Flash ) renderMode ( AIR)

direct

transparent opaque

ブラウザー

CPU

GPU

Flash レンダリング

gpu

cpu

Page 24: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

レンダリング 最適化

Page 25: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering 基本

• 表示リストを浅くしよう。

理由:再描画領域内 のすべてが 毎フレーム完全に 処理されるため

Display List

Page 26: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering 基本

ある表示機能は物理的に重い。 気を付けながら使おう。 • ビットマップエフェクト

(グロー、ドロップシャドー等) • マスク(ベクターベースだし) • アルファーチャンネル・半透明 • ブレンドモード(add、multiply等) • 組み込みフォント(特に日本語!)

Page 27: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering 基本

• 用が済んだものはStageから消去 • 適切なフレームレートを • ベクターシェイプを簡単化しよう

Page 28: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Stage設定 • StageQuality.LOW:

Lower-quality vector shapes. Never anti-alias, never smooth bitmaps.

• StageQuality.MEDIUM: Better vectors. Some anti-aliasing but no bitmaps smoothing. Default value for mobile devices.

• StageQuality.HIGH: Always uses anti-aliasing. Uses smoothing on bitmaps depending on whether the SWF is animating. Default value on desktop PCs.

• StageQuality.BEST: Best quality. Always anti-alias, always smooth bitmaps.

Page 29: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering 内部設計

• ラスタライズ化の条件、 ビットマップキャッシュは デザイナーさんも含めて理解しよう!

Page 30: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Bitmap Caching

• 複雑なアセットを 一度ラスタライズして 後はビットマップが 代わりに使われる。

• ビットマップエフェクト、ブレンドモード等を 利用する場合に自動的に適用

一般的なFlashコンテンツの最適化には、 これは何より大事!

Page 31: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

再ラスタライズの条件 foo.cacheAsBitmap = true;

foo.cacheAsBitmapMatrix = new Matrix();

キャッシュ のまま

再ラスタライズ

キャッシュのまま GPUで描画される AIRアプリのみ!

Page 32: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Bitmap Caching

キャッシュ状態をモノクルで確認しよう。

Page 33: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering 最適化

最後の一言: 現場のスペックに合わせよう!

500 particles 200 particles

Page 34: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

レンダリング モデル

Page 35: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Rendering Models

現代のゲームに、 レンダーモデルは主に4つ:

1. Display List 2. GPU mode 3. Blitting 4. Stage3D

Page 36: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

1.表示リストモデル

• Flash Proアニーメータが作る、タイムライン

アニーメーションベースの一般的なコンテンツ

• 作りやすい。パフォーマンスは低い。

• PC向けの軽いコンテンツには十分に使える。

モバイルにはNG。(GPU一切使われないし)

• 最適化のキーテクニックはビットマップ

キャッシュである。

Page 37: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

2.GPU Mode

• AIRアプリのパブリッシュ設定である。

Android、iOSにも対応する。

• 設定の場合、ベクターやビットマップをGPU経由で

描画しようとする。

• movieclip.cacheAsBitmapMatrix を正しく、注意深く

使えば、かなりパフォーマンスが出る。

• 現代までは有力なモデルだが、今後の作品・

新プロジェクトにはおすすめできない。

Page 38: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

GPU Mode 事例 モンスタープラネットSMASH!

(GREE)

参考:

Page 39: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

3.Blitting(ブリット)

• StageにBitmapを置いて、自分で扱うビットマッ

プデータをBitmapData.copyPixels()で

ゲームエリアに手動的に描く。

• つまり、レンダリングを完全に自分で担当。

• 固い条件が満たされる場合、効果的である。

• 解像度の高い(Retina)画面には

スケールしないので寿命が…

Page 40: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

4. Stage3D

Page 41: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

4.Stage3D

• Flash 11.0からの新機能。ActionScriptから

シェーダープログラムを直接GPUに送れる。

• AGAL (Adobe Graphics Assembly Language) を利用する

• AGAL とはこんな感じ:

• 一般的な開発者には

ライブラリーが必要!

m44 op, va0, vc0 dp4 op.x, va0, vc0 dp4 op.y, va0, vc1 dp4 op.z, va0, vc2 dp4 op.w, va0, vc3 m44 op, va0, vc0 mov v0, va1

(ヒトリデハキケンジャ!)

Page 42: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

• オフィシャルライブラリー (free, open source):

• Starling (2D)

• Away3D

• ニーズによって他にも様々…

N2D2 Genome2D

Stage3D ライブラリー ( コレヲ サズケヨウ!)

Page 43: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Stage3D 事例

Page 44: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

今後のトピック

Page 45: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

AS3 ワーカー

作成

MessageChannel

API

共用メモリー

メイン ワーカー

(既存

Flash Player)

バックグラウンド ワーカー

(制限付き)

mutex

Page 46: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

AS3 ワーカー

作成

MessageChannel

API

共用メモリー

メイン ワーカー

(既存

Flash Player)

バックグラウンド ワーカー

(制限付き)

mutex

Page 47: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

Longer term

新コンパ イラー!

プロジェクト モノクル

Flash Proを より進化!

ActionScript の次版・・?

Page 48: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.

[email protected] @fenomas

ご清聴ありがとうございました。

Page 49: CEDEC2012 - Flashコンテンツの最適化

© 2012 Adobe Systems Incorporated. All Rights Reserved.