【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开始探索游戏渲染】专栏-直达

(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)