Flash Player 10.1 のハードウェアを利用した描画機能 (グラフィックス編)

引き続き Flash Player 10.1 のハードウェア描画機能の話題です。今回は GPU によるグラフィックス描画機能について。

Flash Player 10.1 は、OpenGL ES 2.0 をサポートする "デバイス" 上で、全てのグラフィック要素 (Pixel Bender シェーダを除く) を GPU を使って描画します。この機能はデバイス限定で、デスクトップ OS 用の Flash Player 10.1 は従来どおりソフトウェアによる描画処理を行います。将来はデスクトップでも GPU 描画がサポートされる予定です。

Flash Player 10 との違い

Flash Player 10 にも GPU を利用する機能があります。これは、Flash Player がソフトウェアにより個々のグラフィック要素の描画を行い、GPU がそれらを合成するというもので、wmode=gpu の指定をすると有効になります。パフォーマンスに関しては、早くなるケースがあれば遅くなるケースもあるという感じでした。

一方、Flash Player 10.1 での GPU サポートは、合成だけでなくグラフィックスの描画自体も GPU で行うものです (描画される対象は、ベクター・ビットマップ・ビデオ・テキスト・フィルター等全般)。 "最適化された" コンテンツであれば相当なパフォーマンスが改善が期待できることになっています。

Flash Player 10.1 の GPU 描画機能は、サポートされる環境であれば自動的にオンになるため、明示的に wmode=gpu を指定する必要はありません。但し、wmode=opaque や wmode=transparent を指定すると自動的に GPU 描画機能はオフになり、ソフトウェアによる描画が行われます。

GPU 描画の特徴について

ソフトウェアによる描画と違い、GPU による描画は 100% のピクセル精度を持っていません。これは、GPU がベクターグラフィックスの描画を行う際に、グラフィックの形状を小さな 3 角形のメッシュに分割 (テセレーション - tessellation: もともとはモザイク模様にするという意味 - と呼ばれる処理です) してから描画することによります。Flash Player 10.1 では、デスクトップでは引き続きソフトウェアによる描画が行われますので、デバイス用の Player が "公開されたら" 注意して比較してみてください。

それから、デバイス上では、パフォーマンス向上のため画質のデフォルト値が "中" になるようで、この点もテスト時には注意が必要そうです。一般的にデバイスはデスクトップ機のディスプレイよりもピクセル密度が高いため、"高" 画質でなくてもあまり気にならないことが多いのではないかと予測されます。iPad (Flash Player 載る予定無いみたいですけど Packager for iPhone があるのでいちおう) は ppi が低めなので辛いかもしれません。

あとは、GPU では忠実に再現されないブレンドモードがあります。細かい表示まで気にする場合は、"標準" と "アルファ" 以外は避けた方がよいようです。特に "レイヤー" はパフォーマンスにも影響します。

また、今回のバージョンでは Pixel Bender のハードウェアによる描画がサポートされないため、Pixel Bender で描いた領域が黒い四角になってしまったりとかするようです。これも将来の Flash Player 待ちということになっています。

。。。などなど、GPU 描画 (つまりデバイス上の描画) は、今まで見慣れていたものと違う箇所が散見されることになりそうです。従来のソフトウェア描画とはロジックがまったく異なるため、ある程度の割り切りは必要そうですね。

GPU 向けの描画最適化について

GPU の利用により描画処理自体はかなり高速化されるはずですが、コンテンツの作り方によってその度合いは大きく影響を受けます。コンテンツの描画を軽くするための最適化手法についても、GPU 描画とソフトウェア描画では描画ステップがまったく異なるため、今まで有効だったやり方が使えるとはかぎりません。

今後、デバイス上で Web の閲覧をすることも多くなると思いますので、デバイス向けのコンテンツ最適化のお役に立ちそうな項目をいくつか。(ベータ版が公開されたら各自の環境で確認お願いします - 下はあくまで一般論ということで)

  • 先に書いたように wmode=transparent と wmode=opaque の指定を避ける (GPU が使われなくなってしまうので)
  • ブレンドは標準とアルファ以外は避ける (特にレイヤー)
  • 形の変化するベクター図形はフレームごとにテセレーションの対象となるため負荷がかかる
  • テセレーションの困難なベクター図形 (自身と交わる曲線、薄い三日月のような形、細部の込み入った角、など 3 角形で構成すると複雑になる形) を避ける
  • スケールの大幅な変化を避ける (これもテセレーション関連)
  • 複数のグラフィック要素の重ねあわせを避ける (ソフトウェアによる描画では各ピクセルは一度だけ描かれるが GPU 描画では重なった要素の数だけ各ピクセルを描画する、なので実質的に描画面積を増やしているのと同じ)
  • 表示しないオブジェクトは別のオブジェクトの下に隠したりアルファを 0 にしたりせず、ディスプレイリストから削除する (同じく重なりを避ける)
  • 背景色はステージの属性に設定して、大きな色のついた四角を置いたりしない (これも重なり関係)
  • ビットマップ塗りのときにタイル状に繰り返し並べない
  • 形の変化しているオブジェクト (動的にフィルター効果を必要とするオブジェクト) 以外にフィルターを使用しない

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/13

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261