bloom — 明部を滲ませて足す
明るい部分だけを抜き出して、それをぼかして、元の絵に足し戻す。明部の周りに淡い暈(halo)が広がって、発光しているように出る。
bloom は明部抽出・ぼかし・加算合成の三段で組む。光は重なるほど明るくなるので、halo を元の絵に混ぜるのでなく足す。ぼかしは中心が重く外が軽い釣鐘型のガウシアンが使われ、横方向の 1×n と縦方向の n×1 の二段に分けて適用できる(分離可能フィルタ)ので、3×3 平均を何回か重ねても軽い。HDR レンダリングでは輝度がしきい値を超えた成分だけを bloom に回す。
動く塊で明るさの場を作る。各塊は中心ほど明るく、外へ向かって減衰する。その明るさが 0.6 を超えたセルだけを 1 に倒したのが明部マスクで、下では塊の芯を ink で、背景の明るさをそのまま濃淡で重ねている。
0.6 のしきい値が明部の輪郭を切る。上げると芯が痩せ、下げると塊全体が芯に飲まれる。塊が動くと芯の位置も場の上を移る。
この芯のマスクをぼかすと halo になる。3×3 の平均を横一回・縦一回の二段に分けて、passes の回数だけ重ねる。一回の平均で輪郭が一マスぶん滲み、繰り返すほど暈が広がる。下はぼかした halo だけを濃淡に塗っている。
passes を 1 にすると暈が芯のすぐ際までしか広がらず、3、5 と上げるほど淡く遠くまで滲む。芯のあった所がいちばん明るく、外へ向かって連続して暗くなる。
halo を元の絵に足し戻すと bloom になる。暗い背景に halo を加算で重ね、芯は ink のまま上に置く。芯が明るいぶんだけ周囲が押し上がって、塊が発光しているように出る。
芯の周りに淡い暈がにじみ、塊どうしが近づくと halo が重なってその間がいっそう明るい。glow[i] * 0.9 の係数を上げると発光が強まり、Math.min(0.7, ...) の上限が halo の明るさの天井を決める。明部抽出・ぼかし・加算という三つの部品の合成で発光が立つ。