返回首页

Unity 中的灯光优化:Lightmaps 和 Shaders

本文介绍了 Unity Built-in Render Pipeline 中灯光优化的实用方法。它描述了混合渲染技术、手动 lightmap 管理、通过 shaders 进行的地形灯光投影,以及级联阴影修改,以实现稳定的性能。

如何在不使用 HDRP 的情况下充分利用 Unity 中的灯光
Advertisement 728x90

# Unity 中灯光优化:光照贴图、光探针与自定义着色器

开发带有开放区域的独立游戏项目,不可避免地会遇到渲染瓶颈。虽然行业正积极转向 HDRP 和硬件光线追踪,但 Unity 的 Built-in Render Pipeline (Built-in RP) 对于追求稳定性能并完全掌控渲染流程的团队而言,依然是可靠的选择。实现稳定帧率且不牺牲画质的关键,在于合理分离静态与动态光照,并针对 Draw Calls 进行优化。

混合方案:Lightmaps 与 Light Probes

高效的场景光照建立在按优先级清晰分离几何体的基础上。大型建筑、地形以及静态道具使用烘焙光照贴图进行渲染。在此过程中,像 Bakery 这样的第三方光照贴图工具是最优选择,它们能快速预烘焙 Global Illumination,并正确处理反射效果,同时不会过度占用编辑器资源。

为复杂拓扑的小型物体烘焙光照贴图并不实际:这会导致图集碎片化和视频内存占用增加。相反,使用 Light Probes 系统。探针会插值环境光照,将颜色反射和基本阴影传递给动态网格或小型静态网格。为了优化相同区域内相同道具的批处理,可以强制分配相同探针的坐标。这能减少唯一渲染状态的数量,并减轻帧准备期间的 CPU 负载。

Google AdInline article slot

混合渲染的一个重要方面,是将远距离几何体排除在实时光照计算之外。如果引擎试图为地平线上的物体计算 Directional Light 和级联阴影,它们很快就会成为瓶颈。将远景背景的实时影响禁用,并完全切换到光照贴图或探针,能大幅减少 Draw Calls。

手动控制 Texel Density 与剔除光源

光照贴图的第二 UV 展开自动生成往往效果欠佳。手动布局 UV2 可以根据游戏相机和重要性精确分布 Texel Density。建筑立面、走廊和活跃交互区域获得高 texel 密度,而屋顶、墙体背面以及不可达区域则压缩到最低限度。这能节省光照图集空间,并防止前景出现压缩伪影。

为了在 Unity 中平衡画质与性能,使用 Distance Shadowmask 模式。在距离相机 50–80 米范围内,引擎渲染动态阴影并叠加烘焙 GI。超出此半径后,仅渲染光照贴图中的静态阴影。过渡平滑,且 GPU 负载稳定。

Google AdInline article slot

然而,Built-in Render Pipeline 缺少对点光源和聚光灯源的距离剔除原生机制。远处房间的灯具仍会继续计算,浪费资源。解决方案是自定义管理器:脚本维护活跃源池,每隔 2–3 秒检查一次与相机的距离,并切换启用状态。异步检查避免微卡顿,确保帧中仅激活视觉相关源。

通过自定义着色器实现地形光照投影

地形装饰(雪堆、岩石、植被)对标准光照贴图构成了严峻挑战。为数千个实例烘焙每个小物体耗时过长,而为它们使用 Light Probes 会产生额外 Draw Calls 并破坏静态批处理。

有效变通方法是编写一个着色器,从上至下将地形光照贴图投影到叠加几何体上。光照贴图仅包含地形数据。着色器读取装饰顶点的世界坐标,将其转换到地形 UV 空间,并采样对应的烘焙光照 texel。结果模拟了环境遮蔽和基本光照,而无需依赖探针。

Google AdInline article slot

此外,着色器中集成了顶点混合。当网格下部接触地形表面时,albedo、法线和粗糙度蒙版平滑混合。这消除了硬边接缝,在物体基部营造雪堆积效果,并将散布道具与地形视觉融合成统一几何体。该方法完全去除交接缝隙,且比后处理或复杂体素混合系统快得多。

修改级联阴影与程序化模糊

Unity 中标准 Directional Light 阴影存在两个极端:要么过于锐利且呈阶梯状,要么在降低 Shadow Map 分辨率时模糊且伴随明显闪烁。在真实条件下,阴影柔和度取决于与遮挡物及光源角尺寸的距离。物体基部的阴影始终锐利,但半影会随距离扩大。

为了在不使用沉重管线的情况下模拟物理正确的行为,应用了带渐进级联模糊的接触阴影算法。第三方解决方案修改标准阴影管线,添加基于深度和相机距离的过滤。这为近处区域保持高 Shadow Map 分辨率,并平滑模糊远处级联,消除锯齿并降低填充率需求。与 HDRP 内置不同,此方法避免光线追踪计算或沉重后效,确保中端硬件兼容。

关键要点

• 混合渲染需要清晰的几何体分离:大型静态物体用光照贴图,小型装饰和动态物体用 Light Probes。

• 手动调整 UV2 和 Texel Density 可节省视频内存,并在游戏关键区域提升光照细节。

• 自定义地形光照贴图投影着色器消除了数千小型物体的探针需求,减少 Draw Calls 并改善批处理。

• 通过池管理器对点光源进行距离剔除,弥补了 Built-in RP 中缺失的原生功能。

• 基于距离的渐进级联阴影模糊解决了锯齿和闪烁问题,且无性能损失。

— Editorial Team

Advertisement 728x90

继续阅读