Adobe MAX 2010レポート 1日目 モバイルFlashコンテンツの最適化

 
 
2010.10.26 個別ページ
 
 
sh
 

Adobe MAX 2010のセッション「Optimizing Flash Player Compatible Content for Mobile Devices」のレポートです。

今回のMAXは、マルチデバイス、マルチスクリーン対応がテーマになっていますが、やっぱり特定のデバイスに向けて最適化することもあるわけです。このセッションでは、その際のテクニックが惜しむことなく紹介されました。

残念ながら、セッションの最後の部分は、講師の時間配分のミスで、大変な駆け足になっていたので、内容をメモすることができず省略されています。ハンズアウトが入手できたら、後日追記します。

対象を知る
まず、対象となるデバイスをよく知ること。スクリーンのサイズ、解像度、GPUを搭載しているかどうかを知る必要がある。

ビットマップ
・必要最低限のサイズにする。再生時に拡大縮小させない。
・透明情報が不要な画像は、PNGではなくJPGに。
・ビットマップを圧縮する、ダウンロードサイズを小さくする。

ベクターデータ
・パスを簡単にする。最適化する。
・FXGコードを単純化する。ビットマップに変換する。手で編集する。
FXGについての解説
・ベクターデータはなるべく使わない。

メディア
・ターゲットデバイスのネイティブコーデックを使う(H.264やAAC)
・大きなメディアを使わない(再生時に縮小などしない)
・埋め込みフォントを使わない、デバイスフォントを使う。

レンダリングの最適化
・フレームレートを落としてみる。過剰なフレームレートはプレイヤーがそれに合わせようとして無理がかかる。
・StageQualityを設定する(Low/Medium/High/Best)
・適切なディスプレイオブジェクトを選択する(Shape/Sprite/MovieClip)
・ディスプレイリストのツリー構造をなるべくフラットにする
・アルファは使わない
・不必要なマスクはかけない
・MovieClipsを止める
・ステージ外にあるオブジェクトは消す
・add/removeChildを繰り返すようなら、visibleでコントロールしたほうがいい。

cacheAsBitmap
・多くのモバイルデバイスでは、GPUを使える
・よく内容が変わるディスプレイオブジェクトには不向き
・オブジェクトの平行移動の変形などではキャッシュがきかない
・flash.profiler.showRedrawRegions(true);として、再描画領域を確認

cacheAsBitmapMatrix
・回転させてもキャッシュが効く
・GPUを使えるデバイスが多い
・回転前、回転後の2つのビットマップがメモリに必要
・sprite.cacheAsBitmapMatrix = sprite.transform.concatenatedMatrixのように使う

ブレンドモードとフィルタは避けよう
・フィルターは毎フレームCPUを使う
・フィルターは、フィルタ適用前、フィルタ適用後の2つのビットマップがメモリに作られる。ただし、Flash Player 10.1では、30秒間変更がなかったり、そもそも見えていないものについては、フィルタ適用前のビットマップは解放される。
・あらかじめフィルタをかけたグラフィックを使おう

Blitting
・Blittingは、いくつかのビットマップをビットマップに重ねて描く処理
・ゲームのスプライト的なものは、オブジェクトのx,yを動かしながら絵を変えてアニメーションさせるよりは、毎フレームcopyPixelsを使ってステージに描いたほうが速い。

(以下、後日掲載予定)