Compositing(コンポジティング)とは、複数の視覚レイヤー(layers)を1つの最終画像に結合するプロセスです。Apple Core Animation ドキュメント(2025年)によると、モバイル開発ではコンポジティングはUIレイヤーの重ね合わせ、3Dレンダリングとインターフェースの結合、アニメーションの作成に使用されます。Compositingは描画順序、透明度、レイヤー間の色のブレンドを制御します。
重要なポイント
Compositingはグラフィックスパイプラインの最終段階であり、個別にレンダリングされたすべてのレイヤー(3Dシーン、UI要素、ビデオ、システムインターフェース)を画面表示のために1つの画像に結合します。各レイヤーは独自の色、透明度(alpha)、位置、スタッキング順序を持つことができます。
モバイル開発の文脈では、コンポジティングはユーザーインターフェースにとって重要です。ウィンドウ、ボタン、テキスト、アイコン — これらすべての要素は1つのシーンにコンポジットされます。コンポジティングシステムは描画順序(z-order)、半透明要素の正しい重なり、UI状態間の遷移アニメーションを管理します。
グラフィックスパイプラインでは、すべてのシェーダーパスとラスタライゼーションが完了した後にコンポジティングが行われます。GPUはフレームバッファから完成したレイヤーを取得し、ブレンド操作を適用して、結果をディスプレイに送信するためにメインフレームバッファ(フロントバッファ)に書き込みます。
Compositingは異なるレイヤーからの色をピクセル単位でブレンド(blending)します。出力画像の各ピクセルは、重ねられたレイヤーのピクセル色に基づいて、透明度(alphaチャンネル)と選択されたブレンドモードを考慮して計算されます。
各レイヤーには、その不透明度を決定するalphaチャンネル(RGBA色の第4成分)が含まれています。Alpha = 1.0 — 完全に不透明、alpha = 0.0 — 完全に透明。Alpha blendingはピクセル色を前景(source)と背景(destination)レイヤーの色の加重合計として計算します:結果 = source * alpha + dest * (1 - alpha)。
コンポジティングは最も遠いレイヤーから最も近いレイヤーへ(back-to-front)実行されます。最初に背景レイヤーがレンダリングされ、次に各後続レイヤーがその透明度を考慮して前のレイヤーの上に重ねられます。Z-orderはどのレイヤーが上にあり、下のレイヤーを覆うかを決定します。
Compositingはレイヤーの色をどのように組み合わせるかを決定するさまざまなブレンドモード(blend modes)をサポートしています。各モードは異なる視覚効果を生み出し、独自の計算コストがあります。
| モード | 計算式 | 用途 |
|---|---|---|
| Normal (Alpha) | src * a + dst * (1 - a) | 透明度を含む標準的な重ね合わせ |
| Additive | src + dst | 発光効果、パーティクル |
| Multiply | src * dst | シェーディング、影 |
| Screen | 1 - (1 - src) * (1 - dst) | 明るくする、ハイライト |
| Premultiplied Alpha | (src.rgb * a) + dst * (1 - a) | パフォーマンス(実行時の乗算なし) |
Premultiplied alphaモードでは、色チャンネルがalphaチャンネル(RGB × A)で事前に乗算されて保存されます。これにより、各ブレンド操作での乗算の必要性がなくなり、コンポジティングが高速化されます。Premultiplied alphaはiOS Core AnimationとAndroid HWUIでのGPUコンポジティングの標準形式です。
各モバイルオペレーティングシステムには、そのハードウェアプラットフォームに最適化された独自のコンポジティングシステムがあります。モバイルOSでのCompositingはユーザーインターフェース全体のレンダリングを担当します。
iOSでは、コンポジティングはCore Animationによって管理されます — MetalまたはOpenGL ES上で動作する高レベルシステムです。Core Animationはレイヤーツリー(layer tree)を作成し、それが最終画像にコンポジットされます。Core Animationは自動的にどのレイヤーが変更されたかを判断し、変更されたレイヤーのみを再描画します(インクリメンタルコンポジティング)。これによりGPU負荷が最小限に抑えられます。
Androidでは、コンポジティングはSurfaceFlingerによって実行されます — さまざまなアプリケーションやシステムUIからのサーフェスを結合するシステムサービスです。SurfaceFlingerはHWC(Hardware Composer)を使用して、コンポジティング作業の一部をディスプレイコントローラーの専用ハードウェアにオフロードします。
コンポジティングのパフォーマンスは、特に複雑なアニメーションや多数の半透明レイヤーの重ね合わせにおいて、モバイルアプリケーションで一般的なボトルネックです。追加のレイヤーごとに、メモリからのピクセルの読み取り、ブレンド、書き込みが必要になります。
現代のモバイルデバイスは、特殊なブレンドユニットを介してGPU上でコンポジティングを実行します。GPUコンポジティングは並列ROPユニットとテクスチャフィルターを使用して高速なピクセルブレンドを実現します。CPUコンポジティングは稀なケース(古いデバイス、テスト)でのみ使用されます。
コンポジティングの最適化はモバイルインターフェース開発における主要なタスクの1つです。UIの滑らかさ(60 FPS)はレイヤー結合の効率に直接依存します。
コンポジティングのパフォーマンス分析には、Core Animation Profiler(Xcode Instruments) — レイヤー数とコンポジティング頻度を表示、GPU Debugger(Android Studio) — GPU負荷とオーバードローを表示、Overdraw Visualization — ピクセルの繰り返し再描画領域を示すデバッグツールを使用します。
よくある質問
コンポジティングは、複数の透明シートに描かれた図を1つの絵に重ね合わせるようなものです。各シートがレイヤー(ボタン、背景、テキスト)であり、透明度によってレイヤーが互いにどのように透けて見えるかが決まります。
レンダリング — 各レイヤーのコンテンツを作成すること(ボタンの描画、3Dモデルのテクスチャリング)。コンポジティング — 透明度とスタッキング順序を考慮して、完成したレイヤーを最終画像に結合すること。
Core AnimationはMetalを介してGPU上でレイヤーをコンポジットします。多数の半透明レイヤー(オーバードロー)またはCPUコンポジティング(オフスクリーンレンダリング)で問題が発生します。診断にはCore Animation Profilerを使用してください。
Hardware Composer(HWC)は、GPUに負荷をかけずにコンポジティングを実行するディスプレイコントローラーのハードウェアモジュールです。HWCはハードウェアで最大4〜8レイヤーを結合でき、消費電力を削減し、GPUを他のタスクに解放します。
静的レイヤーを結合し(layer flattening)、可能な場合は不透明色を使用し、オフスクリーンバッファサイズを減らし、シーン全体の再コンポジションを引き起こす不必要なアニメーションを避けてください。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。