はじめに
3Dゲームの環境表現で「洞窟の中が薄暗い霞」「魔法陣から立ち昇る煙」「毒ガスに包まれたエリア」といった視覚効果は、プレイヤーの没入感を大きく高めます。
Godot 4ではグローバルなフォグ設定もありますが、特定のエリアだけに局所的な霧や煙を配置したい場合もあります。このような需要に応えるのがFogVolumeノードです。
FogVolumeとは?
FogVolumeは、3D空間の特定エリアに霧、煙、ガスなどの体積効果を配置するノードです。
たとえ: WorldEnvironmentのグローバルフォグは空間全体に適用されますが、FogVolumeは「この箱の中だけ霧がある」という局所的な効果を実現します。複数のFogVolumeを組み合わせることで、環境に深みと多様性が生まれます。
継承ツリー:
FogVolume → VisualInstance3D → Node3D → Node
このノードを使うべき場面
- 洞窟の奥深くに薄暗い霞を配置したい
- 魔法陣やエフェクトから煙が立ち昇る表現
- 特定の部屋やエリアが毒ガスに包まれている
- 工場や温室内で蒸気が充満している雰囲気
- 低地や谷間に朝霧が立ち込めている表現
使わない場面:
- ゲーム空間全体に統一したフォグを適用する場合(WorldEnvironmentを使用)
- Volumetric Fogを有効化していない場合(FogVolumeは動作しません)

主なプロパティと機能
| プロパティ | 型 | 説明 |
|---|---|---|
| size | Vector3 | フォグボリュームのサイズ(X, Y, Z)。シェイプがBOXの場合は直方体のサイズ |
| shape | enum | BOX / ELLIPSOID / CONE / CYLINDER / WORLD。フォグの形状 |
| material | FogMaterial | フォグの見た目や性質を定義するマテリアル |
| albedo(FogMaterial内) | Color | フォグの色(RGB) |
| emission(FogMaterial内) | Color | フォグが発光する場合の色(夜光フォグなど) |
| density(FogMaterial内) | float | フォグの濃さ(0.0 = 透明、1.0 = 完全に霞) |
| height_falloff(FogMaterial内) | float | 高さによる濃度低下の程度(0.0 = 一定、1.0 = 高いほど薄い) |
基本的なフォグボリュームの例:
extends Node3D
func _ready():
# FogVolumeを作成
var fog_volume = FogVolume.new()
add_child(fog_volume)
# フォグマテリアルを作成
var fog_material = FogMaterial.new()
fog_material.albedo = Color(0.7, 0.7, 0.8, 1.0) # 薄い青グレー
fog_material.density = 0.5 # 中程度の濃さ
# フォグボリュームに設定
fog_volume.material = fog_material
fog_volume.shape = FogVolume.SHAPE_BOX
fog_volume.size = Vector3(10.0, 5.0, 10.0)
fog_volume.position = Vector3(0, 2.0, 0)
高さ依存フォグ(谷間の霧)の例:
extends Node3D
func _ready():
var fog_volume = FogVolume.new()
add_child(fog_volume)
# 地面に沿った霧(高さで濃度が変わる)
var fog_material = FogMaterial.new()
fog_material.albedo = Color(0.9, 0.9, 0.95, 1.0) # 薄い白
fog_material.density = 0.7
fog_material.height_falloff = 0.5 # 高いほど薄くなる
fog_volume.material = fog_material
fog_volume.shape = FogVolume.SHAPE_WORLD # 無制限の範囲
fog_volume.position = Vector3(0, 0.5, 0)

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ | 説明 | 調整のポイント |
|---|---|---|
| density | フォグの濃さ(0.0〜1.0) | 0.3以下=薄い霧、0.5=標準、0.8以上=濃い霞 |
| height_falloff | 高さによる減衰(0.0〜1.0) | 0=一定濃度、0.5=リアル、1.0=高いほど急速に薄くなる |
| albedo(色) | フォグのRGB色 | 青系=水蒸気、緑=毒ガス、黄=硫黄、黒=煙 |
| emission | 発光色 | Color(1.0, 0.0, 0.0, 0.5)で赤く光るフォグ(魔法陣など) |
| shape | フォグの形状 | ELLIPSOID=滑らか、BOX=直角、CONE=指向性 |
| size | ボリュームのサイズ | 小さすぎると効果が見えない。シーンに応じて調整 |

重要な注意点:EnvironmentのVolumetric Fog設定
FogVolumeが効果を発揮するには、シーンのEnvironmentで「Volumetric Fog」を有効にする必要があります。
# エディター上、またはスクリプトで設定
extends Node3D
func _ready():
# 現在のEnvironmentを取得
var world_env = get_world_3d().environment
# Volumetric Fogを有効化
world_env.volumetric_fog_enabled = true
# ボリューメトリックフォグの品質設定
world_env.volumetric_fog_density = 0.1 # グローバル密度
world_env.volumetric_fog_detail_spread = 2.0
world_env.volumetric_fog_ambient_light_inject = 0.0
まとめ
FogVolumeは、3D空間に局所的な霧や煙を配置し、環境に深みと雰囲気をもたらすノードです。
- 洞窟・魔法陣・毒ガスゾーンなど、様々なシーンで活用
- 複数のFogVolumeを組み合わせることで、複雑な環境表現が可能
- height_falloffで高さ依存の減衰を実現し、より自然なフォグを表現
次回は、ライティングをテクスチャに焼き込んで高品質な間接照明を実現するLightmapGIノードを解説します。静的シーンの最適化と高速化の手法を学んでいきましょう。
シリーズ:Godot 4 ノード解説
001〜040:各種ノード
041以降:個別ノード解説
- 041〜050: 基本的なノード群
- 051〜060: 物理・キャラクター関連
- 061〜070: パーティクル・エフェクト
- 071〜075: ライティング基礎
- 076: MultiMeshInstance3D
- 077: Decal
- 078: FogVolume(このページ)
- 079: LightmapGI
- 080: ReflectionProbe
この記事はGodot 4.xをもとに執筆しています。


コメント