中EN
概念页

屏幕空间反射

Screen-Space Reflections

屏幕空间反射 (SSR) 沿反射方向在深度缓冲中步进求交,命中后从颜色缓冲读取入射辐射亮度。由于镜面瓣窄、只需反射方向附近的光,屏幕数据比漫反射情况更可能包含所需信息。它最早由 Sousa 等提出,常作为镜面 GI 的第一层,失败时退回反射探针和全局探针(RTR4 11.6.5 节)。

基本算法

  • 已知着色点位置、视线和法线,沿反射视线逐步前进,把点投影到屏幕取 z-buffer 深度;若光线点比深度缓冲表示的几何更远,说明进入几何内部,记为命中,读取对应颜色。隐含假设被击中表面是朗伯的(常见近似,实践中很少成问题)。
  • 世界空间等步长较粗糙,命中后可在有限距离内二分搜索精确定位。

屏幕空间 DDA 步进

McGuire 与 Mara 指出:透视投影下世界空间等步长在屏幕上分布不均,近处欠采样会漏掉命中,远处过采样重复读取同一像素。改为把光线起止点投影到屏幕,用画线的数字微分分析器 (DDA) 逐像素检查,精度均匀。透视投影下深度缓冲存的视空间深度倒数在屏幕上线性变化,可预先求其对屏幕 x、y 的导数,沿线线性插值直接与深度缓冲比较,无需每像素重建视空间深度。

光泽反射

  • 基本形式只追踪一条光线,只能做镜面,而 PBR 管线更常需要光泽反射。
  • 经验做法:仍只追踪反射方向一条光线,结果写入离屏缓冲,再用一系列滤波核(常结合降采样)生成不同模糊程度的反射缓冲,按 BRDF 瓣宽度选取。屏幕空间滤波不考虑不连续、表面朝向等,只是粗略近似,最后还要用启发式让它和其他镜面来源匹配,但效果可信。
  • 随机 SSR (Stachowiak):把 SSR 视为光线追踪做蒙特卡洛积分,按 BRDF 重要性采样随机发射光线;半分辨率、每像素 1–4 条光线。邻近像素共享交点:若从 p0p_0 沿 d0d_0 打到 i0i_0,假设从 p1p_1 发出经过 i0i_0 的光线也会无遮挡地打到 i0i_0,于是直接复用,只需按当前像素 BRDF 的概率密度调整其贡献。再加时间滤波,并把与场景无关的积分部分离线存进以 BRDF 参数索引的查找表。所需信息都在屏幕内时,可得到接近路径追踪参考的无噪结果(微表面模型特有的竖直拉伸)。

性能

  • 反复、不连贯地读取深度缓冲,缓存利用差、等待内存造成停顿,需精心优化;通常降分辨率计算并用时间滤波补偿。
  • 层次深度缓冲 (Uludag):逐级 2×2 降采样,高层像素存四个子像素的最小深度。追踪时若在当前格未命中,前进到格边界并换到更粗一级;若命中,前进到命中点并换到更细一级;在最高分辨率命中时结束。长距离追踪不会漏掉特征又能大步前进,读取集中在局部邻域,缓存友好。
flowchart TD
  S["在当前层级测试所在格"] --> Q{"命中?"}
  Q -->|"否"| A["前进到格边界, 换更粗一级"] --> S
  Q -->|"是"| B{"已是最细层级?"}
  B -->|"否"| C["前进到命中点, 换更细一级"] --> S
  B -->|"是"| E["结束: 得到交点"]

上图即层次追踪循环:空区域大步跳过,接近表面时逐级细化。

  • 不追踪的方案:Drobot 复用与反射代理的交点位置去查屏幕空间辐射亮度;Cichocki 假设平面反射体,反过来做全屏 pass,让每个像素把自己的值写到它应被反射到的位置。

局限与组合

  • 光线常在命中前离开屏幕,或打到背面(没有光照信息),相邻像素的有效性也可能不同,需优雅处理;可用空间滤波部分填补空洞。
  • 深度缓冲只有一层,不知道物体厚度,光线从表面背后穿过时无法判断是否命中。Cupisz 讨论了低成本缓解办法;Mara 等的深度 G-buffer 存多层数据。
  • SSR 擅长平坦表面上附近物体的局部反射,显著提升实时镜面质量但不是完整方案。常见分层:SSR 为第一层 → 不可靠时退回局部反射探针 → 无探针区域用全局默认探针,得到一致、稳健、可信的间接镜面。
  1. realtime_rendering_4ed.pdf 第 11 章 Global Illumination

相关页面

图形学局部反射探针Localized Reflection Probes镜面全局光照需要高角分辨率但只关心反射方向附近的小立体角。实时中最流行的方案是在场景中稀疏放置局部环境贴图(反射探针),配合反射代理体做视差校正;它实现简单、快、美术可控,但有拉伸和漏光问题。另有体素锥追踪和平面反射等替代方案(RTR4 11.6–11.6.4 节)。图形学环境光遮蔽Ambient Occlusion环境光遮蔽 (AO) 是余弦加权后半球上未被遮挡的比例,用来在光照缺乏方向变化时仍给出形状线索(缝隙变暗)。它由 Landis 在 ILM 为《珍珠港》开发,可离线烘焙,也可在物体空间或屏幕空间动态计算(SSAO、HBAO、GTAO 等)。AO 适合漫反射和平滑环境光,不适合点光源或小面光源的可见性(RTR4 11.3 节)。图形学深度缓冲Z-Buffer深度缓冲是几乎所有图形硬件用来解决可见性的算法:为每个像素存一个当前最近图元的深度值,新片元更近才写入颜色和深度。它简单、和图元数量成线性关系、允许大多数图元以任意顺序绘制,但不能直接处理半透明。图形学基于物理的着色Physically Based Shading基于物理的着色从光与物质交互的物理出发,用 BRDF 和反射方程计算表面沿视线方向射出的辐射亮度:镜面项来自微表面理论与菲涅耳反射,漫反射项来自局部次表面散射,布料、波动光学与分层材质再作扩展。本页是 RTR4 第 9 章的总览,并收录该章第 9.13 节的材质混合与材质过滤(镜面抗锯齿)。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学渲染方程Rendering Equation渲染方程 (Kajiya, 1986) 把"某点接收到的光就是其他点发出或反射的光"写成递归积分,概括了光从光源出发经任意次反弹到达眼睛的所有路径。反射方程是它的受限特例。离线用辐射度 (Radiosity) 或蒙特卡洛路径追踪求解;实时渲染则靠简化和预计算逼近它(RTR4 第 11 章)。图形学时间重投影Temporal Reprojection重投影是在新的视点和朝向下复用前几帧已计算的样本。目的一是利用时间相干把渲染开销摊到多帧(与时间抗锯齿相关),二是当前帧来不及完成时快速生成近似帧(对 VR 防止晕动尤其重要)。分为反向重投影(从上一帧收集)和正向重投影(把上一帧散布到当前帧)(RTR4 12.2 节)。图形学VR 渲染注意事项VR Rendering Considerations在单屏上效果良好的渲染技术,放到随头部移动的双目显示上可能失效甚至引起不适。本页汇总 RTR4 第 21.4 节列出的需要修改或避免的技术:HUD 深度、凹凸与视差贴图、公告板与天空盒、色调映射与屏幕空间效果、镜面高光视差、抗锯齿选择、色带、运动模糊与景深,以及混合现实中的光照匹配。核心原则:严格遵循厂商头部模型和投影矩阵,任何会让两眼图像难以融合或与前庭感觉冲突的效果都要谨慎。游戏开发 · UE5Lumen 全局光照与反射Lumen Global Illumination & ReflectionsLumen 是 UE5 默认的全动态全局光照 (Global Illumination, GI) 与反射系统:先做屏幕空间追踪,未命中再对"Lumen 场景"做软件光追(有符号距离场)或硬件光追,命中点的光照从按网格离线放置的卡片 (Card) 构成的表面缓存 (Surface Cache) 中查询,表面缓存的直接与间接光照分摊到多帧更新,从而得到无限次漫反射弹射和全粗糙度范围的反射。

被这些页面引用1 篇

输入关键词开始搜索

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