Unity灯光烘焙核心指南:Static标记与Baked/Mixed模式详解 1. 项目概述为什么你的烘焙总是“翻车”如果你在Unity里做过灯光烘焙大概率经历过这样的场景场景摆好了灯光打上了满怀期待地点下“Generate Lighting”然后看着进度条缓慢爬升最后得到一个要么一片死黑、要么曝光过度、要么阴影诡异的结果。更让人头疼的是你调整了几个参数重新烘焙又是漫长的等待结果可能更糟。问题出在哪很多时候根源就在于对“Static”标记和灯光模式Mixed与Baked的理解不够透彻设置上“乱勾一气”。Unity的全局光照GI系统非常强大但它的工作逻辑和我们直觉中的“实时打光”有很大不同。它本质上是一个预计算系统需要你明确地告诉引擎哪些东西是静止不动的Static哪些灯光需要参与这种预计算Baked/Mixed。错误地标记一个动态物体为Static或者为动态灯光错误地选择了Baked模式都会导致光照贴图计算错误、内存浪费甚至运行时出现严重的视觉错误。这篇指南的目的就是帮你彻底理清Static、Mixed灯光、Baked灯光这三者之间的关系避开那些常见的“坑”让你能高效、精准地控制场景光照得到预期中的烘焙效果。无论你是正在为项目性能优化头疼的TA还是试图让场景看起来更棒的场景美术这些内容都至关重要。2. 核心概念拆解Static、Baked、Mixed到底指什么在深入实操之前我们必须像认识新朋友一样搞清楚这三个核心术语的“性格”和“职责”。理解它们是避免所有混乱的第一步。2.1 Static不是“静止”而是“可被预计算”很多新手会把GameObject Inspector面板右上角的“Static”复选框简单地理解为“这个物体不会动”。这个理解对了一半但更本质的理解是标记为Static的物体其几何信息顶点、法线、UV等可以被光照系统用于预计算。注意这里的“Static”与C#编程中的static关键字完全无关。它纯粹是Unity编辑器针对场景物件的一个标记用于光照、导航、遮挡剔除等系统的预计算。当你勾选一个物体的Static时你实际上是对多个系统做出了承诺对光照系统我的网格和位置在运行时不会改变你可以放心地把光照信息亮度、颜色、阴影“烘焙”到我的表面即光照贴图上。对导航系统我是障碍物或可走地面AI可以基于我生成导航网格。对遮挡剔除系统我的形状可以用来判断能否挡住后面的物体。为什么不能乱勾动态物体勾了Static如果一个小怪被你标记为Static但代码里让它移动了。那么它身上烘焙的光照贴图不会跟着它移动会导致它无论跑到哪里都带着最初位置的光照和阴影看起来极其诡异像是个“鬼影”。性能浪费不必要的Static标记会增加光照贴图的计算量、存储量更大的光照贴图纹理和内存占用。一个复杂的、有大量细小零件的装饰物如果完全不会受到动态光照影响且自身也不移动那么标记为Static是合适的。但如果它只是一个简单的背景板或许有更优的处理方式。实操心得我的习惯是在项目初期就建立规范。通常大型环境建筑、地面、山脉等绝对静止的物体才勾选Static。中小型道具根据情况决定如果它永远待在同一个角落且需要接受高质量的间接光可以勾如果它可能被玩家移动、拾取或者场景中有动态光会影响到它就一定不要勾。你可以利用图层Layer来批量管理Static物体例如创建一个“StaticGeometry”层专门放置这些物体。2.2 Baked烘焙灯光一劳永逸的“画师”Baked模式的灯光其所有光照贡献直接光、间接光、阴影都会被永久性地“画”到Static物体的光照贴图上。一旦烘焙完成这颗灯光在运行时就不再进行任何实时光照计算。工作原理引擎模拟光线从该灯光发出。光线与场景中所有标记为Static的物体进行交互反弹、吸收、投射阴影。将这些交互产生的明暗、颜色信息计算并编码成纹理即光照贴图存储在磁盘上。运行时直接将这张纹理贴到对应的Static物体表面。灯光物体本身可以被禁用甚至删除不影响视觉效果。优点性能极佳运行时零光照计算开销非常适合低端设备或需要大量固定光源的复杂静态场景如室内装修、复杂建筑。效果顶级可以计算非常复杂的间接光反弹、柔和阴影、全局光照效果因为计算是在编辑时进行的不受运行时帧时间限制。缺点与避坑点只影响Static物体这是最大的限制。Baked灯光无法照亮任何非Static的物体如玩家角色、移动的NPC。如果你发现角色在烘焙好的场景里一片漆黑首先检查灯光模式。无法动态变化灯光颜色、强度、位置在运行时不能改变。想象一个烘焙了阳光的场景你无法做出昼夜循环。光照贴图尺寸与内存高质量烘焙需要大的光照贴图尺寸这会增加构建体积和运行时内存。需要权衡。典型应用场景太阳光如果不需要昼夜变化、室内固定的壁灯、吊灯、橱窗灯等所有位置、参数固定且只需要照亮静态环境的灯光。2.3 Mixed混合灯光动静结合的“魔术师”Mixed模式是Unity GI系统的精髓它试图在效果和性能之间取得平衡。一颗Mixed模式的灯光其光照贡献会被拆分成两部分直接光Direct Light以实时方式计算。意味着它每帧都会计算可以照亮所有物体Static和Non-Static并且其颜色、强度、位置可以实时改变。间接光Indirect Light以烘焙方式计算。只有它照射到Static物体后产生的反弹光间接光照会被烘焙到光照贴图中。工作原理以Shadowmask模式为例这是最常用的工作流烘焙阶段Mixed灯光像Baked灯光一样计算其对Static物体的间接光照并将其烘焙到光照贴图中。同时它还会为Static物体生成一张额外的“阴影遮罩Shadowmask”纹理这张纹理记录了“这个Static表面的点应该受到哪盏实时灯的阴影影响”。运行阶段对Static物体直接光实时计算并投射实时阴影或使用Shadowmask叠加已烘焙的间接光。这实现了静态物体也能有动态阴影且间接光效果高质量。对非Static物体直接光实时计算并投射实时阴影间接光则通过Light Probe光照探针来近似获取。优点动态与静态的桥梁既能用实时直接光影响动态物体又能让静态物体拥有高质量的烘焙间接光和高效的动态阴影。支持有限度的动态变化灯光的直接光部分可以实时变化适合需要开关、调光或轻微移动的灯光。缺点与复杂性设置更复杂需要理解Light Probe、Shadowmask等概念配置不当容易出问题。性能开销高于纯Baked因为直接光是实时计算的。典型应用场景街道上的路灯需要照亮行走的玩家同时为建筑提供良好的间接光、可以开关的室内灯、颜色会缓慢变化的氛围灯。3. 灯光烘焙全流程实操与参数详解理解了理论我们进入实战环节。一次成功的烘焙依赖于正确的物体标记、合理的灯光模式选择以及精细的参数调节。3.1 第一步场景准备与Static标记策略在点击烘焙按钮之前花几分钟整理你的场景。分层与批量操作如前所述使用图层管理Static物体。选中所有大型静态环境模型在Inspector右上角勾选“Static”。Unity会弹出对话框通常我们只勾选“Contribute GI”和“Occluder Static”即可这表示它参与全局光照计算和遮挡剔除。检查模型UV光照贴图需要第二套UVUV1。在导入模型设置中确保“Generate Lightmap UVs”是勾选的。对于自定义模型务必在3D软件中展好第二套UV避免重叠、拉伸否则烘焙会出现难看的接缝或花斑。非Static物体的准备对于玩家、敌人等动态物体绝对不要勾Static。它们将通过Light Probe光照探针来获取环境间接光。你需要手动或自动在场景中布置光照探针组Light Probe Group。3.2 第二步灯光模式选择与参数配置这是核心决策点。为场景中的每一盏灯做出明确选择。决策流程图简化灯光是否需要移动或改变属性颜色/强度是- 选择Mixed模式。否- 进入下一问题。灯光是否需要照亮非Static物体如角色是- 选择Mixed模式。否- 选择Baked模式。Mixed灯光的关键参数详解 在灯光组件的“Light”部分选择“Mixed”模式后会出现“Baking”设置。Baking这个下拉菜单是关键。Realtime此选项已废弃且容易混淆。不要选。Baked不要被名字迷惑这里选Baked意味着这颗Mixed灯光的间接光部分将被烘焙这是正确的、最常用的设置。Mixed一个遗留选项行为复杂且不推荐在新项目中使用。Shadowmask在Project Settings - Quality中设置“Shadowmask Mode”。推荐使用“Shadowmask”它能在运行时为Static物体提供高质量的静态阴影混合。Baked灯光的参数 相对简单主要关注“Intensity”强度和“Color”颜色因为烘焙后这些就无法改变了。确保它的“Baking”选项就是“Baked”。3.3 第三步光照贴图与光照探针设置打开Window - Rendering - Lighting Settings。Lightmapping SettingsLightmapper有“Progressive CPU”和“Progressive GPU”如果硬件支持可选。GPU通常更快。Indirect Resolution这是最重要的质量参数之一。单位是“每单位纹素数”。值越高光照贴图越清晰间接光细节越丰富但烘焙时间和内存占用呈平方增长。室内小场景可能用20-40大型开放世界可能用2-5。先从10开始测试。Lightmap Resolution同样重要影响直接光照和阴影在光照贴图上的精度。通常设置为Indirect Resolution的2-4倍。Lightmap Size单张光照贴图纹理的最大尺寸。2048或4096是常用值。Unity会自动将场景的光照信息打包到多张这个尺寸的图集中。Compression开启以节省磁盘空间但可能引入轻微瑕疵。Ambient Occlusion环境光遮蔽设置强烈建议开启能极大地增强角落和接触面的体积感。Light Probe设置在场景中创建“Light Probe Group”。像布置棋子一样在动态物体可能活动的空间均匀布置探针点。关键区域如明暗交界处需要更密集。在Lighting Settings的“Light Probes”部分可以设置探针的生成参数。通常默认即可。3.4 第四步执行烘焙与结果检查点击Lighting Settings窗口底部的“Generate Lighting”按钮。这是一个需要耐心的过程。烘焙完成后检查以下方面光照贴图预览在Scene视图的“Shaded”模式下选择“Global Illumination Preview”可以查看生成的光照贴图。检查是否有明显的接缝、漏光或过暗区域。静态物体确保它们的光照看起来自然阴影正确。动态物体在Game视图里移动你的角色或动态物体观察其身上的光照是否平滑变化是否在进入暗处时正确变暗。如果动态物体在烘焙过的区域看起来“自发光”或与环境脱节说明光照探针布置不足或密度不够。性能统计打开Stats面板观察“Rendering”中的“Saved by batching”和“SetPass calls”。成功的烘焙应该能显著降低Draw Call。4. 常见问题、疑难杂症与排查指南即使按照流程操作依然会遇到各种奇怪的问题。这里记录了我踩过的一些坑和解决方案。4.1 问题一烘焙后静态物体一片漆黑或曝光过度排查步骤检查灯光模式确认照亮该区域的灯光不是“Realtime”模式。Realtime灯光不参与烘焙。检查Static标记确认该物体确实勾选了“Static”和“Contribute GI”。检查灯光范围Baked和Mixed灯光的“Indirect Multiplier”间接光乘数是否过低或为0检查灯光Range是否够大能否覆盖到物体。检查光照贴图分辨率“Indirect Resolution”可能太低导致光照信息根本没有被采样到。尝试提高该值重新烘焙一小块区域测试。检查UV在模型的导入设置中检查“Lightmap UVs”的预览确保其没有严重重叠或拉伸。4.2 问题二动态物体在烘焙场景中不受光或光照不匹配排查步骤首要检查照亮该区域的灯光模式必须是Mixed。Baked灯光无法照亮动态物体。检查光照探针动态物体是否处于“Light Probe Group”的覆盖范围内在Scene视图的“Global Illumination”模式下可以看到光照探针的覆盖球体。确保动态物体的活动路径被探针包围。探针密度如果动态物体在移动时光照发生跳跃式变化说明探针布置太稀疏。需要在关键路径上增加探针密度。动态物体材质确保其材质的Shader是支持“Light Probe”的。所有Standard Shader和URP/HDRP的Lit Shader都支持。4.3 问题三烘焙时间过长或光照贴图尺寸巨大优化策略减少不必要的Static仔细审查场景只将真正静态的大型物体标记为Static。大量的小型碎石、草叶可以考虑使用GPU Instancing或其他批处理技术而不是标记为Static。调整分辨率理性降低“Lightmap Resolution”和“Indirect Resolution”。对于远处或不太重要的物体可以通过Override设置单独降低其光照贴图分辨率。分块烘焙对于超大型场景不要一次性烘焙整个世界。利用Unity的“Lighting Data Asset”和场景分块加载只烘焙当前需要的区域。使用GPU Lightmapper如果显卡支持切换到“Progressive GPU”速度会有数量级的提升。优化模型减少Static物体的面数简化网格。4.4 问题四阴影出现闪烁、断层或“粉刺”状瑕疵排查步骤Shadowmask距离设置在Quality Settings中有一个“Shadow Distance”和一个“Shadowmask Mode”下的“Distance Shadowmask”切换。当摄像机与物体的距离超过“Shadow Distance”时Static物体会使用烘焙的阴影可能模糊在此距离内会使用实时阴影。如果这个过渡距离设置不当或者Shadowmask模式配置错误会导致阴影在镜头移动时闪烁或突变。尝试调整“Shadow Distance”或使用“Shadowmask”模式代替“Distance Shadowmask”。灯光阴影参数检查Mixed灯光的阴影设置如“Shadow Strength”、“Resolution”。过低的Resolution会导致阴影锯齿严重。光照贴图精度灯光产生的、烘焙在Static物体上的阴影出现断层通常是“Lightmap Resolution”过低导致的。提高该值。4.5 问题五场景烘焙后材质变紫粉色或丢失这是一个常见且令人崩溃的问题尤其在使用了Addressables或脚本化构建管线后。根本原因Unity在烘焙光照时会为需要烘焙的材质生成一个临时的“烘焙变体”Baked Variant这个变体引用了光照贴图等数据。如果构建或资源管理流程中这个变体没有被正确打包或引用丢失运行时就会显示为Shader错误通常是粉色。解决方案检查材质球确保场景中所有Static物体的材质球都是“常驻”资源而不是在Addressables中被标记为远程加载且未包含在构建内。光照烘焙变体依赖于原材质球。Graphics Settings检查Edit - Project Settings - Graphics中的“Shader Stripping”设置。对于使用了光照贴图的平台不要过度剥离Shader变种。可以尝试关闭“Lightmap modes”的剥离。构建后检查在构建输出目录中检查光照数据资产如LightingData.asset和相关的*_lightmap.exr文件是否存在。如果使用Addressables确保它们被打包到了正确的资源组并随场景加载。脚本化构建管线如果你使用了自定义的构建脚本确保在IBuildTask中正确处理了LightingDataAsset的依赖收集和打包。一个常见的遗漏点是没有将光照数据显式地添加到构建的资源列表中。5. 进阶技巧与性能调优心得掌握了基础流程和问题排查下面分享一些能提升效率和质量的经验。5.1 混合使用烘焙与实时灯光一个高性能的高质量场景往往是Baked、Mixed和Realtime灯光精心搭配的结果。背景全局光照使用一颗强度较低的Baked方向光模拟天光或Skybox来提供基础的、无变化的全局照明和间接光。这奠定了场景的基调。主要静态光源室内主灯、固定的壁灯等使用Baked模式获得最好的效果和零运行时开销。互动与动态光源玩家手电筒、爆炸火光、可开关的灯使用Realtime模式。注意控制其数量和影响范围。衔接与补充走廊灯、窗户外的环境光补充使用Mixed模式让动态角色能自然地融入静态环境。5.2 光照贴图UV的优化技巧光照贴图的质量和效率一半取决于UV。自动生成对于简单模型Unity的“Generate Lightmap UVs”足够好用。但务必检查“Pack Margin”参数增加此值如0.005到0.01可以避免烘焙时纹理边缘渗色。手动展UV对于复杂或重要的模型如主角大厅手动在3D软件中展第二套UV是值得的。原则是最大化利用UV空间避免拉伸为重要区域分配更多UV面积。例如一个房间的内墙和地板应该获得比天花板更多的UV空间因为它们是视觉焦点。UV重叠绝对禁止。重叠的UV会导致光照信息相互覆盖产生不可预测的、混乱的烘焙结果。5.3 利用Light Probe Proxy VolumeLPPV解决大物体问题对于大型的非Static物体如一辆公交车、一个巨型机器人传统的单点Light Probe采样会失效因为物体体积太大其不同部位所处的光照环境不同。这时就需要LPPV。工作原理LPPV定义一个3D体积框在这个框内密集生成虚拟的探针网格。大型动态物体会根据其每个像素在这个体积内的位置进行三线性插值获取光照信息从而实现整个物体表面的光照渐变。使用方法创建一个“Light Probe Proxy Volume”组件将其附加到大型动态物体上调整其大小覆盖物体并确保该体积被场景的Light Probe Group包围。在物体的材质上启用“Use Light Probe Proxy Volume”。5.4 烘焙迭代策略快速预览与最终烘焙没有人能一次调对参数。高效的迭代是关键。最低质量预览将Lighting Settings中的“Indirect Resolution”和“Lightmap Resolution”降到极低如2和4关闭“Compression”和“Ambient Occlusion”。用GPU Lightmapper进行第一次烘焙速度极快用于检查灯光布局、Static标记是否正确整体明暗关系是否合理。区域烘焙Unity允许你只烘焙选中的物体。选中一个有问题或代表性的区域如一个房间进行局部烘焙快速验证参数调整效果。渐进式烘焙使用“Progressive”模式你可以看到光照结果逐步收敛的过程。在达到可接受质量时就可以手动停止无需等待最终收敛非常适合调整阶段。最终烘焙当所有参数、布局确认无误后再将分辨率调到目标值开启所有高质量选项进行完整的最终烘焙。这个过程可以去喝杯咖啡。灯光烘焙是Unity场景美术和性能优化的基石它要求我们在编辑期付出计算时间来换取运行时的极致性能和视觉保真度。整个过程像是一场与引擎的精密对话你需要通过Static标记、灯光模式、各种分辨率参数来清晰地表达你的意图。避免“乱勾Static”本质上是建立一种清晰、规范的对象管理思维。而精通Mixed与Baked则是掌握了平衡动态需求与静态美学的钥匙。希望这份指南能帮你理清思路下次点击“Generate Lighting”时心中充满的是掌控感而非忐忑。记住最好的学习方式永远是在理解原理的基础上大胆尝试耐心观察细致调整。每一个“翻车”的场景都是通往精通之路的宝贵路标。