8. 光照、阴影与环境
2026/4/14大约 3 分钟
光照、阴影与环境
光照是 3D 游戏最重要的视觉元素之一。没有光照,3D 场景就是一堆灰蒙蒙的模型。加上光照后,场景立刻有了层次感和真实感。
Godot 中的光源类型
| 光源类型 | 节点名 | 像什么 | 适用场景 |
|---|---|---|---|
| 方向光 | DirectionalLight3D | 太阳光 | 室外场景的全局照明 |
| 点光源 | OmniLight3D | 灯泡/火把 | 室内照明、小范围照明 |
| 聚光灯 | SpotLight3D | 手电筒/舞台灯 | 聚焦照明、特效 |
方向光(DirectionalLight3D)
方向光是 3D 游戏中最常用的光源。它模拟的是太阳——所有光线平行射来,没有特定的位置。
关键参数:
| 参数 | 作用 | 建议值 |
|---|---|---|
Light Color | 光的颜色 | 暖黄色(模拟日光) |
Light Energy | 光照强度 | 1.0(默认),室外可能需要更高 |
Shadow | 是否投射阴影 | 开启(但影响性能) |
Directional Shadow Mode | 阴影模式 | SSPSM(默认) |
一个场景通常只需要一个方向光
方向光模拟太阳,一个就够了。放在场景的什么位置不重要,因为它只有"方向"没有"位置"。
点光源(OmniLight3D)
从一个点向四面八方发光。像灯泡、火把、爆炸的光。
关键参数:
| 参数 | 作用 |
|---|---|
Range | 光照范围(多远以外就照不到了) |
Attenuation | 衰减方式(光随距离变暗的速度) |
聚光灯(SpotLight3D)
从一个点向一个锥形方向发光。像手电筒、舞台灯。
关键参数:
| 参数 | 作用 |
|---|---|
Range | 光照距离 |
Spot Angle | 锥形角度(度数) |
Spot Angle Attenuation | 边缘衰减 |
环境光(WorldEnvironment)
除了具体的光源,你还需要设置"环境"——天空、雾效、背景颜色等。
使用 WorldEnvironment 节点:
- 添加
WorldEnvironment节点 - 在
Environment属性中创建Environment资源 - 可以设置:
- 背景模式:天空、纯色、全景图
- 环境光:整体的基础亮度
- 雾效:远处的物体逐渐模糊
- 辉光(Glow):让亮的东西"发光"
天空(Sky)
Godot 内置了程序化天空(Sky 资源),可以模拟蓝天白云:
- 在 WorldEnvironment 的 Environment 里设置 Background Mode 为
Sky - 创建
Sky资源 - 选择
ProceduralSkyMaterial(程序化天空材质) - 调整太阳位置、天空颜色等参数
阴影
阴影是 3D 游戏中非常重要的视觉元素。它能让人感觉到物体"站在地面上",而不是"飘在空中"。
开启阴影
选中光源节点,勾选 Shadow → Enabled。
阴影的性能代价
阴影是 3D 渲染中最消耗性能的特性之一。建议:
- 开发阶段:只开方向光的阴影
- 发布阶段:根据目标平台决定开几个光源的阴影
- 移动端:尽量少开阴影
光照烘焙(Baked Lighting)
如果场景中的物体不会移动(比如建筑、地形),可以提前把光照计算好并"烘焙"到贴图上。这样运行时不需要实时计算光照,性能好很多。
使用 LightmapGI 节点进行烘焙。适合室内场景和静态环境。
常见问题
场景太暗?
- 添加方向光
- 调高环境光能量
- 检查 WorldEnvironment 设置
阴影有锯齿?
- 调高阴影分辨率(
Directional Shadow → Max Distance减小) - 使用
Shadow Filter设置为Soft或Soft Low
物体看起来"飘"在地面上?
大概率是没开阴影。开启光源的 Shadow → Enabled。
