残像の実装

残像の実装

グレア効果の一つとして,残像効果を実装します。 実装自体は簡単で,ブルーム効果で利用した高輝度成分をソースとして, 残像用のバッファに一定割合で加算合成を繰り返していくだけで実現できます。

f:id:hikita12312:20171224161009p:plain:w600

1秒あたりに,残像の効果はどれだけ減少するかの因子を{A}と定義すると,以下の式で残像バッファを更新することで残像効果になります。

{ \displaystyle
\begin{eqnarray}
\alpha &=& A^{\Delta t} \\
I_{\mathrm{buffer}}(t+\Delta t) &=& \alpha I_{\mathrm{buffer}}(t) + (1-\alpha)I_{\mathrm{src}}(t)
\end{eqnarray}
}

さらに,残像のソースとなる{I_{\mathrm{src}}}に対して,ColorMatrixによるカラーコレクションを適用します。 色相を180度反転させることで,高輝度カラーの補色の残像を作成することができて, 人間の目で明るいところを見た後に生じる残像のような色合いとなります。

結果

f:id:hikita12312:20171224162423p:plain:w600
f:id:hikita12312:20171224162453g:plain

1フレーム前の結果を補間なしに利用するので,画面が急激に動くと残像のコマ飛び感が激しいです。 ゆっくりカメラが動いている場合には自然な気もするのですが,残像効果の重みは小さいほうが良いかもしれません。 計算負荷は測っていないのですが,残像バッファは1/2サイズの縮小バッファで十分なことと, 単純な2テクスチャの合成処理なので,高速に適用できると思います。