Compositing(コンポジティング)とは何か、レイヤーと動作原理

著者: IT Sectr 公開日: 2026-06-12 読了時間: 10 分

Compositing(コンポジティング)とは、複数の視覚レイヤー(layers)を1つの最終画像に結合するプロセスです。Apple Core Animation ドキュメント(2025年)によると、モバイル開発ではコンポジティングはUIレイヤーの重ね合わせ、3Dレンダリングとインターフェースの結合、アニメーションの作成に使用されます。Compositingは描画順序、透明度、レイヤー間の色のブレンドを制御します。

重要なポイント

  • Compositing — 個別の視覚レイヤーを最終画像に結合すること。
  • Alpha blending — レイヤーの透明度を考慮した主要なブレンドアルゴリズム。
  • GPU compositing — ROPブロックのブレンド操作を通じてGPU上で実行。
  • Core Animation(iOS)とHWUI(Android) — モバイルOSのコンポジティングシステム。
  • 最適化は60 FPSでのスムーズなUIとアニメーションに不可欠。

コンポジティングとは?

Compositingはグラフィックスパイプラインの最終段階であり、個別にレンダリングされたすべてのレイヤー(3Dシーン、UI要素、ビデオ、システムインターフェース)を画面表示のために1つの画像に結合します。各レイヤーは独自の色、透明度(alpha)、位置、スタッキング順序を持つことができます。

モバイル開発の文脈では、コンポジティングはユーザーインターフェースにとって重要です。ウィンドウ、ボタン、テキスト、アイコン — これらすべての要素は1つのシーンにコンポジットされます。コンポジティングシステムは描画順序(z-order)、半透明要素の正しい重なり、UI状態間の遷移アニメーションを管理します。

グラフィックスパイプラインにおけるコンポジティング

グラフィックスパイプラインでは、すべてのシェーダーパスとラスタライゼーションが完了した後にコンポジティングが行われます。GPUはフレームバッファから完成したレイヤーを取得し、ブレンド操作を適用して、結果をディスプレイに送信するためにメインフレームバッファ(フロントバッファ)に書き込みます。

コンポジティングの仕組み

Compositingは異なるレイヤーからの色をピクセル単位でブレンド(blending)します。出力画像の各ピクセルは、重ねられたレイヤーのピクセル色に基づいて、透明度(alphaチャンネル)と選択されたブレンドモードを考慮して計算されます。

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)透明度を含む標準的な重ね合わせ
Additivesrc + dst発光効果、パーティクル
Multiplysrc * dstシェーディング、影
Screen1 - (1 - src) * (1 - dst)明るくする、ハイライト
Premultiplied Alpha(src.rgb * a) + dst * (1 - a)パフォーマンス(実行時の乗算なし)

Premultiplied Alpha

Premultiplied alphaモードでは、色チャンネルがalphaチャンネル(RGB × A)で事前に乗算されて保存されます。これにより、各ブレンド操作での乗算の必要性がなくなり、コンポジティングが高速化されます。Premultiplied alphaはiOS Core AnimationとAndroid HWUIでのGPUコンポジティングの標準形式です。

モバイルOSでのコンポジティング

各モバイルオペレーティングシステムには、そのハードウェアプラットフォームに最適化された独自のコンポジティングシステムがあります。モバイルOSでのCompositingはユーザーインターフェース全体のレンダリングを担当します。

iOS: Core Animation + Metal

iOSでは、コンポジティングはCore Animationによって管理されます — MetalまたはOpenGL ES上で動作する高レベルシステムです。Core Animationはレイヤーツリー(layer tree)を作成し、それが最終画像にコンポジットされます。Core Animationは自動的にどのレイヤーが変更されたかを判断し、変更されたレイヤーのみを再描画します(インクリメンタルコンポジティング)。これによりGPU負荷が最小限に抑えられます。

Android: SurfaceFlinger + HWUI

Androidでは、コンポジティングはSurfaceFlingerによって実行されます — さまざまなアプリケーションやシステムUIからのサーフェスを結合するシステムサービスです。SurfaceFlingerはHWC(Hardware Composer)を使用して、コンポジティング作業の一部をディスプレイコントローラーの専用ハードウェアにオフロードします。

コンポジティングのパフォーマンス

コンポジティングのパフォーマンスは、特に複雑なアニメーションや多数の半透明レイヤーの重ね合わせにおいて、モバイルアプリケーションで一般的なボトルネックです。追加のレイヤーごとに、メモリからのピクセルの読み取り、ブレンド、書き込みが必要になります。

パフォーマンスに影響する要因

  • レイヤーの数 — 各レイヤーには個別のブレンドパスが必要です。レイヤー数を減らすとコンポジティングが線形に高速化します。
  • レイヤーの解像度 — 高解像度のレイヤーは処理されるピクセル数を増加させます。可能な限り最小のオフスクリーンバッファサイズを使用してください。
  • 透明度とオーバードロー — 半透明レイヤーは下層のピクセルを読み取る必要があり、帯域幅が増加します。
  • CPUコンポジティング — CPUでコンポジティングが行われる場合(ソフトウェアレンダリング)、パフォーマンスが劇的に低下します。GPUコンポジティングが常に優先されます。

GPUコンポジティング vs CPUコンポジティング

現代のモバイルデバイスは、特殊なブレンドユニットを介してGPU上でコンポジティングを実行します。GPUコンポジティングは並列ROPユニットとテクスチャフィルターを使用して高速なピクセルブレンドを実現します。CPUコンポジティングは稀なケース(古いデバイス、テスト)でのみ使用されます。

コンポジティングの最適化

コンポジティングの最適化はモバイルインターフェース開発における主要なタスクの1つです。UIの滑らかさ(60 FPS)はレイヤー結合の効率に直接依存します。

主な最適化手法

  • レイヤーの最小化 — プリレンダリングによる静的レイヤーの1つへの結合(layer flattening)。
  • 不透明レイヤー — 不透明レイヤーはalpha blendingが不要で、コンポジティングを大幅に高速化します。
  • インクリメンタルコンポジティング — シーン全体ではなく変更されたレイヤーのみを再描画(Core Animationで使用)。
  • Hardware Composer — GPUを介さないハードウェアコンポジティングのためのHWCの使用。

プロファイリングツール

コンポジティングのパフォーマンス分析には、Core Animation Profiler(Xcode Instruments) — レイヤー数とコンポジティング頻度を表示、GPU Debugger(Android Studio) — GPU負荷とオーバードローを表示、Overdraw Visualization — ピクセルの繰り返し再描画領域を示すデバッグツールを使用します。

よくある質問

コンポジティングを簡単に言うと何ですか?

コンポジティングは、複数の透明シートに描かれた図を1つの絵に重ね合わせるようなものです。各シートがレイヤー(ボタン、背景、テキスト)であり、透明度によってレイヤーが互いにどのように透けて見えるかが決まります。

レンダリングとコンポジティングの違いは何ですか?

レンダリング — 各レイヤーのコンテンツを作成すること(ボタンの描画、3Dモデルのテクスチャリング)。コンポジティング — 透明度とスタッキング順序を考慮して、完成したレイヤーを最終画像に結合すること。

コンポジティングはiOSのパフォーマンスにどのように影響しますか?

Core AnimationはMetalを介してGPU上でレイヤーをコンポジットします。多数の半透明レイヤー(オーバードロー)またはCPUコンポジティング(オフスクリーンレンダリング)で問題が発生します。診断にはCore Animation Profilerを使用してください。

AndroidのHardware Composerとは何ですか?

Hardware Composer(HWC)は、GPUに負荷をかけずにコンポジティングを実行するディスプレイコントローラーのハードウェアモジュールです。HWCはハードウェアで最大4〜8レイヤーを結合でき、消費電力を削減し、GPUを他のタスクに解放します。

コンポジティングの負荷を減らすには?

静的レイヤーを結合し(layer flattening)、可能な場合は不透明色を使用し、オフスクリーンバッファサイズを減らし、シーン全体の再コンポジションを引き起こす不必要なアニメーションを避けてください。

まとめ

  • Compositing — すべての視覚レイヤーを最終的な画面画像に結合する最終段階。
  • Alpha blending — 透明度(RGBA)を考慮した主要な色ブレンドアルゴリズム。
  • Premultiplied alpha — 不要な乗算を排除する標準的なGPUコンポジティング形式。
  • Core Animation(iOS)とSurfaceFlinger(Android) — モバイルOSのコンポジティングシステム。
  • 半透明レイヤーの数 — コンポジティングのパフォーマンスに影響する主な要因。
  • Hardware Composer — GPUなしでコンポジティングを行うAndroidのハードウェアブロック。
  • 最適化にはlayer flattening、不透明レイヤーの使用、インクリメンタルコンポジティングが含まれます。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください