GPU レンダリングのパフォーマンスを最適化するためのヒント

GPU レンダリングによって SWF コンテンツのパフォーマンスを大幅に向上できますが、コンテンツのデザインが重要な役割を果たします。ソフトウェアレンダリングでこれまで問題なく機能していた設定が、GPU レンダリングではうまく機能しない場合があります。次のヒントにより、ソフトウェアレンダリングでのパフォーマンスを低下させずに、GPU レンダリングで良好なパフォーマンスを実現することができます。

注意: ハードウェアレンダリングをサポートするモバイルデバイスでは、多くの場合 Web から SWF コンテンツにアクセスします。したがって、ベストプラクティスとして、すべての画面で最適なエクスペリエンスを確保するために、SWF コンテンツの作成時に次のヒントについて考慮するようにしてください。
  • HTML 埋め込みパラメーターで wmode=transparent または wmode=opaque の使用を避けます。これらのモードを使用すると、パフォーマンスが低下することがあります。また、ソフトウェアレンダリングとハードウェアレンダリングの両方において、オーディオとビデオの同期に小さなロスが生じることがあります。さらに、多くのプラットフォームではこれらのモードが有効な場合の GPU レンダリングがサポートされていないので、パフォーマンスが大幅に低下します。

  • 通常モードまたはアルファのブレンドモードのみを使用します。他のブレンドモード、特にレイヤーブレンドモードの使用は避けてください。GPU を使用したレンダリングでは、一部のブレンドモードが正確に再現されない可能性があります。

  • GPU レンダリングでは、ベクターは小さな三角形で構成されるメッシュに分解されてから、描画されます。このプロセスは、テッセレーションと呼ばれます。テッセレーションにはパフォーマンスの負荷が少しかかりますが、この負荷の量はシェイプが複雑になるほど増加します。パフォーマンスの影響を最小限に抑えるには、モーフィングシェイプの使用を避けてください。モーフィングシェイプでは、GPU レンダリングによってフレームごとにテッセレーションが実行されます。

  • 自己交差曲線、非常に細い曲線領域(細い三日月など)およびシェイプのエッジに沿った複雑なディテールの使用を避けてください。これらのシェイプは、GPU でテッセレーションにより三角形のメッシュに変換するには複雑です。この理由を理解するため、500 x 500 の四角形と 100 x 10 の三日月という 2 つのベクターについて考えます。大きい四角形は 2 つの三角形となるだけなので、GPU で簡単にレンダリングできます。一方、三日月の曲線を描画するには、多くの三角形が必要です。このため、三日月シェイプに必要なピクセル数は少ないにもかかわらず、そのレンダリングはより複雑になります。

  • 拡大 / 縮小の大幅な変更を避けてください。この変更でも、GPU によってグラフィックのテッセレーションが実行される場合があります。

  • 過剰な描画をできる限り避けてください。過剰な描画によって、複数のグラフィックエレメントがレイヤー化され、その結果一方が他方を覆い隠すことになります。ソフトウェアレンダリングを使用すれば、各ピクセルはそれぞれ 1 回のみ描画されます。このため、ソフトウェアレンダリングの場合は、各ピクセル位置につき、どれほど多くのグラフィックエレメントが他のエレメントを覆い隠していても、アプリケーションのパフォーマンスに影響はありません。一方、ハードウェアレンダリングでは、ある領域を他のエレメントが覆っているかどうかにかかわらず、各エレメントのそれぞれのピクセルが描画されます。2 つの長方形が重なり合っている場合、ハードウェアレンダリングでは重なり合った領域が 2 回描画されますが、ソフトウェアレンダリングでは 1 回のみ描画されます。

    このため、ソフトウェアレンダリングを使用するデスクトップでは、通常は過剰な描画によるパフォーマンスへの影響に気が付くことはありません。しかし、重なり合うシェイプが多いと、GPU レンダリングを使用するデバイス上でのパフォーマンスに悪影響を及ぼします。ベストプラクティスとしては、オブジェクトを非表示にするのではなく、表示リストから削除してください。

  • 塗りつぶされた大きな長方形を背景として使用することを避けてください。代わりに、Stage の背景色を設定します。

  • ビットマップの繰り返しに関するデフォルトのビットマップの塗りモードの使用をできる限り避けてください。パフォーマンスを向上するには、代わりにビットマップクランプモードを使用します。