概念页
泛光与镜头光晕
Bloom & Lens Flare
镜头光晕是光经镜头系统或眼睛的间接反射等非预期路径产生的现象;泛光 (bloom) 是镜头和眼睛中的散射在亮光周围形成辉光、并降低其他地方对比度。显示器亮度有限,加入这些眩光效果可以暗示更高的亮度。实现上,光晕常用随光源位置变化的公告板或对亮部做图像处理,泛光则是"提取亮部 → 降采样模糊 → 加回原图"(RTR4 12.3 节)。
物理现象
- 眼睛中的光晕主要有光环 (halo) 和睫状冠 (ciliary corona):光环由晶状体晶体结构的径向纤维造成,外缘偏红、内缘偏紫,视大小与光源距离无关;睫状冠来自晶状体密度起伏,表现为从一点放射出的光线,可能超出光环。
- 相机镜头内部反射/折射还会产生次级效果:光圈叶片造成多边形图案;挡风玻璃上的细小沟槽会拉出光条。
- 泛光:镜头和眼睛散射造成;摄像机中 CCD 电荷位饱和溢出到邻位也会产生。光环、冠和泛光统称眩光效果 (glare)。
- 相机技术进步(遮光罩、增透膜)使这些伪影越来越少,但现在常被数字化地加入照片;在影视和游戏中几乎成了陈词滥调,但巧妙使用能给出强烈视觉线索。
镜头光晕的实现
- 随光源变化:King 用一组不同纹理的方块,排在从屏幕上光源位置经过屏幕中心的直线上;光源远离中心时方块小而透明,靠近时变大变不透明。
- 遮挡衰减:
- Maughan 用 GPU 计算屏幕上面光源的遮挡,生成单像素强度纹理衰减光晕;
- Sekulic 把光源画成一个多边形,用遮挡查询得到可见像素数;为避免 GPU 等待 CPU 读回造成停顿,结果下一帧再用——亮度变化连续可预测,延迟一帧几乎察觉不到;
- Gjøl 与 Svendsen 在光晕区域按螺旋模式采样深度缓冲 32 次,在绘制光晕几何的顶点着色器中完成,避免遮挡查询的延迟。
- 光条:画半透明公告板,或对亮像素做后处理滤波。《GTA V》用一组纹理公告板。Oat 用可导向滤波 (steerable filter):沿给定方向累加纹素,在宽高各四分之一的降采样图上用乒乓缓冲做两遍即可得到可信光条。
- 基于图像处理:Mittring 提取亮部、降采样并模糊到多张纹理,再复制、缩放、镜像、着色后合成。任何亮部(高光、自发光、火花粒子)都能产生光晕,但美术无法单独控制每个光源的外观。
- 其他:Wronski 讨论 1950 年代电影设备带来的变形宽银幕光晕;Hullin 等追踪光线束为鬼影建立基于镜头设计的物理模型,可在精度与性能间权衡;Lee 与 Eisemann 用线性模型免去昂贵预处理。
- 《巫师 3》的太阳光晕:先用高对比度校正曲线分离出未遮挡的太阳部分,再以太阳为中心做一串径向模糊(每次作用于上一次输出,每遍样本少但结果平滑),全部在半分辨率下完成,最后加性合成到原图。
泛光的实现
主要流程如下图:
flowchart LR A["HDR 场景图像"] --> B["亮度通过滤波<br/>保留亮像素, 暗像素置黑"] B --> C["降采样到 1/2–1/8 并多级"] C --> D["可分离两遍模糊"] D --> E["缩放颜色后加到原图"] E --> F["色调映射"]
上图描述的是书中图 12.9 的组合:亮部提取并降采样、两遍模糊,再与原图相加并做色调映射。
- 模糊通常用高斯,但与参考照片对比发现分布更像尖峰形。
- 亮度通过 (bright-pass) 滤波在过渡点常有混合或缩放。只有少数小物体泛光时,可计算屏幕包围盒限制模糊和合成范围。
- 低分辨率(宽高的 1/2 到 1/8)既省时又放大滤波效果;多次降采样并从多级重采样,可以低成本得到更宽的模糊。注意单个亮像素在屏幕上移动时可能某些帧没被采样到而闪烁。
- 加性混合让颜色饱和直至变白,通常正是想要的;alpha 混合可给美术更多控制。
- 用 HDR 图像滤波代替阈值效果更好;也可分别计算低、高动态范围泛光再合成以表现不同现象;把上一帧结果加到当前帧,会让运动物体拖出辉光拖尾。
LearnOpenGL 的视角:MRT 提亮 + 分离高斯 + HDR 合成(Advanced Lighting / Bloom)
来源:Bloom;摘录 Advanced Lighting — Bloom。Bloom ≠ HDR,但 HDR 阈值更好调。
流程:场景写入双颜色附件(MRT:layout(location=0/1) + glDrawBuffers)→ 亮度 dot(rgb, 0.2126/0.7152/0.0722) 超阈值进亮缓冲 → ping-pong 分离高斯(水平/垂直交替,教程 5 抽头权重复多次)→ 亮模糊加到场景 HDR → 再曝光 tone map + gamma。
阈值可 >1(HDR)才不易把雪地等误判为全亮。模糊质量直接决定光晕观感;引擎侧可换更大核/多尺度(Epic 等)。与 后处理体积与效果(UE)同属提亮抽离+模糊族。
出处
- realtime_rendering_4ed.pdf 第 12 章 Image-Space Effects
- Advanced Lighting — Bloom
- learnopengl.com/Advanced-Lighting/Bloom
相关页面
图形学图像处理与后处理Image Processing & Post-Processing后处理是在渲染出图像后再用 GPU 对其做图像处理:把离屏缓冲当纹理,用全屏 pass 让像素着色器(或计算着色器)对每个像素采样邻域并加权求和。核心技巧包括可分离滤波、利用双线性插值减少采样、降采样、以及借助深度/法线保持边缘的(联合)双边滤波(RTR4 12.1 节)。图形学色调映射Tone Mapping色调映射把场景参考的辐射亮度转换为显示参考的辐射亮度,目标不是恒等复现、也不是把所有信息"挤进"显示范围,而是在显示条件下尽量复现观看原场景时的感知印象。它通常是曝光缩放加一条 S 形曲线(全局映射),之后可做调色;最后由显示编码输出到 SDR 或 HDR 显示器。图形学景深Depth of Field相机在给定设置下只有一段深度范围清晰,范围外的物体越远离越模糊。实时渲染默认是完美对焦的针孔相机,所以"景深"指对近景和远景做模糊。实用算法从单张图像出发,按深度算出每像素的弥散圆半径,分离近景与其余部分分别模糊再合成;"边收集边散布"和对高亮像素单独溅射散景是游戏中的常见做法(RTR4 12.4 节)。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。图形学雾与简易体积光照Fog & Simple Volumetric Lighting这类"老派"技巧依赖经验模型,但至今仍然好用:深度雾、高度雾和局部雾体积用透射率混合雾色;光柱可用拉伸的面向相机粒子、单次散射的解析积分、平面切片,或屏幕空间径向模糊实现(RTR4 14.2 节)。游戏开发 · UE5后处理体积与效果Post Process Volumes & EffectsUE 的后处理效果(调色、色调映射、泛光、曝光、景深、运动模糊等)通过后处理体积 (Post Process Volume) 或相机设置来指定,即使关卡里没有体积,引擎也有默认的后处理设置。多个体积重叠时按优先级 (Priority) 覆盖,用混合半径 (Blend Radius) 和混合权重 (Blend Weight) 平滑过渡;Infinite Extent (Unbound) 让体积作用于整个场景。图形学光与物质的交互Light-Matter Interaction光是电磁横波;它与物质交互的核心是散射(振荡的电场带动电荷振荡、再辐射出新波)和吸收。粒子的大小决定散射特性,均匀介质用复折射率描述,表面是折射率的突变界面,把光分为反射和折射;折射进物体的光经次表面散射后部分射出。散射距离与着色尺度的比较决定能否把次表面散射当作局部的漫反射项。本页对应 RTR4 9.1–9.2 节。图形学着色方程与经典光照模型Shading Equation & Classic Lighting ModelsGEA 把渲染方程在两条简化假设下化成的求和式称为着色方程:只有理想化的点光源和方向光,间接光只用一个环境光项粗略近似。配上 Lambert、Phong、Blinn-Phong 这类简单 BRDF,它给不出照片级真实感,但能产生可信的画面,是早期游戏的全部光照,也是理解 BRDF 用法的最好入门(GEA4 卷 II 12.4、12.5.1)。图形学延迟着色Deferred Shading延迟着色先用一遍几何 pass 把所有可见表面的材质参数写入多张渲染目标(G-buffer),再以后处理方式对这些存储值逐光源计算光照,从而把"几何可见性"与"光照"彻底解耦,并把材质与光源分离。它避免了着色的过度绘制、简化了着色器管理、天然适合贴花,但 G-buffer 占用显存和带宽,且难以直接支持透明和 MSAA。本页也覆盖前向渲染下限制光源影响范围的基础手段与"光照预通道 (light prepass)"类混合方案。游戏美术镜头与相机瑕疵Lens & Camera ImperfectionsDinur Ch10(光学特征)+ Ch18(合成侧施加):散焦/景深与 Bokeh、畸变、色差、光晕与衍射尖刺、运动模糊、颗粒等——正是「像照片」而非「像眼睛」的关键。算法细节见图形学;本页列该有哪些瑕疵、何时克制。游戏美术GTA V 的 Glow 与镜头光晕GTA V Glow & Lens FlaresGAT 82:GTA V 夜间红绿灯等小光源——高 HDR 自发光 + 按通道独立的色调映射保持饱和芯,外加双层旋转公告板模拟眼内眩光纹理与微动,并在关闭后处理 Bloom 时仍作回退。游戏美术Doom 3 体积光晕Doom 3 Volumetric GlowGAT 33:Doom 3 灯具周围的「体积」光晕——美术只放简单多边形并挂材质,运行时用(疑似顶点色)网格按视角折叠展开形成光圈;仅在正对光源时绘制并随角度淡出。偏 glare(看不见光源则消失),而非持续 haze。