FogVolume
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — FogVolume
FogVolume
节点继承关系
继承链:Node → Node3D → VisualInstance3D → FogVolume
继承自 VisualInstance3D
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Layers | 渲染层(可视层掩码) |
| 属性 | SortingOffset | 排序偏移 |
继承自 Node3D
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Position | 本地位置(X / Y / Z) |
| 属性 | GlobalPosition | 全局位置 |
| 属性 | Rotation | 旋转角度(欧拉角,弧度) |
| 属性 | Scale | 缩放比例 |
| 属性 | TopLevel | 是否脱离父节点的变换 |
| 方法 | LookAt() | 朝向目标点 |
| 方法 | ToGlobal() | 本地坐标转全局坐标 |
| 方法 | ToLocal() | 全局坐标转本地坐标 |
| 方法 | RotateX/Y/Z() | 绕指定轴旋转 |
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
体积雾节点——在 3D 空间的一个特定区域内添加雾气效果。和 WorldEnvironment 中的全局雾不同,FogVolume 只在它自己所在的区域内生效。
打个比方:WorldEnvironment 的雾像"全城大雾",整个城市都被笼罩;而 FogVolume 像你在家里的加湿器,只有加湿器周围的区域有雾气。
使用频率:★★ 偶尔使用——特定场景需要局部雾气时使用。
节点用途
- 模拟山谷中的浓雾
- 创建地下室或洞穴中的潮湿氛围
- 添加场景中的局部氛围(如魔法阵周围的迷雾)
- 遮挡远处不需要看到的物体
使用场景
典型场景
- 山谷/峡谷:谷底有浓雾,玩家从高处看下去雾气缭绕
- 洞穴/地下城:入口处有雾气涌出
- 魔法场景:魔法阵周围环绕着神秘雾气
不适用场景
- 需要全场景统一的雾效 → 在 WorldEnvironment 的 Environment 中设置全局雾
- 2D 游戏 → 不支持
常用节点搭配
| 搭配节点 | 用途 | 必需? |
|---|---|---|
| FogMaterial | 定义雾的外观 | 必需 |
| WorldEnvironment | 开启体积雾渲染功能 | 推荐 |
典型节点树:
Valley (Node3D)
├── WorldEnvironment ← 需要开启体积雾支持
├── FogVolume ← 山谷中的雾气
│ └── MeshInstance3D (定义雾的形状区域)
└── Player生效必备素材/资源
| 资源 | 类型 | 说明 |
|---|---|---|
| FogMaterial | Material | 赋给 material 属性,定义雾的密度、颜色等 |
| FogVolume 的形状 | AABB | 通过 size 属性或子节点 MeshInstance3D 定义雾的覆盖范围 |
节点属性与信号
体积雾设置
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
material | Material | — | — | 雾的材质,使用 FogMaterial 设置雾的密度、颜色、散射等参数 |
size | Vector3 | (1, 1, 1) | — | 雾的体积大小(没有子 MeshInstance3D 时生效) |
信号
| 信号 | 触发时机 | 继承自 | 说明 |
|---|---|---|---|
| 无自有信号 | — | — | FogVolume 自身不发出信号 |
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
GetMaterial() | Material | 获取雾材质 |
SetMaterial(mat) | void | 设置雾材质 |
代码示例
C
using Godot;
/// <summary>
/// 创建山谷浓雾效果
/// </summary>
public partial class ValleyFog : FogVolume
{
public override void _Ready()
{
// 设置雾的覆盖范围(长、高、宽)
Size = new Vector3(50f, 10f, 50f);
// 创建雾材质
var fogMat = new FogMaterial();
fogMat.Density = 0.1f;
fogMat.Albedo = new Color(0.8f, 0.85f, 0.9f); // 淡白色雾
Material = fogMat;
}
}GDScript
## 创建山谷浓雾效果
extends FogVolume
func _ready():
# 设置雾的覆盖范围(长、高、宽)
size = Vector3(50.0, 10.0, 50.0)
# 创建雾材质
var fog_mat := FogMaterial.new()
fog_mat.density = 0.1
fog_mat.albedo = Color(0.8, 0.85, 0.9) # 淡白色雾
material = fog_mat注意事项
- 使用 FogVolume 之前,需要在项目设置中开启 体积雾(Volumetric Fog)功能
- 在 Project Settings → Rendering → Environment 中启用 Volumetric Fog
- 体积雾是比较消耗性能的效果,注意控制雾的体积大小和密度
- 移动端建议谨慎使用或降低体积雾质量
