博客 / 詳情

返回

【URP】Unity[後處理]運動模糊MotionBlur

【從UnityURP開始探索遊戲渲染】專欄-直達

Motion Blur 概念與作用

Motion Blur(運動模糊)是一種模擬真實相機在拍攝快速移動物體或自身移動時產生的模糊效果的後處理技術。它通過模糊圖像中運動物體的軌跡,增強動態場景的真實感和速度感。

在遊戲開發中,Motion Blur 主要有以下用途:

  • 增強速度感和動態效果,特別是在賽車、動作類遊戲中
  • 彌補低幀率帶來的不流暢感,使30幀畫面看起來更平滑
  • 增加電影感和沉浸式體驗
  • 模擬真實相機的物理特性,提高場景真實度

發展歷史

Motion Blur 技術的發展經歷了幾個階段:

  • 幀模糊Frame Blur‌:早期最簡單的實現方式,通過混合當前幀與前一幀圖像來模擬模糊效果。這種方法簡單但不夠真實,無法對不同物體應用不同程度的模糊。
  • 位置重建Position Reconstruction‌:通過深度緩衝區重建屏幕空間位置,結合前一幀的變換矩陣計算像素位移。這種方法適合靜態場景的相機運動模糊。
  • 速度緩衝Velocity Buffer‌:現代主流方法,為每個像素存儲運動矢量信息,根據速度方向進行模糊處理。URP和HDRP都採用這種實現方式。
  • 優化算法‌:如UE4採用的velocity flatten和tile gather/scatter技術,通過分塊處理提高性能。

URP 中的實現原理

URP 中的 Motion Blur 實現基於速度緩衝技術,核心流程如下:

  • 記錄前一幀的觀察矩陣和投影矩陣
  • 計算當前幀與前一幀相同位置的位置差,得到速度方向
  • 沿着速度方向進行多次採樣,混合結果產生模糊效果
  • 通過質量參數控制採樣次數,平衡性能與效果

URP 的實現相比傳統方法更加輕量,主要針對相機運動模糊進行了優化。

Unity URP中的MotionBlur(運動模糊)效果通過模擬真實相機在曝光時間內物體快速移動或相機自身運動導致的圖像模糊現象實現。其核心原理基於速度緩衝區和歷史幀混合技術

物理原理基礎

運動模糊源於現實相機曝光期間物體位置變化導致的像素累積效應。當快門開啓時,快速移動的物體會在傳感器上留下連續軌跡,表現為模糊效果。在URP中,這一過程通過計算物體或相機在相鄰幀間的運動矢量(Velocity Buffer)來模擬。

技術實現流程

  • 速度緩衝區生成

    URP通過渲染物體的運動矢量到緩衝區,記錄每個像素在屏幕空間中的位移。這需要啓用"Motion Vectors"選項,並依賴深度紋理重建世界座標。例如,Shader中會使用當前幀與上一幀的視圖-投影逆矩陣(_InverseVPMatrix_PreInverseVPMatrix)計算像素位置變化。

  • 模糊計算

    採用多采樣點混合策略:根據速度矢量方向,對當前像素及其鄰近像素進行加權平均。採樣數(Sample Count)和質量預設(Quality)直接影響模糊平滑度和性能消耗。示例公式如下:

    S(t)=(1−α)⋅x(t)+α⋅S(t−1)

    其中α控制歷史幀權重,較低值(如0.1)會產生更長拖尾效果。

  • 性能優化

    • 鉗制參數Clamp‌:限制相機旋轉產生的最大速度值(默認0.05,屏幕比例),避免極端位移導致性能下降。
    • 強度控制Intensity‌:0-1範圍調節模糊程度,實際通過縮放速度矢量長度實現。

示例配置步驟

在URP中啓用運動模糊需通過Volume系統:

  1. 創建Volume對象並添加Motion Blur覆蓋。
  2. 關鍵參數設置示例:這會產生強烈但受控的模糊效果,適合高速運動場景。

    Quality: High
    Intensity: 0.8
    Clamp: 0.1

與HDRP實現差異

URP僅支持相機運動模糊,而HDRP還支持物體獨立運動模糊,並能分離處理旋轉/平移分量(通過Camera Clamp Mode)。兩者均依賴體積系統,但HDRP提供更細粒度的速度閾值控制(Minimum/Maximum Velocity)。

完整實現可參考GitHub上的URP運動模糊Shader工程,其中包含世界座標重建和線性深度處理等關鍵技術點

完整 URP 實現示例

URP Motion Blur 設置步驟

項目準備

  • 確保項目使用URP管線
  • 創建URP Asset(如果尚未創建)
  • 在Edit > Project Settings > Graphics中分配URP Asset

啓用後處理

  • 在URP Asset的Renderer列表中找到使用的Renderer
  • 勾選"Post-processing"選項

相機設置

  • 選擇主相機
  • 在Inspector中勾選"Post Processing"

添加Volume

  • 在場景中創建空GameObject
  • 添加Volume組件
  • 點擊"New"創建Profile
  • 在Profile中添加Motion Blur效果

調整參數

  • 根據需要調整Quality、Intensity和Clamp參數
  • 測試不同場景下的效果表現

參數詳解與實際用例

URP Motion Blur 的主要參數及其應用場景

Quality(質量)

  • 含義‌:控制效果的質量級別,影響採樣次數和精度
  • 取值範圍‌:低/中/高/自定義
  • 用例‌:移動平台建議使用"低"或"中",PC平台可使用"高"

Intensity(強度)

  • 含義‌:控制模糊效果的強度
  • 取值範圍‌:0(無模糊)到1(最大模糊)
  • 用例‌:賽車遊戲高速移動時可設為0.8-1.0,一般場景0.3-0.5

Clamp(鉗制)

  • 含義‌:限制相機旋轉產生的最大速度長度
  • 取值範圍‌:0-0.2(屏幕比例)
  • 用例‌:防止快速旋轉相機時產生過度模糊,默認0.05適合大多數情況

Sample Count(採樣數)

  • 含義‌:計算模糊時的採樣點數(僅在自定義質量時可用)
  • 取值範圍‌:通常4-32
  • 用例‌:高質量效果需要更多采樣,但性能消耗更大

實際應用建議

性能優化‌:

  • 在移動設備上,使用較低的質量預設和強度值

藝術控制‌:

  • 通過調整參數創造不同的視覺效果,如:

    • 輕微模糊(強度0.2-0.3)增強電影感
    • 強烈模糊(強度0.8-1.0)表現極速運動

場景適配‌:

  • 根據場景運動幅度調整參數,靜態場景可完全禁用

組合效果‌:

  • 與其他後處理效果如Bloom、Chromatic Aberration組合使用,增強整體視覺衝擊

【從UnityURP開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.