Post processing

Bloom

ブルーム

明るい部分を周囲へにじませて発光を見せる。

1 / 10

Interactive demo

Preparing the demo…

Bloom

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

画面の中のとても明るい部分から、光を周囲へにじませるポストプロセスです。ネオン、電球、太陽、魔法の光、金属のハイライトなどの周りに光があふれ、「本当に光っている」ように見えます。現実でも、カメラのレンズや人の目の中で強い光は散乱してにじむので、それを画面上で再現しています。

ゲームでの使いどころ

  • 光る物の表現:ネオンサイン、発光する武器、SF の UI、溶岩、魔法陣。
  • 太陽や強い照明:逆光のまぶしさ、窓から差す光、ヘッドライト。
  • エフェクトの華やかさ:爆発、ヒット時の閃光、パーティクル。
  • 雰囲気作り:夢のシーンや回想で、全体をふんわり光らせる。

しくみ

  1. 明るい部分を取り出す:描き終えた画面(HDR、1 を超える明るさを保持したもの)から、しきい値より明るい部分だけを残す。境目をなめらかにする「ソフトニー」を使うと、光り始めが自然になる。
  2. 縮小しながらぼかす:取り出した画像を 1/2、1/4、1/8 … と縮小し、それぞれをぼかす。小さい画像をぼかすと、少ない計算で広い範囲にぼけが広がる。
  3. 足し合わせる:各段のぼけを重ね合わせ、元の画面に足す。細かい段は光る物の近くの鋭い輝き、粗い段は遠くまで届く柔らかいかさを作る。
C=Cscene+k∑iwi⋅bluri(max⁡(Cscene−T,0))C = C_{\text{scene}} + k \sum_i w_i \cdot \text{blur}_i\big(\max(C_{\text{scene}} - T, 0)\big)

HDR で計算することが重要です。明るさを 1 で切り捨ててからしきい値を取ると、白い壁も電球も同じ「1」になり、白い物がすべて光ってしまいます。HDR なら、電球(明るさ 20)と白い壁(明るさ 0.9)を区別でき、本当に強く光る物だけがにじみます。

実装のポイント

  • 発光のマテリアル:光らせたい物は、エミッシブ(発光)の強さを 1 より大きくしておきます。ブルームはそれを拾うだけです。
  • 縮小のしかた:縮小時に単純に間引くと、小さな明るい点がちらつきます。13 タップのダウンサンプル(Call of Duty の手法)などで平均しながら縮小します。
  • トーンマッピングの前に:ブルームは HDR の段階で足し、その後でトーンマッピングとカラーグレーディングをかけます。

つまずきやすい点

  • かけすぎ:画面全体がもやもやして、コントラストが失われます。2000 年代のゲームでよく見られた「まぶしすぎる」画面になります。
  • しきい値 0 の物理ベースブルーム:最近のエンジンでは、しきい値を使わず全体をわずかににじませる(レンズの性質を模した)方式も使われます。その場合、強さを非常に小さくします。
  • ちらつき:画面上で数画素の明るい点(金属の鋭いハイライトなど)は、カメラが動くとブルームがちらつきます。明るさの上限を設けたり、時間方向に平均したりします。

デモで試すこと

  1. 「表示」を「1. 明るい部分」にすると、しきい値を超えたネオンや看板だけが残ります。「2. ぼかした光」は、それを縮小しながらぼかして重ねたものです。
  2. 「ブルームなし」と「完成画像」を比べると、ネオンがただの明るい板から光る管に変わるのが分かります。
  3. 「HDR で計算」をオフにすると、明るさを 1 で切り捨ててからにじませるので、白い柱や球まで光ってしまいます。
  4. 「広がり」を上げると、粗い段の比重が増え、光が遠くまで届きます。

References

Unreal Engine Post Process Effects ↗

A general reference for this subcategory.