运动模糊
Motion Blur
运动模糊可看作时间域的抗锯齿:快门打开期间物体或相机的相对运动在画面上拖出模糊,没有它快速运动的物体会在帧间"跳跃"。实时做法以速度缓冲为核心,用"边收集边散布"思路:按瓦片求最大速度、扩展到邻域,再沿速度方向对每个像素采样并处理遮挡。游戏中还需考虑玩家控制下的视角,常只对物体或平移做模糊(RTR4 12.5 节)。
为什么需要
- 电影 24 FPS 却不显卡顿:影院暗、眼睛对暗光闪烁不敏感,放映机每帧重复显示 2–4 次,最重要的是每帧本身带运动模糊(快门在每帧 1/24 秒中打开 1/40 到 1/60 秒)。快门 1/500 秒以下会产生《角斗士》《拯救大兵瑞恩》那种"超动感"效果。
- 没有模糊的快速物体在帧间跳过许多像素,是时间上的混叠。提高帧率不能消除对运动模糊的需要,就像提高分辨率不能消除锯齿。带运动模糊的 30 FPS 往往比没有的 60 FPS 好看。
- 模糊取决于相对运动:相机静止时运动物体模糊;相机跟拍物体时物体清晰、背景模糊。
累积与艺术化方法
- 在快门时段内多次渲染(重新摆放相机和物体)并混合;实时中会严重降低帧率,物体快时还能分辨出各个分离图像(频闪)。随机光栅化可把鬼影换成噪点。
- 只想"暗示运动"时:在高精度缓冲中累加 8 帧,每新帧加入新渲染并减去最早一帧,得到滑动 8 帧和,代价是每帧渲染两次。
按运动来源分类(由易到难)
| 来源 | 方法 |
|---|---|
| 相机朝向变化 | 世界可视作包围观察者的天空盒;整图沿某方向以速度决定宽度的滤波采样,称线积分卷积 (LIC),也用于流体可视化;绕视轴旋转用圆形模糊 |
| 相机位置变化 | 有视差,远处物体移动慢模糊少;前进时可忽略视差用径向模糊并夸张(《刺客信条》) |
| 横移 (pan) | 深度缓冲决定模糊量,越近越模糊 |
| 前进等一般相机运动 | Rosado:把像素屏幕位置和深度反算到世界坐标,再用上一帧相机变换回屏幕,两者之差即速度向量;合成物体可四分之一分辨率渲染以省像素处理并滤除采样噪点 |
| 物体独立运动 | 需要逐像素速度,见下文 |
注:电影术语里 pan 指相机原地左右转,侧移叫 truck,竖直移动叫 pedestal。
几何化方法
直接建模模糊本身:运动粒子画成线段;挥剑时在刀刃前后沿边加两片多边形,逐顶点 alpha 从刀刃处不透明渐变到外缘全透明,模拟刀在快门期间只覆盖这些像素一部分时间。只适用于简单模型,纹理和高光也该被模糊;早期按运动方向扩展几何的做法很昂贵。
速度缓冲与重建
- 速度缓冲:顶点着色器对模型同时应用上一帧和当前帧的模型矩阵,求位置差并变换到屏幕空间,插值得每像素速度。Wronski 讨论了速度缓冲与时间抗锯齿的结合,《毁灭战士》(2016) 也这样做。
- 理论上把每个样本沿它在本帧中的路径拉伸成半透明线段并排序绘制:快样本覆盖面积大、每处影响小;样本越多,前后缘呈现平滑透明渐变。
- 与景深一样,单帧图像缺少所需全部数据,会产生伪影。
McGuire 等提出、Sousa 与 Jimenez 发展的流程:
flowchart LR A["颜色 + 深度 + 速度缓冲"] --> B["Pass 1: 每个 8×8 瓦片求最大速度"] B --> C["Pass 2: 每瓦片查看 3×3 邻域取最大<br/>让快速物体影响到相邻瓦片"] C --> D["Pass 3: 每像素沿主速度方向采样邻域<br/>深度判断可见性, 混合前景"] D --> E["估计内侧区域缺失的背景并合成"]
上图概括三遍处理:先按瓦片找出可能影响该区域的最快运动,再在最终 pass 中沿该方向采样重建。
- 最大速度小于半个像素就不需模糊;否则沿最大速度方向采样。遮挡很重要:静止物体后面的快速物体不应把模糊渗到它上面;邻居样本深度与本像素足够接近才视为可见。
- 被模糊物体有三个区域:不透明区(始终被覆盖);外侧模糊区(原图中有背景可供混合);内侧模糊区(原图只有前景,背景缺失),用邻域中非前景样本滤波估计背景——有估计总比没有好。
- 改进:采样位置随机抖动半像素以避免鬼影;外侧区域的真实背景也稍加模糊,避免与内侧估计背景的突兀断层;像素运动方向与 3×3 瓦片主速度不同时换用其他滤波方式 (Guertin 等)。
其他组合
- Andreev 用速度缓冲和运动模糊在 30 FPS 帧之间插值,得到等效 60 FPS。
- 把速度向量与弥散圆结合成统一模糊核,同时处理运动模糊与景深。
- Munkberg 等用随机与交错采样低采样率渲染景深和运动模糊,再快速重建。
游戏中的取舍
- 玩家直接控制视角,纯相机式运动模糊可能不合适:第一人称射击中有人觉得旋转模糊分散注意力或致晕。《使命召唤:高级战争》起提供去除相机旋转模糊的选项,美术在游戏中关闭旋转模糊、过场开启,但保留平移模糊来表现奔跑速度。
- 可用艺术指导做真实相机做不到的事:飞船进入视野而玩家没转头时,标准运动模糊会让飞船模糊;如果假设玩家眼睛会追踪它,就应该模糊背景、保持飞船清晰。
- 眼动追踪和更高帧率可能改进或取代运动模糊,但它带来电影感,也可表现生病、眩晕,应用起来"既是科学也是艺术"。
GEA 的视角(卷 II 12.7.2、12.5.12.1)
GEA 把运动模糊列为全屏后期效果:渲染屏幕空间速度向量缓冲,用这个向量场有选择地模糊图像,模糊本身用卷积核实现(GEA 推荐 Dale A. Schumacher 在 Graphics Gems 中的离散卷积平滑与锐化一文)(卷 II 12.7.2)。《杀戮地带 2》的 G-buffer 就含有一张屏幕空间二维运动向量,专门用于运动模糊(卷 II 12.5.12.1)。这与本页「速度缓冲与重建」的思路一致,GEA 没有展开瓦片化最大速度、重建滤波等细节。
GPU Gems 的视角:深度重建速度场的后处理运动模糊(GPU Gems 3 第 27 章)
来源:Gilberto Rosado《Motion Blur as a Post-Processing Effect》;摘录 Chapter 27. Motion Blur as a Post-Processing Effect — Gilberto Rosado。与上文 RTR4 速度缓冲/瓦片最大速度对照:本章强调无需改全场景着色器的相机运动模糊。
传统做法要么多遍画速度,要么 MRT 让所有材质输出速度——侵入大、带宽高。Rosado 用深度纹理:把像素视口坐标(xy∈[-1,1],z=深度,w=1)乘当前 VP 逆矩阵再除 w,得到世界坐标;再乘上一帧 VP,与当前视口位置作差得到速度。沿速度方向对颜色缓冲多次采样平均即模糊。近处模糊强、远处弱,符合透视。静态场景只反映相机运动;动态刚体需另写速度图(当前/上一帧变换差)。赛车等可用遮罩保护车辆清晰。同一「深度→世界」技巧也可做景深与雾后处理。
出处
- realtime_rendering_4ed.pdf 第 12 章 Image-Space Effects
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.5.12.1、12.7.2 节
- Chapter 27. Motion Blur as a Post-Processing Effect — Gilberto Rosado
- developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-27-motion-blur-post-processing-effect