中EN
概念页

景深

Depth of Field

相机在给定设置下只有一段深度范围清晰,范围外的物体越远离越模糊。实时渲染默认是完美对焦的针孔相机,所以"景深"指对近景和远景做模糊。实用算法从单张图像出发,按深度算出每像素的弥散圆半径,分离近景与其余部分分别模糊再合成;"边收集边散布"和对高亮像素单独溅射散景是游戏中的常见做法(RTR4 12.4 节)。

物理背景与控制

  • 模糊程度与光圈大小和焦距有关:缩小光圈加大景深但进光减少。白天户外光足、光圈小,景深大;昏暗室内景深明显变窄。因此可以把景深与色调映射挂钩(光线越暗失焦越模糊),也可由美术手动控制焦点以营造戏剧效果。
  • 累积缓冲:在镜头上移动视点、保持焦点不变,多次渲染求平均,会收敛到正确的参考结果(适合测试);光线追踪在光圈上变化眼睛光线位置也能物理正确。交互应用里太贵,但它给出了"每个像素应该记录什么"的思考框架。
  • 三个区域:焦点附近的对焦区(中景,失焦不到半个像素,即摄影所说的景深)、更远的远景、更近的近景。

早期方法

  • 2.5D 分层:通过调整近/远裁剪面分别渲染近景、对焦、远景三层,模糊近、远层后从后往前合成。物体跨层时会从模糊突然变清晰,且每层内模糊程度一致,不随距离变化。
  • 弥散圆 (circle of confusion):表面上一个小点失焦后在像素网格上扩散为实心圆。
  • 散景 (bokeh):失焦区域的美学质量。透过光圈的光多为均匀分布而非高斯;形状取决于光圈叶片数量和形状:廉价相机呈五边形,多数新相机七片,高端九片以上,圆角叶片使散景更圆;夜景光圈大更接近圆形。游戏有时故意渲染六边形散景暗示真实相机,而六边形恰好容易用可分离两遍模糊实现。

散布 vs 收集

方式做法取舍
散布(前向映射)每个近/远景像素渲染一个大小等于弥散圆的精灵,分层累加平均后逐层合成不符合像素着色器并行模式;即使降采样也慢,且耗时随焦深变化,难以管理帧预算
收集(反向映射)假设像素邻域深度相近,按深度决定弥散圆,即采样范围,对每个像素模糊符合 GPU 纹理采样;需处理近景边缘等问题

单视点图像本来就缺失其他视点能看到的表面,只能尽量利用已有的可见样本 (Pesce)。

Bukowski 等的收集方法

  1. 由深度为每个像素生成有符号弥散圆半径(可由相机参数推导,也可由美术指定近/对焦/远范围);符号表示近景或远景,−0.5<r<0.5-0.5<r<0.5 视为对焦(半像素模糊算清晰)。
  2. 按半径把图像分成"近景"和"其余"两张,各自降采样并用可分离滤波两遍模糊。分开是为了让近景物体边缘也模糊:若按半径模糊并输出到单张图,跨过前景轮廓进入对焦区时采样半径突降为 0,前景对周围像素的影响突然截断,形成锐利边缘。近景图每像素还带一个同样被模糊的 alpha 混合因子。分离时使用联合双边滤波等测试,例如远景模糊时丢弃明显更远的邻居。
  3. 合成:按弥散圆半径在原始清晰图和远景模糊图间线性插值(半径越大越多用模糊结果),再用近景 alpha 覆盖混合到上面,使近景模糊内容自然扩散到后方场景。

只需颜色和深度、三个后处理 pass,简单稳健;粒子和透明(每像素多个深度)会有问题。"按弥散圆采样 + 近远场分离"是许多景深算法的共同主题。

边收集边散布 (scatter as you gather)

  • 理想模型:把每个像素变成强度与面积成反比的弥散圆,按深度排序混合覆盖当前像素的所有圆。利用场景最大弥散圆半径,检查该半径内每个邻居的圆是否覆盖当前像素,再排序混合——但 GPU 上排序太贵。
  • 做法:找出会散布到本像素的邻居;深度最小的覆盖邻居代表较近图像,与其深度相近的邻居的 alpha 贡献累加平均,存入"前景层"(无需排序);其余覆盖邻居同样平均存入"背景层"。前景/背景层并不对应近/远景,而是每个像素区域各自找到的内容;最后前景合成到背景上。配合各种采样与滤波技巧可以很高效(Jimenez、Sousa、Sterna、Courrèges 等的实现)。

其他方法

  • 热扩散:把图像视为向外扩散的热分布,弥散圆代表导热率,对焦区是完美绝热体。一维热扩散可写成三对角矩阵,每样本常数时间求解,适合计算着色器按轴分解;但仍需按深度分层处理可见性,且几乎无法处理弥散圆的不连续,如今基本只是历史。
  • 高亮散景:灯光或镜面反射的弥散圆即使被摊开仍明显亮于周围,高对比度更清楚地暴露光圈形状;其余像素形状不重要("bokeh"一词有时被误用来专指这些亮斑)。检测高对比度区域,只把这些少数亮像素渲染为精灵,其余用收集方法,兼顾散景形状与效率。计算着色器还可构建高质量求和面积表用于收集景深,并高效溅射散景。
  • 其他探索:随机光栅化、光场处理等。

GEA 的视角(卷 II 12.7.2)

GEA 只用一句话描述景深:用深度缓冲的内容调整每个像素的模糊程度,作为全屏后期效果实现(卷 II 12.7.2)。这对应本页按深度计算弥散圆大小的基本思路;散景形状、散布与收集等细节 GEA 没有讨论。

PBRT 的视角:薄透镜模型与弥散圆公式(PBRT 4e 5.2.3)

上文 RTR4 从后处理出发,弥散圆半径"可由相机参数推导"但没给公式;PBRT 给出离线渲染器里物理正确的做法,正好补上这一推导。

薄透镜与高斯透镜公式

针孔不可实现,而且孔越小进光越少、曝光越长,又会带来运动模糊;真实镜头用有限光圈把光聚到胶片上,代价是只有对焦平面上的点清晰。薄透镜近似把光学系统看作一片球面透镜,厚度远小于曲率半径:平行于光轴的光线汇聚到焦点,透镜到焦点的距离即焦距 ff。采用透镜坐标约定:透镜在 z=0z=0,场景在 −z-z 一侧(注意与 pbrt 相机空间看 +z+z 不同),胶片一侧的距离加撇号。高斯透镜公式:

1z′−1z=1f(式 5.1),z′=fzf+z(式 5.2)\frac1{z'}-\frac1z=\frac1f\quad(\text{式 5.1}),\qquad z'=\frac{fz}{f+z}\quad(\text{式 5.2})

z=−∞z=-\infty 时 z′=fz'=f。对焦就是调节透镜到胶片的距离。

弥散圆直径

对焦在 zfz_f(胶片在 zf′z'_f)时,深度 zz 的点成像于 z′z',在胶片上形成直径 dcd_c 的弥散圆。由相似三角形 dlz′=dc∣z′−zf′∣\frac{d_l}{z'}=\frac{d_c}{|z'-z'_f|},再代入高斯公式:

dc=∣dl (z′−zf′)z′∣=∣dl f (z−zf)z (f+zf)∣d_c=\left|\frac{d_l\,(z'-z'_f)}{z'}\right|=\left|\frac{d_l\,f\,(z-z_f)}{z\,(f+z_f)}\right|

dcd_c 与透镜直径 dld_l 成正比;dld_l 常用 f 数 nn 表示:dl=f/nd_l=f/n。弥散圆小于像素间距的深度范围看起来都清晰,即景深。本页按书中图 5.13 的参数(f=50f=50 mm、光圈 25 mm、对焦 1 m)用上式计算:

物距0.25 m0.5 m0.8 m1.25 m2 m∞
dcd_c (mm)3.951.320.330.260.661.32

可见模糊相对对焦面不对称:焦前增长得比焦后快得多(0.5 m 处已与无穷远处一样模糊),这正是书中图 5.13 想说明的。后处理景深若把弥散圆写成深度差的线性函数,就会丢掉这种不对称。

光线追踪中的实现

在半径为光圈半径的圆盘上采一点(SampleUniformDiskConcentric(),附录 A.5.1)作为光线原点;穿过透镜中心的光线方向不变,所以先求针孔光线与对焦平面的交点 t=focalDistance/dzt=\text{focalDistance}/d_z,再让新光线从透镜采样点指向该交点。对焦平面上的物体无论采到透镜哪一点都汇聚到同一点,因而清晰。代价是需要大量样本:书中风景场景用 2048 spp 才平滑,4 spp 时颗粒感明显。这与上文"累积缓冲 / 在光圈上变化眼睛光线位置能物理正确"的说法一致。透镜光线微分也按同样方法处理偏移一个像素的光线。

GPU Gems 的视角:实用后处理景深(GPU Gems 3 第 28 章,Infinity Ward)

来源:Earl Hammon Jr.《Practical Post-Process Depth of Field》(Call of Duty 4);摘录 Chapter 28. Practical Post-Process Depth of Field — Earl Hammon Jr. (Infinity Ward)。与上文 RTR4 收集/散布、PBRT 薄透镜并列:这是游戏向、强调近景弥散圆连续的工程方案。

物理上近景 CoC 无上界、增长更快,所以近景轮廓必须糊出剪影。纯 Poisson 收集(Scheuermann)背景好看但近景轮廓仍锐;「把散射倒成收集」又贵又有振铃。IW 的做法:把近景 CoC 本身高斯模糊并降到 1/4 分辨率,再用 D=2max⁡(D0,DB)−D0D=2\max(D_0,D_B)-D_0 在边界取较大直径,最后再小模糊抹平拐角——等于强行用模糊消灭近景/焦点之间的不连续。

可变模糊不是海量泊松点,而是在「未模糊 / 17-tap 小模糊 / 中模糊 / 大模糊」之间分段线性插值;艺术上用分段线性「深度→模糊半径」曲线,并可关掉近或远段。第一人称武器与世界用两套近景参数(负深度标记武器像素)。代价约每像素 9.6 次纹理读取,1024×768 上约 1–1.5 ms(X1900/7900)。已知折中:焦点物体会渗到失焦背景;近景半径过大时整屏像被抹糊;半透明大致忽略,多数情况可接受。

  1. realtime_rendering_4ed.pdf 第 12 章 Image-Space Effects
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.7.2 节
  4. PBRT 4e source excerpt: chapter 05 (Cameras and Film)
  5. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 5 章 5.2.3 节,pbr-book.org/4ed/Cameras_and_Film
  6. Chapter 28. Practical Post-Process Depth of Field — Earl Hammon Jr. (Infinity Ward)
  7. developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-28-practical-post-process-depth-field

相关页面

图形学图像处理与后处理Image Processing & Post-Processing后处理是在渲染出图像后再用 GPU 对其做图像处理:把离屏缓冲当纹理,用全屏 pass 让像素着色器(或计算着色器)对每个像素采样邻域并加权求和。核心技巧包括可分离滤波、利用双线性插值减少采样、降采样、以及借助深度/法线保持边缘的(联合)双边滤波(RTR4 12.1 节)。图形学运动模糊Motion Blur运动模糊可看作时间域的抗锯齿:快门打开期间物体或相机的相对运动在画面上拖出模糊,没有它快速运动的物体会在帧间"跳跃"。实时做法以速度缓冲为核心,用"边收集边散布"思路:按瓦片求最大速度、扩展到邻域,再沿速度方向对每个像素采样并处理遮挡。游戏中还需考虑玩家控制下的视角,常只对物体或平移做模糊(RTR4 12.5 节)。图形学泛光与镜头光晕Bloom & Lens Flare镜头光晕是光经镜头系统或眼睛的间接反射等非预期路径产生的现象;泛光 (bloom) 是镜头和眼睛中的散射在亮光周围形成辉光、并降低其他地方对比度。显示器亮度有限,加入这些眩光效果可以暗示更高的亮度。实现上,光晕常用随光源位置变化的公告板或对亮部做图像处理,泛光则是"提取亮部 → 降采样模糊 → 加回原图"(RTR4 12.3 节)。图形学色调映射Tone Mapping色调映射把场景参考的辐射亮度转换为显示参考的辐射亮度,目标不是恒等复现、也不是把所有信息"挤进"显示范围,而是在显示条件下尽量复现观看原场景时的感知印象。它通常是曝光缩放加一条 S 形曲线(全局映射),之后可做调色;最后由显示编码输出到 SDR 或 HDR 显示器。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。图形学对象空间与纹理空间着色Object- & Texture-Space Shading对象空间/纹理空间着色把着色计算的频率与几何采样(光栅化)的频率解耦:在物体的参数化(纹理图表)上计算着色并存入纹理,最终光栅化时只查表。思想源自 Pixar 的 Reyes 离线渲染器的微多边形着色。它能消除 quad 过度着色、按屏幕覆盖率控制着色量、在帧间复用着色结果,甚至让着色以低于光栅化的帧率异步运行;代价是物体必须有唯一的 uv 图表、先着色后遮挡带来浪费等。图形学VR 渲染注意事项VR Rendering Considerations在单屏上效果良好的渲染技术,放到随头部移动的双目显示上可能失效甚至引起不适。本页汇总 RTR4 第 21.4 节列出的需要修改或避免的技术:HUD 深度、凹凸与视差贴图、公告板与天空盒、色调映射与屏幕空间效果、镜面高光视差、抗锯齿选择、色带、运动模糊与景深,以及混合现实中的光照匹配。核心原则:严格遵循厂商头部模型和投影矩阵,任何会让两眼图像难以融合或与前庭感觉冲突的效果都要谨慎。游戏开发 · UE5TSR 与抗锯齿方案Temporal Super Resolution & Anti-AliasingUE5 提供四种抗锯齿:时间超分辨率 (Temporal Super Resolution, TSR,默认)、时间抗锯齿上采样 (TAAU)、快速近似抗锯齿 (FXAA) 和仅前向渲染可用的多重采样抗锯齿 (MSAA)。TSR 是与平台无关的时间性上采样器,用低内部分辨率渲染,借助历史帧累积细节输出接近原生的画面,把节省的 GPU 时间留给 Nanite 与 Lumen。图形学天空盒与固定视点技术Skyboxes & Fixed-View Techniques用图像代替三角形时,渲染代价与像素数而不是顶点数成正比。Lengyel 的"渲染谱系"从纯图像方法一直排到三角形和光线追踪。本页汇总谱系中偏图像一端的技术:限制视点移动的固定视点加速、渐进细化与重光照、天空盒、光场渲染以及精灵与分层(RTR4 13.1–13.5 节)。游戏开发 · UE5后处理体积与效果Post Process Volumes & EffectsUE 的后处理效果(调色、色调映射、泛光、曝光、景深、运动模糊等)通过后处理体积 (Post Process Volume) 或相机设置来指定,即使关卡里没有体积,引擎也有默认的后处理设置。多个体积重叠时按优先级 (Priority) 覆盖,用混合半径 (Blend Radius) 和混合权重 (Blend Weight) 平滑过渡;Infinite Extent (Unbound) 让体积作用于整个场景。图形学光与物质的交互Light-Matter Interaction光是电磁横波;它与物质交互的核心是散射(振荡的电场带动电荷振荡、再辐射出新波)和吸收。粒子的大小决定散射特性,均匀介质用复折射率描述,表面是折射率的突变界面,把光分为反射和折射;折射进物体的光经次表面散射后部分射出。散射距离与着色尺度的比较决定能否把次表面散射当作局部的漫反射项。本页对应 RTR4 9.1–9.2 节。游戏美术曝光与相机模拟Exposure & Camera Simulation现以第 3 版 Ch6「Cameras and Exposure」为准。 覆盖光圈/景深、快门/运动模糊、感光度与颗粒、摄影曝光(互易律、Zone System、直方图、EV、包围曝光),以及镜头瑕疵匹配。物理灯光(IES)必须配合理曝光才可信。游戏美术镜头与相机瑕疵Lens & Camera ImperfectionsDinur Ch10(光学特征)+ Ch18(合成侧施加):散焦/景深与 Bokeh、畸变、色差、光晕与衍射尖刺、运动模糊、颗粒等——正是「像照片」而非「像眼睛」的关键。算法细节见图形学;本页列该有哪些瑕疵、何时克制。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原