私は Ogre3D を使用しており、それはコンポジターです。
基本的に、ビューポートの動的ポイントの周りのすべてをぼかす最も速い方法は何だろうと思っています。ポイントは 2D スクリーン座標によって与えられます。ピクセルがそのポイントから離れているほど、よりぼやけます。どの程度のぼかしが想定されているかを知るために、ぼかしポイントが画面のちょうど真ん中にある場合は、エッジを最大限にぼかす必要があります。したがって、ピクセルのぼやけ係数は次のように考えることができます。
MIN ( (normalizedDistanceBetween(pixel, blurringPoint)/0.5), 1.0 )
したがって、正しい方法は、最初にシェーダーを使用してシーンの完全にぼかしたバージョンを作成することだと思います。私がすでに持っているその部分。
では、このぼやけた画像を元のシーンとどのようにミックスするのでしょうか? 2 つの方法があります。
- オリジナルとぼかしバージョンをコンポジターシェーダーに入力し、距離と上記の式の結果を計算させ、その結果を使用して混合します。
- 追加の render-to-texture パスをセットアップします。これは、上記の式を使用して「混合テクスチャ」をレンダリングします。これのポイントは、ミキシング テクスチャが画面よりもはるかに小さくてもよいということです。16x16 であっても、結果に大きな違いはありません。次に、元のシーン、ブラー バージョン、ミキシング テクスチャを最終的なコンポジター シェーダーに入力します。最終的なコンポジター シェーダーは、各ピクセルのミキシング テクスチャから値をサンプリングし、それを使用して 2 つのシーン バージョンをミックスします。
2番目の方法は意味がありますか?最初のものよりも顕著なパフォーマンスの向上がありますか? (数 fps でさえ?) または、追加の RTT パスとテクスチャを作成すると、すべての出力ピクセルに対して (かなり単純な) 距離関数を計算しないことによって得られるすべてのパフォーマンスが軽減されますか? 画面サイズは 1024x768 のような通常のもの、つまり 16x16 のミキシング テクスチャよりもはるかに大きいと想定しています。または、他にもっと簡単な方法はありますか?