写这篇的时候心里其实挺感慨的。接手这个展厅项目时,甲方对接人甩过来一句"我们要求静态烘焙",我当时第一反应是"这要求不简单"——不是技术上难,而是要摸清甲方这句话背后真正想要的是什么。前前后后做了两个月,从初版动态光效换来的一顿批斗,到后期老老实实走烘焙流程拿到验收,中间踩的坑、总结出来的经验,值得好好记一笔。
先说结论:静态烘焙(Static Baking)在UE展厅项目里不是"降级",而是"专业"。尤其当你的目标平台涉及到移动端、网页端或低配电脑展示时,动态光照就是性能杀手。而展馆这种固定视角、固定动线的场景,烘焙光照不仅画质更稳,帧率还更可控。这篇文章我就拿自己的实操过程为主线,把从模型规范到Lightmass参数、再到烘焙排错的全链路经验完整拆一遍。
1. 项目需求拆解:甲方一句"静态烘焙",背后隐藏的信息量
1.1 甲方真正在意的是什么
"静态烘焙"这四个字,大多数甲方其实说不清楚技术细节,他们想要的用大白话翻译是三件事:
- 展厅画面看着高级、通透、真实
- 展示品(展车、珠宝、机械或家具)要有氛围感,光影要漂亮
- 现场跑起来不卡,哪怕是放在展厅角落的老旧一体机上
如果你直接给甲方上一套动态全局光照,光照效果确实灵活,但GPU开销大、调试时间长。尤其展厅场景往往用的是高分辨率显示设备(4K甚至3x1拼接屏),动态光的后处理开销加在一起,降帧是必然的。
静态烘焙的本质,是把光照信息预计算后写入光照贴图。运行时只需要采样贴图,几乎不花GPU。这就意味着同样的硬件配置下,烘焙方案可以上更高的分辨率、更多的贴图细节、更复杂的材质,最终观感反而反超动态方案。这不只是省性能,是把算力花在刀刃上的做法。
1.2 静态烘焙和动态光照的技术差异
为了不误导新手,我先把两个概念讲透:
| 对比维度 | 静态烘焙(Baked Lighting) | 动态光照(Dynamic Lighting) |
|---|---|---|
| 计算时机 | 编辑器内预计算(Lightmass) | 运行时逐帧实时计算 |
| 光照存储 | 写入Lightmap贴图(UV空间) | 无存储,直接实时计算 |
| GPU开销 | 极低,采样贴图即可 | 高,尤其多光源场景 |
| 阴影质量 | 高,可调多次弹射 | 受实时分辨率限制 |
| 场景修改 | 需要重新烘焙 | 改完即生效 |
| 适用场景 | 固定视角/固定光源/高帧率要求 | 动态光源/可破坏场景/开放性世界 |
展厅项目几乎完美匹配左侧那一列。它的优势在于一切可控:灯光位置定了就不动,相机角度不是漫游就是固定机位,连参观动线都是提前设计的。这种"确定性"让烘焙方案如鱼得水。
但我劝你在跟甲方沟通时,别一上来就技术轰炸。我会先给甲方看两份对比图:一份是动态光照随手截的,一份是烘焙后细调的,让甲方自己感受质感差距。等甲方自己说出"这个好看"的时候,再讲性能优势,效率高很多。
2. 开工前的硬规范:模型、UV与材质准备
展厅项目跟游戏关卡有一个明显区别:展厅模型精度要求高,但场景规模相对小。如果你在模型阶段不打好底子,烘焙效果有多少上限,从UV展开那一刻就已经注定了。这一步不是在Lightmass里调的,是在建模软件和UE里确定的。
2.1 模型与UV展开的硬性要求
静态烘焙强依赖光照贴图UV(Lightmap UV)。很多人第一次做烘焙,发现光斑、接缝一大片,八成是在这个环节出了问题。
具体要求整理成清单:
- 模型尽量使用可拼接的模块化网格体(Modular Mesh),方便后期调整展墙、展柜大小,避免整个场景拆碎成几千颗小物体
- 每个静态网格体必须存在第二套UV,即Lightmap UV。这套UV不要贪图全部摊开,而是把面积利用率和接缝数量做平衡
- 展墙、天花、地板这种大面积平面,Lightmap UV的间距(Padding)不能太小,建议至少留4~8个像素的间隔,否则相邻像素采样串色会出现漏光
- 展柜玻璃、金属装饰条等小件物体,分辨率给到128或256足够;主展示背景墙建议给512或1024,这是展厅质感差异的关键
在UE里检查Lightmap UV,可以开Mesh Editor下的UV Overlay预览,直接把第二套UV叠在模型上检查。记得打开Show Texture Density,它会用颜色标识当前分辨率下贴图密度是否均匀。青色代表合理,绿色偏密,红色就是太散。
这套UV标准务必在进引擎之前跟建模的同学对齐,不然后期返工就是一周起跳。项目进行到第四天我才意识到某个主展柜的UV没拆到位,又重新走了一遍建模流程,说实话很不值。
2.2 材质通道与烘焙参数设置
讲材质前先纠正一个误区:静态烘焙不是只烘焙灯光,材质本身也参与计算。如果材质的Metallic、Roughness、Emissive设置不对,烘焙出来就是脏兮兮的一团。
经验值记录如下:
- 墙面涂料、漆面金属这类材质,Metallic的值不要盲目拉满。挂钟漆的金属度大概0.6~0.8,拉满1.0会黑得像煤炭
- Roughness影响间接光照的反弹方式,粗糙度越低,光线反弹越聚焦,烘焙时越容易产生亮点。展柜内壁的Roughness建议保持在0.3~0.5,太低会导致高光点过热
- Emissive(自发光)材质不要寄希望于烘焙自动照亮周围,它本身不产生光照。要模拟灯带效果,需要额外放置不可见光源,或者把材质的
Use Emissive for Static Lighting勾选,让它作为面光源参与烘焙。这个开关在材质细节面板里,合并进烘焙计算,展厅里的LED线灯基本都靠它 - 涉及玻璃、亚克力展罩,注意半透明物体不参与阴影烘焙,会在Lightmap上形成漏光。我的处理方式是单独建一个不透明的"阻挡体"参与阴影计算,再把透明玻璃材质放在上方
这一步做完,先给工程做一次空烘焙(没放任何灯光),目的是检查Lightmap UV有没有明显错误。空烘焙出来的结果如果本身就是花的,那说明贴图UV有问题,先修UV再谈氛围。
3. 核心实操:灯光布置思路与Lightmass参数详解
3.1 展厅灯光布置:暗一点才有氛围
展厅项目最容易犯的毛病是亮度过高。普通游戏场景追求明亮可见,但展厅不一样,它追求的是"被照亮的主角"。灯光本质上是视觉导演的工具。
我在这个项目里的布光思路是:
- 每个展品区域用一个主光(矩形光或聚光灯)打亮主体,亮度设为3000~5000坎德拉(cd),色温偏暖(3200K),模拟射灯效果
- 展品周围补两个辅光,强度只有主光的五分之一,方向从侧后方打来,负责勾勒轮廓
- 空间背景靠一条一条的灯带(Emissive面光源)做氛围光,颜色用偏冷的5000K,和暖色主光形成对比
- 天花板暗藏灯槽,用多个小型矩形光间隔排列,做出连续洗墙效果
特别注意:Static Lighting Only模式下,光的移动、旋转、颜色都不可实时调。所以灯光参数在烘焙前必须基本锁定。我习惯先在Preview下用动态光草排一版布光方案,调好角度、色温、范围,确认视觉效果之后再切换到Static模式,这样可以避免反复全量烘焙。
3.2 Lightmass关键参数与试烘策略
烘焙质量核心在World Settings面板,和Build窗口的Lighting Quality选项。字段比较多,我挑影响最大的几个说。
| 参数 | 推荐值(预览) | 推荐值(最终) | 作用 |
|---|---|---|---|
| Static Light Level Scale | 1.0 | 1.0 | 整体光照强度缩放 |
| Indirect Lighting Quality | 1.0~2.0 | 4.0~6.0 | 间接光弹射次数,越高噪点越少 |
| Indirect Lighting Smoothness | 0.75 | 1.0~2.0 | 间接光平滑度,数值太高会糊 |
| Direct Lighting Quality | 1.0 | 3.0~5.0 | 直接光阴影采样精度 |
| Lightmass Importance Volume | 必须能包住整个场景 | 必须包住且有余量 | 决定烘焙计算范围,不在范围内的物体无光照 |
| Ambient Occlusion | 0.4 | 0.5~0.7 | 接触阴影强度 |
| Environment Color | 根据场景色调 | 根据场景色调 | 模拟环境反射的基础色 |
关于这些参数背后怎么起作用,我拆开说。
Lightmass Importance Volume是把茶几上的计算问题。它定义了一块"Lightmass愿意花算力去算"的区域。如果展墙后方有个小空间忘了包进去,那部分烘焙出来就是黑的。我的经验是:手动在场景边界拖出一个长方体,把展馆内部所有活动动线都包住,然后向外再扩1米。
Indirect Lighting Quality是光源反弹的计算次数(和采样数)。数值越高,光线在墙面、天花、地板之间反弹的场景还原得越准。预览用1.0,可以看到大概的光影趋势,出最终版本前提到4.0以上。代价是烘焙时间指数级上升。
Direct Lighting Quality控制的是直接光照阴影边缘的质量。展厅里的射灯会在墙面投射出硬边阴影,质量太低阴影边缘就会闪烁、有颗粒。做展品打光时,这个参数比间接光更影响美观度。
操作层面的经验是:不要一上来就全质量烘焙。先摆好灯光,用Quality Preview(Low)跑一遍600×600分辨率的预览图,看布局和阴影走向;觉得OK后再用Medium/High跑640分辨率的小图确认材质和氛围;最后才开始High/Production级别的全量构建。每一次全量烘焙少则二十分钟,多则两个小时,全程盯是浪费生命。
顺便提供一个剪时间的小技巧:烘焙过程中把Lightmass的Num Indirect Lighting Bounces临时调低到2,预览图出得飞快,能快速判断布光格局问题。确认没大问题后再把弹射次数拨回4以上出高清版本。
4. 全流程实操记录:从空场景到交付级烘焙
4.1 烘焙前必做的五项检查
成熟的流程离不开"检查清单"这条保命索。每次Build前我至少确认下面五件事,但凡有一样不对,我就不点Build按钮。
- 灯光全部为Static状态:确认Building场景里没有Movable灯。若存在可移动光源,它会强行打开动态管线,画面里可能出现噪点和实时阴影拖影
- Lightmap UV完整:用一个粗略的
Build测试,如果屏幕出现大量红色/绿色色块,那就是Lightmap UV穿插重叠,需要重新调整对应模型的UV - 纹理分辨率:确认每个模型的Lightmap分辨率均大于等于64,展墙至少256,否则近距离观看时Lightmap像素会糊成一片
- Lightmass Importance Volume覆盖整个活动空间
- 材质无报错:尤其要检查有没有某材质误用了
Unlit模式,这种材质不会接受光照,烘焙出来是过曝的纯白色
提示:强烈建议开一个新的Map副本,把场景另存为"_Preview"再跑测试烘焙。正式地图只在最终出包时烘焙一次,避免反复修改History造成不可控问题。
4.2 完整烘焙步骤与时间记录
拿我这个项目的实际操作来说话。场景是某模拟展厅项目X,约450平方米室内空间,包含入口门厅、主展区、下沉展示区、洽谈区和灯光走廊,主展区一台展车,周边有展柜和灯箱。
操作流程:
- 在
Lightmass Importance Volume拖拽一个盒体,包裹所有展示区,离最远模型留出1米空隙 - 打开
World Settings,把Indirect Lighting Quality设为4.0,Direct Lighting Quality设为3.0,Smoothness设1.25 - 打开
Build Lighting Only,选择Quality为Preview,Resolution为640×480,获取预览版本 - 盯着Build进度条,等待Lighmass完成后打开光照模式图层检查漏光,记录问题点
- 逐项修复UV和漏光,重复步骤3,直至预览效果无硬伤
- 最终以Quality为Production,Resolution为1280×960,重新完整构建
同样的场景,Preview档耗时在5分钟左右,Production档直接干到了1小时40分钟。中间一次没看进度,回来发现报错Lightmass has crashed!,查了半天是场景里有几个非流送关卡的动态Spawn物体导致的,剔除后重新构建才通过。
Production级别结束后,打开光照模式查看器(Build菜单下的Lighting Mode),里面会有光照贴图群组信息。我翻了一下统计数据,整个场景共1498个Static Mesh,光照贴图总数1783张,总内存占用273MB。主流一体机和低配PC跑起来毫无压力。
这里给出一张过程中记录的时间表参考:
| 阶段 | 操作 | 耗时 |
|---|---|---|
| 模型UV修正 | 全部展柜、柱体重新展UV | 3个工作日 |
| 材质与灯带布置 | 全场景材质调整,放置Emissive灯带 | 2天 |
| 布光初版 | Preview级别烘焙反复调光 | 1天 |
| 效果细化 | 逐个展品补辅光,调整色调映射 | 2天 |
| 最终烘焙 | Production级别构建与质检 | 1天(含反复) |
5. 那些年踩过的坑:常见报错与画质问题排查
5.1 漏光、黑斑、紫斑的成因与处理
这三个是烘焙最常见的画质问题,处理方法却完全不一样,放在一起讲清楚。
漏光:模型接触面或UV间隙太小导致。比如展柜和地板严丝合缝的情况下,Lightmap会把相接处的像素混淆,墙面底下透出一圈光晕。处理方法是给每个模型设置几毫米的Lightmap Padding,或者把UV空间中间距调大。更粗暴但有效的方法是把相接的两个面拉开0.5~1厘米的真实间隙。
黑斑(Black Spots):间接光照采样次数不够时,在墙角或曲面凹槽位置容易产生暗斑。处理方法是提高Indirect Lighting Quality,同时检查是不是有模型挡住光线路径。我记得展示区背景墙后面忘了放Lightmass Portal,导致墙后区域直接黑掉。对,UE5里还有Lightmass Portal这个好东西,专门用来处理建筑门口和窗口的光线传递,展厅如果没有门只有开放门洞,记得拖一个Portal贴在洞口。
紫斑:通常由烘焙分辨率过高、模型间距过小或者场景内有非预期的Emissive发光导致。如果是展柜里放了自发光灯箱片,那圈紫色是正常的。排查办法是在光照模式里切换到Lightmap Density,紫斑区域对应的UV密度过高时,缩分辨率或放大UV。
5.2 接缝与光影平滑问题
轻量级但破坏观感的当属Lightmap接缝。展墙转角、柱子侧面,经常会出现一条明显分割线。
原因有三种:
- 模型有多个材质ID,导致一个物体被拆成多个Lightmap区域,交界处UV接缝颜色无法连续
- Lightmap UV有镜像或重叠,相邻像素采样阴影参数不一致
Indirect Lighting Smoothness过低,光线的渐变过渡被硬切形变
我的处理顺序是:先检查模型有几套UV,材质ID越少越好,一个物体尽量用1~2个材质ID;再把Lightmap UV的Island合并成尽量少的簇,不要拆碎;最后把Smoothness推到1.5~2.0,柔和掉残留的轻微接缝。如果还不行,就是用Paint工具手动涂抹修复光照贴图的开关,不过我劝你别依赖它——耗时且不可复用。
5.3 烘焙时间爆炸的元凶
场景没变大,但烘焙时间从半小时涨到三小时,这种情况我也碰到过。
排查顺序几乎固定:
- 检查有没有超高分辨率Lightmap:个别大展墙分辨率设到2048,算力占用极高。展厅不需要这么大,1024足够
- 检查有没有重叠的Static Mesh:同位置重叠模型会让Lightmass对同一空间重复计算
- 检查Lightmass Importance Volume是否过大:调大了把不展示的后台仓库区域包进去,纯属浪费
- 检查体积光照贴图(Volumetric Lightmap)设置:如果场景开启了体积光照图且分辨率偏高,内存和速度都会飙升。静态烘焙为主的场景,可以把体积光照贴图的分辨率调低或者干脆关掉,只保留Lightmap用于物体表面
通过这四步,我一般能把烘焙时间压回可控范围。
6. 一锤定音:Performance与视觉验收环节
6.1 烘焙后的性能检查不能省
烘焙好的场景,运行期CPU/GPU占用一般来说比动态光照低很多,但不代表不用查。我在交付前做了一套标准的检查流程:
打开Stat GPU和Stat SceneRendering,重点看Draw Call数量和GPU渲染时长。静态烘焙场景最大的瓶颈通常来自过于复杂的Static Mesh和Overdraw(像素填充过重)。展厅展示品精细度高,如果一个展品模型有200万面,那就是灾难。
我采用的优化手段:
- 为展柜、展车设置多级LOD,距离超过5米切换2级LOD,超过8米切3级
- 把同区域小静态网格体用
Merge Actor合批合并:展柜隔板、摆件、顶部轨道等小件全部合并,Draw Call从2800降到900 - 关闭所有不必要的体积雾和后期处理体积,展厅这种静态场景几乎不需要实时体积Fog,烘干(雾)效果截帧图就够
实测下来,我当时的模拟展厅项目X最终在低配一体机上稳定60帧,在4K拼接屏上稳定30帧,已经完全满足甲方的"现场跑起来不卡"的预期。
6.2 给甲方的验收演示清单
烘焙项目交付前,建议不要直接给甲方一个可执行文件让人家自己点,那样大概率得到一堆截图吐槽。我准备了一套演示流程,基本照着走就能顺利验收:
- 开场路径漫游:在固定轨道上放几个相机,走Spline路径慢速游览,展示烘焙后的全局光效和阴影过渡
- 展品特写:每个展区的展品安排5秒特写,镜头缓慢推进,重点展示直射光下的模型质感和接触阴影
- 场景切换:做三个按钮分别切换暖色氛围、冷色氛围、中性日光氛围,现场演示Lightmap可以一次烘焙多种光照模式的优势
- 帧率数字展示:在画面角落显示实时的FPS数值,让甲方亲眼看到60帧或30帧的稳定数值
这套流程走下来,甲方更容易理解"静态烘焙"到底值不值钱。
7. 最后说几句实操心得
做完这个项目,我对静态烘焙的感触很深。很多人觉得静态烘焙是"退而求其次",但从展厅项目的需求出发,它反而是最优解。光影效果稳定、性能开销小、交付节奏可控,这三个优点在To B项目里就是制胜法宝。
个人复盘有这么几条实用建议供参考:
- 建模阶段就要商量好Lightmap UV规范,后期改比新建还痛苦
- 烘焙不是一次成型,预览——调整——精烘的循环每一步都要做记录。我习惯在截图左边标注"P1/2025-05-12/光强3000",方便回头对照
- 跟甲方沟通效果时,尽量用"氛围""质感""层次"这种甲方听得懂的词,别抛"Indirect Lighting Quality"这堆术语
- 时间允许的话,烘焙结束后用手机拍个现场环境照再关灯对比,光比差异会提醒你哪里需要补光
随着做过的展示项目多了,我越来越觉得静态烘焙是展厅项目的基本功。先把基本功做扎实了,遇到甲方提出动态需求时才有底气说"我能做,但烘焙方案更合适"。
文章里写的每一个参数、每一步流程都是实际跑过的记录。如果你手头也接了类似的展厅项目,尤其甲方开口就是要静态烘焙时,希望这篇能帮你少走点弯路。欢迎交流各自的排错经验,咱们下个项目见。