モバイルGPUとタイルベース描画
スマホのGPUがデスクトップと別物なのはメモリ帯域と発熱の制約ゆえ。タイルベース描画の原理を押さえれば、なぜオーバードローとレンダーパス分割が電池と性能を削るのかを構造で説明できる。
- モバイルGPUの主流はタイルベース遅延レンダリング(TBDR)で、画面を小さなタイルに分割し、各タイルをGPU内部の高速なオンチップメモリ上で完結させてから一度だけ外部メモリへ書き戻す。
- 描画は幾何処理(ジオメトリ)とピクセル処理(ラスタライズ)の2フェーズに分かれ、可視性判定(HSR/Early-Z)で隠れたピクセルのシェーディングを省くことでオーバードローの帯域コストを抑える。
- レンダーパスの不用意な分割やタイルメモリの容量超過はオンチップの利点を捨てて外部メモリ帯域を浪費し、フレーム時間と消費電力の両方を悪化させる。
なぜモバイルGPUはデスクトップと設計が違うのか
デスクトップGPUは潤沢な電力と広いメモリ帯域、そして大型のヒートシンクを前提に、フレームバッファへ即座に書き込むイミディエイトモードレンダリング(IMR)を採ります。一方スマートフォンのSoCは、数ワットの電力枠、共有メモリの限られた帯域、そしてファンレスの発熱制約という三重の縛りの中で動きます。この制約の下で支配的になった設計が、画面をタイルに分けて処理するタイルベースレンダリング(TBR)です。Arm MaliやQualcomm Adrenoが採る基本形のTBRに対し、ImaginationのPowerVR系とその系譜を継ぐAppleのGPUは、可視性判定をさらに突き詰めたタイルベース遅延レンダリング(TBDR)を採ります。本稿はこのタイルベース系、とりわけTBDRを軸に、前段の UI合成パイプライン が最終的にGPUへ渡した描画命令が、GPUアーキテクチャの内部でどう処理されるかを扱います。
帯域こそがモバイルGPUの律速
モバイルGPUの性能を決めるのは演算能力(FLOPS)よりも、外部メモリ(DRAM)への読み書き帯域です。理由は電力にあります。DRAMアクセス1回はGPU内部の演算やオンチップメモリ参照に比べ、桁違いに多くのエネルギーを消費します。フレームバッファへの書き込み、テクスチャの読み込み、深度・ステンシルの読み書きはいずれもこの高価な外部アクセスであり、ここを削ることが性能改善と電池持ちの両方に直結します。TBDRの発想の核心は、外部メモリへの往復をタイル単位でまとめ、最小回数に抑える点にあります。
タイルとオンチップメモリ
TBDRはレンダリング対象(レンダーターゲット)を、例えば32x32ピクセルといった小さな矩形の集合、すなわちタイルに分割します。各タイルの深度・ステンシル・カラーのバッファは、GPUのすぐ隣にある高速なオンチップメモリ(タイルメモリ、オンチップSRAM)上に確保されます。あるタイルに属する全ての描画をこのオンチップメモリだけで完結させ、全処理が終わった最後に一度だけ、確定したカラー値を外部のフレームバッファへ書き戻します。
イミディエイトモードでは、三角形が重なるたびに深度テストのためのバッファ読み書きが外部メモリへ発生します。TBDRではその往復がタイルメモリ内に閉じ込められ、外部への書き戻しはタイル1枚につき原則1回だけです。深度・ステンシルに至っては、次フレームに残す必要がなければ外部へ書き出さず破棄できます。この「読み書きをオンチップに閉じる」構造が、限られたDRAM帯域を節約する最大の仕掛けです。
2フェーズ構成:ジオメトリとラスタライズ
タイルベースGPUの1描画(レンダーパス)は、時間的に分離された2つのフェーズで進みます。
横にスクロール
| フェーズ | 処理内容 | 生成物 |
|---|---|---|
| フェーズ1:ジオメトリ処理(ビニング) | 頂点シェーダを実行し、全三角形をどのタイルに掛かるかで仕分け、タイルごとのプリミティブリストを作る | 各タイルに属する三角形の一覧(パラメータバッファ) |
| フェーズ2:ラスタライズ/シェーディング | タイルを1枚ずつ選び、そのタイルに掛かる三角形だけをオンチップメモリ上でラスタライズ・シェーディングする | 確定したタイルのカラー(最後に外部フレームバッファへ書き戻し) |
フェーズ1で全ジオメトリの位置が先に確定するため、フェーズ2の時点ではどのタイルにどの三角形が重なるかが完全に分かっています。TBDRの「D(Deferred=遅延)」は、このように可視性の判定とピクセルのシェーディングを後段へ遅延させ、実際に見えるピクセルだけを塗る戦略を指します。
オーバードローと可視性判定
オーバードローとは、同じピクセルを1フレーム中に複数回シェーディングしてしまう無駄を指します。背景・カード・影・テキストが重なれば同一座標が何度も塗られ、その都度カラー計算とバッファアクセスが起きます。タイルベースGPUはこれを2つの機構で削ります。
- Early-Z(早期深度テスト): フラグメントシェーダを走らせる前に深度テストを行い、既により手前のピクセルが確定していれば、そのフラグメントのシェーディング自体を省く。
- HSR(Hidden Surface Removal、隠面消去): PowerVR系が持つより踏み込んだ機構で、タイル内の全プリミティブの可視性を先に解決し、最終的に見えるフラグメントだけをシェーディングする。理想的には不透明物のオーバードローをほぼ排除できる。
Early-ZやHSRが効くのは、深度が確定できる不透明描画に対してです。アルファブレンディング(半透明)は下の色を読んで混ぜる必要があるため隠面消去で省けず、重ねた枚数だけシェーディングとブレンドが積み上がります。discard(アルファテスト)やフラグメントシェーダ内での深度書き換えも、事前の可視性判定を無効化し、Early-Zを遅延させる典型要因です。半透明の重ね張りとフルスクリーンのブレンドは、モバイルGPUで最もオーバードローを生みやすい操作だと覚えておきます。
レンダーパスの構成が帯域を左右する
TBDRの利点はレンダーパス単位で成立します。1つのレンダーパスは「オンチップにタイルを載せる→全描画→書き戻す」の一括りであり、パスを分割するほどこの往復が増えます。ここで効くのが、パスの入口と出口でのタイルメモリの扱い方(ロード/ストア動作)です。
| 動作 | 意味 | 帯域への影響 |
|---|---|---|
| Load | パス開始時に既存のフレームバッファ内容を外部メモリからタイルへ読み込む | 外部読み込みが発生。前の内容が不要なら避けたい |
| Clear / DontCare | 読み込まずタイルを初期化、または内容を気にしないと宣言する | 外部読み込みを省ける(推奨) |
| Store | パス終了時にタイル内容を外部フレームバッファへ書き戻す | 確定カラーには必要。深度・ステンシルは不要なら破棄で帯域節約 |
実務では、フレーム冒頭で前フレームの内容に依存しないなら明示的にクリア(Load を避ける)し、途中で結果を使わない深度・ステンシルは書き戻さない(Store を避ける)ことで、往復を最小化します。逆に、あるパスの出力を別のパスがテクスチャとして読む構成(フレームバッファへの書き戻しと再読み込みが挟まる)は、オンチップ完結を破って外部帯域を二重に消費します。ポストプロセスやシャドウマップのように本質的に複数パスが要るケースを除き、パス数と中間ターゲットは減らすほど有利です。
オンチップのタイルメモリは有限です。多数のカラーアタッチメントを同時に使うMRT(Multiple Render Target)や、極端に広いピクセルフォーマット(高ビット深度のHDRなど)を積むと、1タイルのワーキングセットが容量を超えます。すると、タイルサイズを小さく取り直す、あるいはオンチップに載せきれず外部メモリを経由するなどのペナルティが生じ、TBDRの前提が崩れます。アタッチメント数とフォーマット幅を絞ることは、そのままタイルメモリ予算を守ることになります。
タイルベースと即時描画の対比
| 観点 | イミディエイトモード(IMR) | タイルベース遅延(TBDR) |
|---|---|---|
| 描画の粒度 | 三角形を来た順にフレームバッファへ直接描く | 画面をタイルに分割し、タイル単位で完結させる |
| 深度・カラーの往復 | 重なりのたび外部メモリへ読み書き | オンチップに閉じ、書き戻しは原則タイル1回 |
| オーバードロー耐性 | 描いた分だけ素直にコストが乗る | Early-Z/HSRで隠れたシェーディングを省ける |
| 苦手なもの | 帯域の消費が大きく電力に不利 | パス分割・半透明・タイルメモリ超過で利点が失われる |
この対比は絶対的な優劣ではなく制約への適応です。デスクトップの潤沢な帯域と電力ではIMRの単純さが活き、モバイルの帯域と発熱の制約ではTBDRの往復削減が活きます。クロスプラットフォームの描画戦略 で触れたFlutterのImpellerや各エンジンが、モバイルではこのタイルベースの特性を前提に描画命令を組み立てているのはこのためです。
「モバイルGPUは帯域律速」「TBDRはタイルをオンチップで完結させ外部書き戻しを最小化」「Deferredとは可視性判定を遅延させ見えるピクセルだけ塗ること」「レンダーパスの分割と半透明はオンチップの利点を崩す」の4点を構造として言えるようにしておくと、パフォーマンス設計や面接で強い説明ができます。オーバードローが「なぜ」重いのかを、帯域とシェーディング回数の両面から答えられるかが差になります。
まとめ
モバイルGPUの設計は、電力・メモリ帯域・発熱という制約への合理的な適応です。タイルベース遅延レンダリング(TBDR)は、レンダーターゲットをタイルに分割し、各タイルの処理を高速なオンチップメモリ上で完結させてから外部フレームバッファへ一度だけ書き戻すことで、最も高価な外部メモリアクセスを削ります。ジオメトリ処理でタイルごとにプリミティブを仕分け、ラスタライズ段でEarly-ZやHSRにより隠れたフラグメントのシェーディングを省く二段構えが、オーバードローの帯域コストを抑えます。一方でこの利点はレンダーパス単位で成立するため、不要なパス分割・中間ターゲットの再読み込み・半透明の重ね張り・タイルメモリ容量の超過は、いずれもオンチップ完結を崩して外部帯域を浪費し、フレーム時間と消費電力を同時に悪化させます。フレーム全体の予算配分は 起動と描画のパフォーマンス最適化、GPU負荷が電池に及ぼす影響の測り方は 電力プロファイリング と合わせて捉えると、原理から実測までが一本の線でつながります。
モバイル開発の記事ガイド
モバイルGPUとタイルベース描画を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
モバイル開発
比較で見る軸
難易度: advanced / カテゴリ: モバイル開発 / タグ数: 6
導入後に効く点
描画は幾何処理(ジオメトリ)とピクセル処理(ラスタライズ)の2フェーズに分かれ、可視性判定(HSR/Early-Z)で隠れたピクセルのシェーディングを省くことでオーバードローの帯域コストを抑える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- モバイル開発
- タグ数
- 6
判断チェックリスト
- 自社の用途が「モバイル開発 / GPU」に近いか確認する。
- 強みである「モバイルGPUの主流はタイルベース遅延レンダリング(TBDR)で、画面を小さなタイルに分割し、各タイルをGPU内部の高速なオンチップメモリ上で完結させてから一度だけ外部メモリへ書き戻す。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。