~下の画像をクリックすると、リアルタイムに絵画調でレンダリングするアニメーションが見られます。Table:エリア総和テーブル)は、とても面白い技法です。画面全体を平均化してぼかすような操作が簡単に行なえます。SATの順当な使い道は被写界深度ですが、それでは月並みなので別のネタを考えてみました。今回のプログラムは、次のものです。(絵画調レンダリング:DirectX9)まぁ、いつものように適当にファイルが入っています。出力されるフレームワークのファイルは紹介を省かせていただきます。アプリケーションのソースあと、実行ファイル、モデル及び、プロジェクトファイルが入っています。■何やってるの?単純なSATの手法はぼかすだけですが、少し応用するだけで、ぼかし方を変化させられます。この和は全てのテクセルに関して同じ重みで平均を取っています。この式を一般化することを考えると、その1つとして、全てのテクセルの重みを変えてサンプリングすることが考えられます。cab係数cijは、自由に決めることができますが、今回は乱数をテクスチャに仕込んだものを使います。SATを使って、回りのテクセルをサンプリングするときに、非常に少ないテクセルの影響しか受けません。そのテクセルの色になります。ひとつの色が広がった絵画風の画像になります。サンプリングする範囲が狭すぎると、その中にあるテクセルの数が0になって、計算する分母が発散するので、注意が必要です。そのようなピクセルは値が不定になるので、次のような絵になります。実際の方法ですが、普通にレンダリングした画像と、乱数をマッピングしたテクスチャを用意しておきます。色成分にレンダリングした画像と乱数を乗算した画像を入れ、アルファ成分に乱数を格納します。次にエリア総和テーブルを作成します。これは、前にやったように横に和をとった後に、縦に和を取ります。後は、色成分とアルファ成分でエリア総和テーブルの計算をした後に、色成分をアルファ成分で割って平均値を求めます。■プログラムそれでは、シェーダプログラムを見ていきましょう。テクスチャの合成とエリア総和テーブルの横方向の合成は同時に行います。頂点シェーダで対応するテクセルとその左側のテクセルをテクスチャ座標に指定します。中心のテクセルに乗算することによって元の色と乱数の乗算を計算します。アルファ成分への乱数の格納を自然に行います。}縦方向の合成はエリア総和テーブルの普通の作成方法になります。頂点シェーダで中心とその上のテクセルを指定します。}ピクセルシェーダでは、単純にその2つを足します。}最後の合成では、エリア総和テーブルの式を使って、アルファ成分と色成分を計算して、色成分のほうはアルファ成分で割って、ピクセルの値を求めます。}■最後にエリア総和テーブルの応用をしてみました。積分計算ができるので、かなりのポストエフェクトが実行できそうですね。誤差による縞模様が見えています。エリア総和テーブルを使う時は、この縞が見えないように調整するのが大事になるでしょう。もどるimagire@gmail.com。