我正在使用Ogre3D及其合成器。在後處理中模糊一點的最快方法
基本上,我想知道什麼是最快的方式來模糊視口中動態點周圍的一切。該點由2D屏幕座標給出。從這一點開始像素越遠,應該越模糊。 爲了讓你瞭解它應該有多少模糊,如果模糊點恰好在屏幕中間,邊緣應該最大程度地模糊。因此,一個像素的模糊係數可以被認爲是
MIN( (normalizedDistanceBetween(像素,blurringPoint)/0.5), 1.0)
所以我假設正確的方式去就是先使用着色器的場景完全模糊的版本。那部分我已經。
現在,如何將這個模糊的圖像與原始場景混合?我看到兩種方式:
- 將原始和模糊版本輸入到合成器着色器,讓它計算上述公式的距離和結果,並使用結果混合。
- 設置一個額外的渲染到紋理通道,它將使用上述公式來渲染「混合紋理」。重點在於混合紋理可以比屏幕小得多,即使是16x16,結果也不會有太大差異。然後,將原始場景,模糊版本和混合紋理輸入到最終的合成器着色器,該混合紋理器將簡單地從每個像素的混合紋理中採樣一個值,並將其用於將兩個場景版本混合在一起。
第二種方法是否有意義?它會比第一個有明顯的性能增益嗎? (即使是幾個fps?)或者是否通過不爲每個輸出像素計算(相當簡單)距離函數來創建額外的RTT通過和紋理來減輕所有性能?我假設屏幕尺寸是正常的,如1024x768,即比16x16混合紋理大得多。或者還有其他更簡單的方法嗎?