簡單的運動模糊效果實現
阿新 • • 發佈:2019-01-04
當一個物體快速移動的時候, 人眼會感覺它變模糊. 同樣的現象在電影和照片上也存在. 產生這種現象的原因是人眼並不是無限快地接收資訊的, 而是每隔一段很短的時間” 擷取” 一幅畫面。如果物體移動的速度超過了人眼捕獲畫面的速度, 那麼物體會呈現條紋效果.
瞭解現實世界中的效果有助於我們用計算機去實現它. 理想的方法是判斷每個畫素在相鄰兩幀之間移動的速度, 跟據這個資訊再來進行處理. 這個方案是可行的, 但是有點複雜. 另一種方法就是將當前幀的畫面跟上一幀的畫面進行混合, 並不考慮物體的移動速度. 這只是一種近似效果, 並在如今的視訊遊戲中得到了廣泛的應用.
實現運動模糊螢幕效果有兩方面的目的: 一是為了模擬現實中的運動模糊 二是它可以減輕渲染中的鋸齒效果, 特別是在硬體不支援反鋸齒的情況下, 這是一個廉價的替代方案.
實現原理:
1.先將場景渲染到一個RenderTarget1上
2.將RenderTarget1跟上一幀渲染的結果進行混合, 並輸出到RenderTarget2
3.將RenderTarget2輸出到螢幕, 並將其保留到下一幀進行混合
詳見下圖:
Shader實現
快速拖動物體, 可以看到效果了^_^:
兩個Pass
Teapot Pass將場景正常渲染到BaseSceneRT上.
BlurPass進行混合, 輸出到BluredRT, 注意同時這裡BluredRT做為Texture1輸入上一幀的結果所以設定在渲染時不進行清除操作.
混合時需要一個比例值blur_factor進行插值, 在這裡我設定為0.5
PixelShader程式碼:
sampler2D |