Unity光照系统完全指南
《 Unity 之光照系统完全解析 》
光照是Unity场景渲染的核心要素之一,直接决定场景的视觉效果、氛围营造和真实感,合理运用光照能让简单的模型呈现出丰富的层次和质感。本文将从光照基础、光照类型、光照参数、烘焙技巧及常见问题排查等方面,全面解析Unity光照系统,适用于Unity新手及进阶开发者。
一、Unity光照基础概念
在Unity中,光照的核心作用是模拟现实中的光线传播规律,通过光线与物体表面的交互(反射、折射、吸收),呈现出物体的明暗、色彩和细节。Unity的光照系统主要分为「实时光照」「烘焙光照」「混合光照」三种模式,不同模式适用于不同的项目场景(如移动端/PC端、2D/3D、性能要求等)。
1.1 光照核心原理
Unity光照本质是通过「光照计算 shader」实现光线与物体的交互,核心包含三个关键组件:
- 光源(Light):产生光线的对象,决定光线的方向、颜色、强度等。
- 渲染器(Renderer):物体表面的渲染组件,接收光线并进行着色计算。
- 光照贴图(Lightmap):烘焙光照时生成的纹理,存储场景中静态物体的光照信息,用于提升性能。
1.2 光照模式分类
在Unity的「Lighting窗口」(Window > Rendering > Lighting)中,可设置全局光照模式,三种模式的核心区别如下:
| 光照模式 | 核心特点 | 适用场景 |
|---|---|---|
| 实时光照(Realtime) | 光线实时计算,支持动态物体、阴影实时更新,性能消耗较高 | PC端、主机端项目,动态场景(如第三人称游戏、动态天气) |
| 烘焙光照(Baked) | 光线提前计算并烘焙到光照贴图,性能消耗极低,不支持动态物体阴影 | 移动端项目、静态场景(如场景背景、建筑漫游) |
| 混合光照(Mixed) | 结合实时光照和烘焙光照,静态物体用烘焙,动态物体用实时光照 | 兼顾性能与动态效果的项目(如开放世界游戏、半动态场景) |
二、Unity光源类型及用法
Unity提供了5种常用光源,每种光源对应不同的现实光线场景,需根据需求合理选择,避免过度使用导致性能浪费。
2.1 方向光(Directional Light)
「方向光」是最常用的光源,模拟平行光(如太阳光),光线从无穷远发射,方向一致,无衰减(光线强度不随距离变化)。
核心参数
- Intensity:光线强度,默认1,数值越大光线越亮,移动端建议控制在0.5-2之间。
- Color:光线颜色,默认白色,可通过调整RGB模拟不同时间的光线(如早晨暖黄色、傍晚橙红色)。
- Shadow Type:阴影类型,None(无阴影)、Hard Shadows(硬阴影,边缘锐利)、Soft Shadows(软阴影,边缘柔和),软阴影性能消耗更高。
- Shadow Resolution:阴影分辨率,Low/Medium/High/Very High,分辨率越高阴影越清晰,性能消耗越大。
适用场景
模拟太阳光、月光,作为场景的主光源,决定场景的整体明暗和阴影方向。
2.2 点光源(Point Light)
「点光源」模拟点光源(如灯泡、蜡烛),光线从光源中心向四周发散,有衰减(距离越远光线越暗)。
核心参数
- Range:光线范围,控制光线能照射到的最远距离,范围越大性能消耗越高。
- Intensity:光线强度,受Range影响,Range越大,相同强度下视觉上越暗。
- Attenuation:衰减方式,默认Linear(线性衰减),可选择Quadratic(二次衰减,更接近现实)。
适用场景
场景中的局部光源,如台灯、火把、灯笼等,用于营造局部明暗对比。
2.3 聚光灯(Spot Light)
「聚光灯」模拟聚光效果(如手电筒、探照灯),光线从光源中心向一个锥形区域发射,有衰减和角度限制。
核心参数
- Range:光线范围,同点光源,控制照射最远距离。
- Intensity:光线强度。
- Spot Angle:聚光角度,角度越小,光线越集中(如手电筒);角度越大,光线越分散(如探照灯)。
- Penumbra Angle:半影角度,控制聚光边缘的柔和度,数值越大,边缘越模糊。
适用场景
手电筒、探照灯、舞台灯光等,用于突出特定区域或物体。
2.4 区域光(Area Light)
「区域光」模拟面光源(如窗户、灯带),光线从一个矩形区域发射,光线柔和,无明显阴影边缘,仅支持烘焙光照(不支持实时光照)。
核心参数
- Width/Height:区域光的宽度和高度,决定光源的大小,尺寸越大,光线越柔和。
- Intensity:光线强度。
适用场景
室内场景的窗户光、灯带、天花板灯等,用于营造柔和的环境光。
2.5 环境光(Ambient Light)
「环境光」不是独立光源,而是场景的全局基础光,用于照亮场景中所有未被直接光源照射的区域,避免出现纯黑死角。
核心设置
- Ambient Source:环境光来源,可选择Skybox(天空盒)、Color(纯色)、Gradient(渐变)。
- Ambient Intensity:环境光强度,默认0.2,数值越大,场景整体越亮。
注意事项
环境光不宜过亮,否则会导致场景明暗对比不明显,失去层次感。
三、光照参数进阶设置
除了单个光源的参数,Unity的光照系统还有一些全局设置,直接影响场景的光照效果和性能,重点关注以下几点。
3.1 阴影设置(全局)
在Lighting窗口的「Shadows」面板中,可设置全局阴影参数,优化阴影效果和性能:
- Shadow Distance:阴影距离,控制相机能看到的最大阴影距离,距离越小,性能消耗越低(移动端建议控制在50以内)。
- Shadow Cascades:阴影级联(仅方向光),用于优化远距离阴影的清晰度,分为1/2/4级,级联越多,阴影越清晰,性能消耗越高(移动端建议1-2级)。
- Shadow Resolution:全局阴影分辨率,与单个光源的阴影分辨率叠加,需根据项目性能平衡。
3.2 烘焙光照设置
使用烘焙光照时,需在Lighting窗口进行以下设置,确保烘焙效果和性能:
- Baked Global Illumination:勾选「Baked Global Illumination」开启烘焙光照。
- Lightmap Resolution:光照贴图分辨率,单位是像素/米(Pixels Per Meter),数值越大,光照贴图越清晰,文件体积越大(移动端建议10-50)。
- Lightmap Padding:光照贴图间距,避免不同物体的光照贴图重叠,默认2,可根据需求调整。
- Bake:点击「Bake」按钮开始烘焙,烘焙完成后,静态物体的光照信息会存储在光照贴图中。
3.3 光照探针(Light Probes)
光照探针用于解决动态物体在烘焙光照场景中的光照问题,通过在场景中放置探针,采集周围的光照信息,让动态物体(如角色、敌人)也能受到烘焙光照的影响,同时不消耗过多性能。
核心设置
- 新建光照探针:右键场景空白处 > Light > Light Probe Group,创建光照探针组。
- 布局探针:在Scene窗口中拖动探针节点,均匀分布在场景中,重点覆盖动态物体活动区域。
- 烘焙探针:开启烘焙光照后,点击「Bake」,探针会自动采集光照信息,动态物体挂载Renderer组件后,会自动接收探针的光照数据。
注意事项
探针数量不宜过多,否则会增加烘焙时间和内存占用,建议根据场景大小合理布置(小型场景10-20个,大型场景50-100个)。
3.4 反射探针(Reflection Probes)
反射探针用于模拟物体的反射效果(如金属、玻璃、水面),通过采集周围环境的纹理,生成反射贴图,让物体表面呈现出环境反射效果,提升场景真实感。
核心设置
- 新建反射探针:右键场景空白处 > Light > Reflection Probe,创建反射探针。
- 探针类型:分为Baked(烘焙型,提前采集环境,性能消耗低)、Realtime(实时型,实时采集环境,性能消耗高)、Custom(自定义,手动指定反射贴图)。
- 采集范围:调整探针的Size参数,控制采集环境的范围,范围越大,反射效果越全面。
适用场景
金属物体、玻璃、水面、高光材质等需要反射效果的物体,建议在室内场景或封闭场景中使用,效果更明显。
四、光照烘焙实战技巧
烘焙光照是移动端项目优化的核心手段,合理的烘焙设置能在保证视觉效果的同时,大幅降低性能消耗,以下是实战中常用的技巧。
4.1 静态物体标记
烘焙光照仅对「静态物体」生效,需将场景中不需要移动的物体(如地面、建筑、道具)标记为静态:
- 选中物体,在Inspector窗口中勾选「Static」(静态标记)。
- 若多个物体需要标记,可框选所有物体,右键 > Static > Contribute GI(贡献全局光照)。
注意事项
动态物体(如角色、移动的道具)不可标记为静态,否则无法移动;若动态物体需要受到烘焙光照影响,需使用光照探针。
4.2 光照贴图优化
光照贴图的分辨率和质量直接影响烘焙效果和文件体积,优化技巧如下:
- 按物体设置分辨率:选中单个静态物体,在Inspector窗口中找到「Lightmap Settings」,设置「Lightmap Size」,对重要物体(如主角周围的道具)设置较高分辨率,次要物体(如远处的背景)设置较低分辨率。
- 压缩光照贴图:在Lighting窗口中,设置「Lightmap Format」为压缩格式(如ETC2、ASTC),降低文件体积,移动端优先选择ETC2格式。
- 减少光照贴图重叠:调整「Lightmap Padding」参数,避免不同物体的光照贴图重叠,导致烘焙出现异常。
4.3 烘焙时间优化
大型场景烘焙时间较长,可通过以下设置缩短烘焙时间:
- 降低光照贴图分辨率:全局或单个物体降低Lightmap Resolution,是缩短烘焙时间最有效的方法。
- 关闭不必要的烘焙选项:在Lighting窗口中,取消勾选「Auto Generate」(自动生成),手动控制烘焙时机;取消勾选「Reflective GI」(反射全局光照),若不需要反射效果可关闭。
- 分区域烘焙:将场景分为多个区域,分别标记静态物体,单独烘焙每个区域,避免一次性烘焙整个场景。
五、常见光照问题排查
在使用Unity光照时,经常会遇到阴影异常、烘焙发黑、光照过亮等问题,以下是常见问题及解决方案。
5.1 阴影异常(阴影缺失、阴影闪烁、阴影模糊)
问题1:动态物体没有阴影
解决方案:
- 检查光源的Shadow Type是否设置为Hard Shadows或Soft Shadows(不可为None)。
- 检查动态物体的Renderer组件是否勾选「Receive Shadows」和「Cast Shadows」。
- 若使用混合光照,检查动态物体是否未标记为静态,且光源的「Mixed Lighting Mode」设置正确。
问题2:烘焙后静态物体阴影缺失
解决方案:
- 确认物体已标记为静态,且勾选「Contribute GI」和「Receive GI」。
- 检查Lighting窗口中是否勾选「Baked Global Illumination」,且已点击「Bake」完成烘焙。
- 检查光源是否设置为「Baked」或「Mixed」模式,若为「Realtime」模式,静态物体阴影不会烘焙。
问题3:阴影闪烁(实时光照场景)
解决方案:
- 降低「Shadow Distance」,减少远处阴影的渲染压力。
- 提高「Shadow Resolution」,避免阴影像素化导致的闪烁。
- 开启「Shadow Stabilization」(阴影稳定化),在Lighting窗口的Shadows面板中设置。
5.2 烘焙后场景发黑、光照不均匀
问题1:烘焙后场景整体发黑
解决方案:
- 检查环境光强度,适当提高Ambient Intensity(建议0.2-0.5)。
- 检查光源强度,确保主光源(方向光)强度足够(默认1-2)。
- 检查静态物体是否勾选「Receive GI」,若未勾选,物体无法接收烘焙光照。
问题2:烘焙后光照不均匀,出现黑斑、亮斑
解决方案:
- 提高光照贴图分辨率,或单独提高异常区域物体的Lightmap Size。
- 调整「Lightmap Padding」参数,增大间距,避免光照贴图重叠。
- 检查场景中是否有遮挡物阻挡光线,或光源位置不合理,调整光源角度和位置。
5.3 光照过亮、画面泛白
解决方案:
- 降低光源Intensity,尤其是方向光和环境光。
- 检查物体材质的Emission(自发光)参数,若自发光过强,会导致画面泛白。
- 关闭「Auto Exposure」(自动曝光),在Post Processing窗口中设置,避免画面自动提亮。
六、光照性能优化总结
Unity光照性能优化的核心是「平衡视觉效果与性能消耗」,尤其是移动端项目,需重点关注以下几点:
- 优先使用烘焙光照,静态物体全部标记为静态,减少实时光照数量。
- 控制光源数量,避免过多点光源、聚光灯同时存在,优先使用方向光作为主光源。
- 优化阴影设置,降低阴影距离、阴影分辨率,移动端尽量使用硬阴影,减少阴影级联数量。
- 合理设置光照贴图分辨率和压缩格式,减少内存占用。
- 动态物体使用光照探针接收烘焙光照,避免使用实时光照照射动态物体。
结语
光照是Unity场景渲染的灵魂,掌握光照的基础原理、光源类型和烘焙技巧,能让你的场景更具真实感和氛围感。在实际开发中,需根据项目的平台(PC/移动端)、场景类型(静态/动态)和性能要求,灵活调整光照设置,避免过度追求视觉效果而忽略性能。希望本文能帮助你快速掌握Unity光照系统,解决实际开发中的光照问题。
本文基于 Unity 2022 LTS 版本编写,不同版本的部分功能可能有所差异。