2026/7/23 10:24:32

Unity烘焙模式深度解析:Full Lighting、Directional与Subtractive的选择指南

Unity烘焙模式深度解析:Full Lighting、Directional与Subtractive的选择指南 1. 项目概述为什么Unity烘焙如此重要在Unity项目开发的后期尤其是涉及到复杂光照和全局光照GI的场景烘焙Baking是一个绕不开的关键环节。很多开发者特别是从移动端或小场景入手的同行可能会觉得实时光照已经足够甚至觉得烘焙流程繁琐、耗时能避则避。但当你接手一个需要高质量视觉效果、稳定帧率或者需要在性能受限的移动设备上运行的中大型项目时烘焙的重要性就立刻凸显出来了。简单来说烘焙就是将场景中复杂的光照计算包括直接光、间接光、阴影、反射等“预计算”并“烘焙”到纹理Lightmap或光照探针Light Probes中的过程。这样一来运行时就不再需要进行这些昂贵的实时计算GPU的负担大大减轻从而换来极其稳定的帧率和更丰富、更真实的光影细节。Unity内置的烘焙系统功能强大但对于追求极致效果和效率的团队第三方解决方案如Bakery往往成为首选。Bakery以其卓越的烘焙速度、对巨大场景的支持以及更少的纹理内存占用而闻名。然而面对Bakery提供的三种核心烘焙模式——Full Lighting、Directional和Subtractive很多开发者会感到困惑它们到底有什么区别我的项目究竟该选哪一个选错了会不会导致效果崩坏或者性能浪费这正是本文要深入探讨的。我将结合多个实际项目中的踩坑经验从原理到实操为你彻底解析这三种模式帮你做出从项目草稿阶段到最终渲染发布的最优选择。2. 核心概念与模式原理深度拆解在深入三种模式之前我们必须先建立几个核心认知。烘焙的本质是光照信息的“预计算”和“存储”。Bakery在这方面做了大量优化但其模式划分的逻辑根源仍在于如何处理场景中动态物体与静态物体之间的光照交互以及如何存储光照的方向性信息。2.1 光照贴图Lightmap与光照探针Light Probes的角色分工这是理解所有烘焙模式的基础。你可以把场景想象成一个舞台静态物体舞台上的布景、墙壁、家具。它们的位置、旋转、缩放在游戏运行时不会改变。对于它们我们可以使用光照贴图。这是一张或一组特殊的纹理它“贴”在模型的第二套UV即光照贴图UV上存储了该物体表面每个点的光照颜色和强度信息。因为布景不动所以这张“光影照片”可以拍得非常精细和准确。动态物体舞台上的演员、可移动的道具。它们会到处跑无法为每一个可能的位置预计算一张光照贴图。这时就需要光照探针。我们可以在场景中预先放置一系列“采样点”探针每个点都记录下了该位置的光照信息颜色和强度。运行时动态物体跑到哪里就读取附近几个探针的数据进行插值从而获得近似的光照效果。探针存储的是空间一个“点”的信息而非物体表面的“面”信息。一个高质量的烘焙场景必然是光照贴图负责静态物体高质量光影和光照探针网络负责动态物体融入环境光照的有机结合。Bakery的三种模式主要影响的是光照贴图的计算和存储方式并间接关联到探针数据的生成。2.2 Bakery三种烘焙模式的核心差异Bakery的三种模式并非简单的“低、中、高”质量选项它们对应着不同的渲染管线兼容性、效果表现和性能开销。1. Full Lighting完整光照模式这是Bakery的“旗舰”模式也是功能最强大、效果最接近路径追踪渲染器的一种。原理它为光照贴图中的每个纹素texel存储完整的照明信息。这不仅仅是一个颜色值而是一个“光照球”或称为球谐函数数据记录了来自各个方向的光照强度。这意味着静态物体在烘焙后不仅能表现出正确的明暗和颜色还能对场景中的反射光例如一面红墙将红光反射到旁边的白墙上做出正确的反应并且能支持法线贴图Normal Map在烘焙光照下的正确表现。因为法线贴图改变了模型表面的微观朝向而Full Lighting存储了方向信息所以凹凸细节的光影会非常生动。输出生成的光照贴图通常是多张的例如颜色图、方向图等数据量相对较大。类比就像给静态物体拍了一张全景HDR光照照片记录了环境中的所有光影信息。2. Directional方向性模式这是Unity自身烘焙系统和许多第三方烘焙器也提供的经典模式可以看作是Full Lighting的“简化版”或“兼容版”。原理它也为每个纹素存储了主要的光照方向信息但信息的丰富度和精度通常不及Full Lighting。它能够支持基本的法线贴图效果和柔和的阴影过渡但对于非常复杂的间接光反射特别是颜色溢出的处理能力较弱。它的最大优势是与Unity内置渲染管线的兼容性极佳。输出通常输出一张主光照贴图和一张方向图。类比就像拍了一张带有主要光源方向信息的照片能看出明暗和大致轮廓但环境光的细节有所损失。3. Subtractive相减模式这是一种非常特殊且高效的模式常用于移动端项目或对性能有极端要求的场景。原理它不存储复杂的方向信息。其核心思想是假设场景中只有一个主方向光如太阳。烘焙时它计算出静态物体在该方向光下的阴影并将这个阴影信息“烘焙”进光照贴图。对于间接光环境光、天空盒光它使用一个**均匀的、无方向的“环境色”**来近似。这意味着静态物体上的光影几乎没有层次变化法线贴图在烘焙光照下完全失效因为光照方向被简化了动态物体通过光照探针也只能获得一个平均的环境色。输出生成的光照贴图数据量最小通常就是一张简单的RGB纹理。类比就像用剪纸做了一个简单的阴影轮廓贴在物体上然后整体刷上一层均匀的环境色油漆。注意Subtractive模式的名字容易引起误解。它并非“减去”光照而是采用了一种极度简化的光照模型。在移动设备上为了节省那宝贵的内存和带宽牺牲一些视觉细节是完全值得的。2.3 模式选择决策树如何选择你可以遵循这个简单的决策流程目标平台是否是移动端或WebGL且性能压力巨大是- 优先考虑Subtractive模式。务必接受其扁平化的视觉效果。否- 进入下一步。项目是否使用Unity内置渲染管线Built-in Render Pipeline是-Directional模式是最安全、兼容性最好的选择。如果想追求更好效果且Bakery版本支持可以尝试Full Lighting但需全面测试。否即使用URP/HDRP- 进入下一步。是否追求最高质量的静态光影且需要法线贴图在烘焙光照下生效是- 选择Full Lighting模式。这是为高质量PC/主机项目准备的功能。否或硬件性能有限-Directional模式是平衡效果与性能的稳妥选择。3. 实战配置与烘焙流程详解理解了原理我们来进入实战环节。假设我们正在为一个室内展厅项目进行烘焙目标是PC平台使用URP管线追求较高视觉质量因此我们选择Full Lighting模式作为示例。3.1 烘焙前的场景准备烘焙不是一键魔法90%的问题都出在准备阶段。准备工作做得好烘焙事半功倍。3.1.1 模型与材质检查静态标记Static Flag确保所有不动的物体墙壁、地板、展柜都勾选了“Static”。对于复杂的预制体注意其子物体也需要被正确标记。一个常见错误是只标记了父物体导致子物体没有被烘焙。光照贴图UVLightmap UVs这是重中之重Unity和Bakery都需要模型拥有第二套不重叠、不拉伸的UV用于存储光照信息。导入设置在模型导入设置中确保“Generate Lightmap UVs”被勾选。Unity会自动生成一套。手动检查对于重要或复杂的模型务必在3D建模软件中手动展好第二套UV。自动生成的UV经常会出现拉伸、重叠或像素密度不均的问题这会导致烘焙后出现难看的条纹或光斑。你可以使用Unity的UV检查工具Window Rendering Lighting Object面板下查看光照贴图UV进行预览。材质与着色器确保所有静态物体使用的材质/着色器是支持烘焙的。在URP中标准的Lit材质即可。避免使用完全自发光或特殊的顶点着色器除非你清楚它们与GI的交互方式。3.1.2 光照与环境设置光源模式将主要光源如Directional Light模拟太阳的“Mode”设置为Mixed。Mixed光源意味着它既参与实时照明照亮动态物体也参与烘焙计算将光影信息存入光照贴图。纯Realtime的光源不会参与烘焙。反射探针Reflection Probes如果你的场景有光滑表面玻璃、金属、大理石地板务必布置反射探针。烘焙光照解决颜色和阴影而镜面反射的高光信息需要反射探针来提供。将它们也标记为Static并烘焙。光照设置Lighting Settings打开Window Rendering Lighting。在Bakery模式下这里的大部分设置会被Bakery自己的窗口覆盖但环境设置Environment依然重要比如天空盒材质它会作为重要的环境光源参与烘焙计算。3.2 Bakery参数配置实战以Full Lighting为例打开Bakery窗口核心配置集中在几个标签页1. General Settings通用设置Lightmap Resolution光照贴图分辨率单位是“texels per unit”每单位纹素。这是最重要的质量/性能权衡参数。值越高光照贴图越清晰但纹理尺寸越大内存占用和烘焙时间激增。实操建议室内小物件可以给到20-30大型地面或墙面给到5-10。可以先用一个较低的值如5进行快速迭代最终烘焙时再提高。Padding间隔光照贴图UV壳之间的间隔。防止不同UV壳的光照信息在压缩时渗色。通常默认值即可如果烘焙后出现边缘亮线可以适当增大此值。Anti-aliasing抗锯齿对光照贴图采样进行抗锯齿。对于高分辨率光照贴图或存在尖锐阴影的场景开启此选项能有效减少锯齿感。2. Mode Selection模式选择在这里下拉选择“Full Lighting”。选择后下方可能会出现一些该模式特有的选项例如关于方向性信息存储精度的设置。3. Light Sources光源处理确保你的Mixed光源在这里被正确识别。Bakery的优势之一是可以处理非常多的光源而性能下降不明显。可以调整光源的采样质量等参数对于关键主光可以提高采样数以减少噪点。4. Output输出指定光照贴图的输出路径和压缩格式。为了平衡质量和内存通常选择高质量的压缩格式如BC7支持Alpha通道质量好或ASTC移动端。“Combine Meshes”合并网格这是一个Bakery的杀手级功能。它会将多个共享相同材质的小物体网格合并并打包到同一张光照贴图里。这能极大地减少Draw Calls提升运行时性能。对于布满相同石头、灌木丛的自然场景效果提升立竿见影。3.3 执行烘焙与结果验证配置完成后点击“Render”开始烘焙。Bakery会显示进度条和预估时间。烘焙完成后务必进行以下检查场景视图检查在Scene视图中将光照模式切换到“Baked Global Illumination”查看静态物体的光影是否正确、有无黑斑、漏光或条纹。光照贴图检查在Lighting窗口的“Lightmaps”标签页查看生成的光照贴图。检查是否有过度拉伸某个物体在光照贴图上占用的面积异常大或浪费空间大量空白区域。光照探针检查在Scene视图中可视化光照探针Gizmos Light Probes确保动态物体活动的区域都有探针覆盖。移动一个动态物体如一个Cube观察其表面的光照是否能平滑地随着位置变化。性能分析使用Unity的Frame Debugger或Profiler对比烘焙前后Draw Calls的变化。如果使用了“Combine Meshes”你应该能看到显著的下降。4. 常见问题、排查技巧与性能优化即使流程正确烘焙过程中也总会遇到各种“妖魔鬼怪”。下面是我从多个项目中总结的“排坑指南”。4.1 视觉瑕疵类问题问题1光照贴图出现“接缝”或“纹理错位”原因这是最经典的问题几乎100%是由于光照贴图UV不正确引起的。要么是UV存在重叠两个不同的3D表面共享了同一块UV空间要么是UV壳之间的Padding不够在纹理压缩时发生了颜色渗透。排查在建模软件或Unity的UV检查工具中仔细检查问题模型的光照贴图UV。确保所有UV壳完全分离没有重叠。解决回到3D软件重新展UV。如果使用自动生成尝试增大“Generate Lightmap UVs”设置中的“Padding”参数。在Bakery中也可以适当增加全局的Padding值。问题2场景中出现闪烁的白色噪点或黑色斑点原因烘焙采样不足。尤其是在使用Full Lighting模式计算复杂间接光时如果光线反弹次数Bounces设置过高而采样数Samples不足就会因蒙特卡洛积分噪声导致斑点。排查观察噪点是否在阴影边缘或角落处特别明显。解决在Bakery的光源或全局设置中增加采样数。更根本的方法是适当降低光线反弹次数。对于大多数室内场景2-3次反弹已经能产生很好的效果盲目提高到5-6次只会指数级增加计算量和噪点。问题3动态物体与静态环境“脱节”颜色或亮度不匹配原因光照探针放置不当或密度不足。动态物体所处位置没有探针或者探针网络太稀疏导致插值得到的光照信息不准确。排查可视化光照探针看动态物体的活动路径是否在探针网络的覆盖范围内。解决在动态物体关键活动区域手动增加光照探针。可以使用Unity的“Auto Generate”功能但手动在关键位置如门口、转角、明暗交界处放置通常效果更好、更高效。4.2 性能与资源类问题问题1光照贴图纹理内存占用巨大原因光照贴图分辨率设置过高或大量小物体各自占用一大块光照贴图空间利用率低。排查在Lighting窗口的“Lightmaps”标签页查看每张光照贴图的尺寸和数量。解决分级设置分辨率不要全局使用一个高分辨率。对视觉核心区域主角活动区、视觉焦点使用高分辨率如15-20对远景、天花板、地面等使用低分辨率如2-5。可以在Bakery中按物体或图层Layer设置不同的分辨率缩放系数。启用“Combine Meshes”这是Bakery的神器能自动将小物体打包极大提升光照贴图利用率。调整纹理压缩格式在输出设置中选择更高效的压缩格式如ASTC 6x6 for Android ETC2 for GLES3 能在几乎不损失视觉质量的前提下大幅减少内存。问题2烘焙时间过长原因场景过大、面数过多、光源复杂、采样设置过高。解决分块烘焙对于超大型开放世界不要试图一次性烘焙整个场景。将世界划分为多个区块Chunks分别烘焙。Bakery支持只烘焙选中的物体。优化场景烘焙前移除摄像机永远看不到的面如物体底部、嵌入墙内的面。使用LOD层次细节系统确保烘焙时处理的是最低LOD级别的模型如果视觉允许。迭代式烘焙在调试阶段将光照贴图分辨率、采样数、反弹次数全部调到最低进行快速预览。确认光影布局和大效果无误后再逐步提高参数进行最终质量烘焙。问题3构建Build后光照丢失或变黑原因这是新手极易踩中的大坑。光照贴图数据没有被正确打包到游戏构建中。排查与解决检查Unity的Player Settings中相关平台的Graphics APIs设置。确保没有禁用必要的功能。确保场景中的光照贴图数据已被保存。在烘焙后点击Lighting窗口下方的“Generate Lighting”按钮在Bakery中通常是“Save”或“Apply”将光照数据写入场景和资源中。检查构建后的日志看是否有关于光照贴图加载失败的警告或错误信息。有时纹理尺寸超过了目标平台的最大限制也会导致加载失败。4.3 高级技巧与心得烘焙层Baking Layer的妙用你可以创建专用的层如“BakingOnly”将一些仅用于贡献间接光照但不希望出现在最终游戏中的物体如隐藏的反射板、补光体放入该层。在Bakery的设置中可以指定只烘焙某些层这样既能利用它们改善光照又不会让它们出现在游戏里。使用光照贴图通道Lightmap Index当一个物体需要多套光照例如昼夜循环需要两套不同的烘焙光照时可以利用物体的“Lightmap Index”属性。烘焙第一套光照时将相关物体的Index设为0烘焙第二套时设为1。运行时通过脚本切换材质所引用的光照贴图索引即可。烘焙与实时结合的动态效果对于需要部分动态光影的场景如可开关的灯可以采用“混合照明”思路。主要的环境光和太阳光使用烘焙。可开关的灯本身作为实时光源但其影响的静态物体区域可以预先放置一个反射探针并设置为“Realtime”模式这样开关灯时静态物体也能通过实时更新的反射探针获得高光变化虽然漫反射部分不变但也能产生不错的效果。5. 模式对比总结与项目生命周期建议让我们最后再回顾一下三种模式并给出它们在项目不同阶段的选用建议。Full Lighting vs. Directional vs. Subtractive 终极对比表特性维度Full LightingDirectionalSubtractive核心原理存储每个纹素的全方向光照信息球谐存储主要方向光照信息仅烘焙主方向光阴影 均匀环境色视觉质量最高。支持复杂间接光、颜色溢出、法线贴图细节光影。高。支持基本的方向性阴影和法线贴图间接光一般。低。光影扁平无法线贴图效果环境光均匀。性能开销纹理内存较高运行时采样开销中。纹理内存中运行时采样开销低。纹理内存极低运行时开销极低。兼容性对URP/HDRP支持最佳Built-in管线可能需测试。与Unity内置管线兼容性最好通用性强。全管线兼容尤其适合移动端/WebGL。适用场景PC/主机高端项目影视级质量静态场景。大部分PC/主机项目质量与性能平衡。移动端、VR追求极致帧率、风格化或低多边形项目。项目各阶段实战建议原型/草稿阶段使用Subtractive或最低质量的Directional模式进行快速迭代。你的目标是验证游戏玩法、关卡布局和基本光影感觉而不是追求画面完美。快速的烘焙速度可能只需几秒或几分钟能极大提升你的迭代效率。开发/打磨阶段当关卡布局和静态物体基本确定后切换到Directional模式进行大部分开发。它能提供一个质量尚可、性能稳定的光照环境方便你进行美术资源整合和性能测试。在此阶段你需要完成光照贴图UV的最终调整、光照探针网络的布置。预发布/最终渲染阶段在项目最终打磨抛光时如果目标平台允许将关键场景如主城、BOSS房升级到Full Lighting模式进行最终烘焙。此时你需要投入时间进行参数微调分辨率、采样并解决所有视觉瑕疵。记住最终烘焙可能耗时数小时务必确保所有资源都已就绪。烘焙不是一蹴而就的魔法而是一个需要耐心、理解和反复调试的技术流程。选择Bakery就是选择了一条追求效率与质量平衡的道路。理解这三种模式就如同掌握了三把不同的钥匙能帮你打开从移动端到3A级项目不同需求的大门。希望这篇基于实战的解析能让你在下次面对烘焙设置时不再犹豫自信地做出最适合你项目的那个选择。