一、从一个浪漫的瞬间说起想象这样一个画面清晨你站在窗边第一缕阳光穿过窗帘的缝隙照进房间。那束光不是一条生硬的直线而是带着柔和的光晕向四周温柔地晕染开来。灰尘在光柱里飞舞光的边缘朦胧、梦幻、像是会呼吸。你不自觉地举起手机想拍下这一刻——“咔嚓”。照片打开一看光柱消失了光晕没有了那种梦幻的氛围一丝都没拍出来。照片里只剩下一束硬邦邦的白色亮条像有人用美工刀在画面上划了一道。你失望地放下手机“为什么我眼睛看到的画面那么美照出来却这么……普通”恭喜你你刚刚体验了一个困扰摄影师、画家、游戏设计师上百年的难题真实世界中那种光会发光的美感到底怎么才能在画面里重现而今天我们要聊的主角——Bloom泛光就是图形学界给出的最优雅、最浪漫的答案。让我慢慢讲给你听。二、先搞清楚什么是泛光Bloom这个词翻译成中文有很多说法泛光最常用、辉光、光晕、光溢出。它指的是这样一种现象当画面中有非常明亮的光源时光线会在视觉上溢出它本来的边界向周围扩散出柔和的光晕。你在生活中到处都能见到夜晚的路灯周围那圈朦胧的光阳光下金属反光带的柔和光晕烛火摇曳时那一团温暖的光球霓虹灯招牌晕染出的赛博朋克感朝阳/夕阳透过云层散开的金色光辉这种光会向外晕染的效果赋予了画面以真实感和氛围感。没有它画面就是平的、死的、像一张贴纸有了它画面就是活的、亮的、像有生命。三、为什么真实世界会有泛光这是一个有趣的物理问题。理论上光应该沿直线传播到达哪里照亮哪里边界应该清清楚楚才对。但为什么我们看到的光总是带着一圈柔和的晕呢原因有好几个都很有意思。原因1人眼的散射我们的眼球——晶状体、玻璃体、视网膜——这些组织不是完美的透镜。当强光进入眼睛时一部分光会在眼球内部散射照亮本该是暗的视网膜区域让你感觉光变大了。小实验晚上盯着一个明亮的灯泡看几秒然后闭上眼睛你会发现那个光斑在眼前持续了一会儿还带着光晕。这就是人眼散射的证据。原因2相机镜头的散射相机镜头也不是完美的光线穿过多片镜片时部分光线会在镜片表面散射、反射、折射形成各种光斑、光晕、镜头眩光Lens Flare。这就是为什么逆光拍照总会有奇特的光学效果。原因3空气中的散射空气中的水汽、灰尘、悬浮颗粒会让光线向四周散射形成丁达尔效应光柱和周围的光晕。这就是为什么雾天和清晨的光线特别有氛围感。原因4感光元件的溢出数码相机的感光元件CCD/CMOS当某个像素接收到过强的光时电荷会溢出到周围的像素让亮处看起来比实际更大。四、所以泛光不是美化而是真实这是一个反直觉的事实。很多人以为泛光是一种艺术加工是故意把画面弄得很梦幻。但其实泛光是真实世界里光本来的样子。我们的眼睛、相机、大脑早就习惯了亮的地方会发光。所以在游戏和电影里如果不做泛光明亮的光源会看起来**“不像光”整个画面会有一种假的感觉**。这就像如果有一天你看到太阳变成了一个边界清晰的圆形白盘没有光晕、没有刺眼感、没有眩光你会觉得这特么是太阳吗这是一张贴纸吧没有泛光的光根本不像光。五、Bloom算法的核心思路那么游戏引擎和图像处理软件是怎么实现泛光效果的呢核心思路其实非常简单优雅只有三步找出画面里很亮的部分把这些亮的部分模糊开来把模糊后的结果叠加回原画面就这么简单。让我们详细看看每一步是怎么做的。六、第一步提取亮部游戏引擎渲染出来的画面每个像素都有一个亮度值。通常我们会设定一个**“阈值”**Threshold比如说亮度 1.0的像素被认为是很亮的部分。小知识这里的1.0指的是HDR高动态范围空间的亮度。在HDR里亮度可以远超过1.0比如太阳可能是50000。这就是为什么Bloom和HDR是天生一对。没有HDR我们根本没法准确知道什么算很亮。提取亮部后我们会得到一张新的图。这张图里很亮的地方保留原来的颜色其他地方全部变成纯黑这张图就是“亮度遮罩”或“Bloom源图”。它告诉我们“画面里这些地方需要做泛光效果。”七、第二步模糊核心魔法这是Bloom算法最关键的一步我们要把那些亮的部分**“模糊开来**让它们向四周晕染”。用什么模糊最常用的是高斯模糊Gaussian Blur它模拟了自然界中光的散射规律效果是柔和、均匀、自然的。但是有个大问题模糊太贵了要让一个亮点晕染到很远的地方需要的高斯模糊半径会非常大而大半径的高斯模糊计算成本极其高昂。举个例子如果你想做半径50像素的模糊每个像素需要和周围100×100 10000个像素做加权计算整个屏幕几百万像素显卡会直接哭出来。怎么办降采样的智慧聪明的图形学家想出了一个绝妙的办法“先缩小再模糊再放大”。具体来说把Bloom源图缩小到一半1/2分辨率在小图上做较小半径的高斯模糊再缩小到1/4、1/8、1/16……每一级都做模糊最后把这些不同尺度的模糊结果叠加起来这就是著名的“多级金字塔模糊”Pyramid Blur或“双重模糊”Dual Filtering。为什么这样行得通因为小图上的1像素 原图上的多个像素所以在小图上做小模糊 在原图上做大模糊。但计算量指数级减少。天才般的优化进阶版COD现代战争的方案《使命召唤现代战争》2019的开发团队发布了一个著名的Bloom算法它用了13级降采样金字塔巧妙的双线性插值特殊的上采样滤波器。效果极其柔和、自然、电影感拉满并且性能极其优秀。这个算法被广泛认为是目前游戏Bloom的教科书级方案后来的很多游戏都借鉴了它。八、第三步叠加回原画面模糊完成后我们得到了一张柔和发光的图。最后一步就是把它叠加回原始画面最终画面 原画面 Bloom图 × 强度这里的强度是一个可调参数强度大 → 画面梦幻、迷离、赛博朋克感强度小 → 画面真实、克制、电影感不同的游戏有不同的美学选择《赛博朋克2077》强Bloom霓虹四溢未来感《塞尔达旷野之息》中Bloom温暖柔和治愈感《只狼》弱Bloom写实克制肃杀感Bloom的强度就是游戏的性格。九、Bloom的翻车现场虽然Bloom听起来很美但用得不好也会变成灾难现场。翻车1过曝感Bloom强度过大→ 画面白茫茫一片→ 像被人糊了一脸面粉。经典案例2000年代中期的很多游戏Bloom开得过大被玩家戏称为“Vaseline Vision”凡士林眼睛“Bloom Disease”泛光病那个时代的游戏画面看什么都像隔着一层奶油成为了一代玩家的童年噩梦。翻车2光晕错位Bloom算法没做好光晕会和光源对不齐或者出现奇怪的方块状光斑让画面看起来很廉价。翻车3闪烁问题如果场景里有小而亮的物体比如远处的灯泡由于像素采样的关系它有时被检测为很亮有时又没被检测到导致光晕频繁闪烁像鬼火一样吓人。这个问题叫做“Bloom Flickering”是图形程序员的经典噩梦之一。解决方案通常是用HDR Tone Mapping让亮度更稳定用Karis Average等特殊的降采样滤波用**时域抗锯齿TAA**平滑帧间差异十、Bloom的艺术不只是技术Bloom不只是一个技术算法它更是一种视觉语言。不同的Bloom用法讲不同的故事。故事1温暖《风之旅人》里沙漠中的阳光带着柔和的金色泛光让整个画面温暖、治愈、像一首诗。故事2迷幻《赛博朋克2077》的夜之城霓虹灯的强烈泛光晕染整个街道营造出未来感、科技感、危险感。故事3神圣《艾尔登法环》里的黄金树被强烈的金色泛光包裹赋予它神圣、不可侵犯、宿命感。故事4恐怖《寂静岭2》里手电筒的微弱泛光在浓雾中颤抖、闪烁让人毛骨悚然。故事5怀旧《集合啦动物森友会》里夕阳的暖光带着柔和泛光洒在岛屿上让玩家心生眷恋。Bloom是游戏画面的情感放大器。十一、Bloom的兄弟姐妹Bloom并不是孤军奋战它有一个庞大的**“光效家族”经常和它联袂出演**。God Ray神光/丁达尔光阳光透过树叶、云层、窗户时形成的一道道光柱也叫Volumetric Light体积光。Bloom God Ray 神级氛围。Lens Flare镜头眩光模拟相机镜头里的多重反射光斑通常出现在直视太阳或强光源时让画面有电影感。Glow自发光物体本身就带着光晕比如剑刃上的火焰、法师手上的魔法球这种局部Bloom特别适合奇幻和科幻游戏。Chromatic Aberration色差光晕边缘带有红绿蓝的色彩偏移模拟相机镜头的色像差营造复古胶片感。这些效果组合起来构成了现代游戏画面的**“氛围感装备”**。十二、Bloom的进化史让我们简单回顾一下Bloom的发展历程它见证了整个游戏画面技术的进化。远古时代1990s那时的游戏画面是8-bit、16-bit的像素艺术根本没有Bloom的概念只能靠手绘像素来画出光晕的感觉。早期时代2000-2005第一批3D Bloom出现代表作《辐射术士》《孤岛惊魂》《半条命2: Lost Coast》但效果粗糙经常过曝。冷知识Valve在2005年发布的《Half-Life 2: Lost Coast》是第一个全面展示HDR Bloom的游戏Demo当时惊艳了整个游戏界被誉为HDR时代的开篇。滥用时代2005-2010游戏厂商疯狂使用Bloom导致大量游戏**“凡士林眼睛”**玩家苦不堪言。成熟时代2010-2018Bloom算法逐渐成熟强度变得克制成为画面标配而非炫技工具。电影时代2018-至今随着HDR显示器和现代Bloom算法如COD算法的普及Bloom变得极其精致、自然、电影感成为3A游戏画面的灵魂。十三、Bloom 与 HDR 的灵魂CP最后聊聊一个深刻的关系Bloom和HDR是天生一对。为什么这么说因为只有在HDR空间里我们才能真正区分很亮的太阳亮度 50000亮的白纸亮度 1.2普通的灰墙亮度 0.5如果在SDR空间它们最大都只能是1.0我们根本无法准确判断什么该发光什么不该。HDR告诉Bloom“哪里需要光晕”Bloom告诉Tone Mapping“这里有美丽的光”Tone Mapping告诉显示器“用你能力范围内最美的方式呈现它”。三者环环相扣缺一不可。这就是现代游戏画面的**“圣三位一体”**HDR Bloom Tone Mapping十四、写在最后Bloom的浪漫Bloom是一个特别浪漫的技术。它的本质不是为了让画面更真实而是为了让画面更接近我们感受到的世界。因为我们眼中的世界从来不是物理精确的而是带着光晕、带着柔焦、带着情感的。朝阳的光温暖烛火的光温柔霓虹的光迷醉月光的光忧伤。这些感觉物理学解释不了但Bloom可以。Bloom是图形学送给艺术的一份情书它说“世界不只是数学方程世界还是诗是光是情感。”下次当你打开游戏看到夕阳的金色光辉洒在角色脸上路灯的微光晕染在雨夜的街道炉火的暖光摇曳在山洞的岩壁霓虹的迷醉充斥着赛博朋克的天际线——请记得那不只是物理学那是Bloom在跟你说情话。✨它不像光追那样炫技它不像PBR那样硬核它不像TAA那样实用但它是让画面有灵魂的那个魔法。“真实不在于精确而在于动人。”Bloom就是那种让画面动人的技术。当一束光不再是一条直线而是带着柔和的晕它就不再只是光它成了氛围、情感、记忆。这就是Bloom的魔法也是图形学最浪漫的一面。