Godot入門:FogVolumeの使い方と活用法

はじめに

3Dゲームの環境表現で「洞窟の中が薄暗い霞」「魔法陣から立ち昇る煙」「毒ガスに包まれたエリア」といった視覚効果は、プレイヤーの没入感を大きく高めます。

Godot 4ではグローバルなフォグ設定もありますが、特定のエリアだけに局所的な霧や煙を配置したい場合もあります。このような需要に応えるのがFogVolumeノードです。

FogVolumeとは?

FogVolumeは、3D空間の特定エリアに霧、煙、ガスなどの体積効果を配置するノードです。

たとえ: WorldEnvironmentのグローバルフォグは空間全体に適用されますが、FogVolumeは「この箱の中だけ霧がある」という局所的な効果を実現します。複数のFogVolumeを組み合わせることで、環境に深みと多様性が生まれます。

継承ツリー:
FogVolume → VisualInstance3D → Node3D → Node

このノードを使うべき場面

  • 洞窟の奥深くに薄暗い霞を配置したい
  • 魔法陣やエフェクトから煙が立ち昇る表現
  • 特定の部屋やエリアが毒ガスに包まれている
  • 工場や温室内で蒸気が充満している雰囲気
  • 低地や谷間に朝霧が立ち込めている表現

使わない場面:

  • ゲーム空間全体に統一したフォグを適用する場合(WorldEnvironmentを使用)
  • Volumetric Fogを有効化していない場合(FogVolumeは動作しません)




FogVolumeの基本概念
図1: 局所的に霧や煙を配置できる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)




FogVolumeのシェイプ種類
図2: BOX / ELLIPSOID / CONE / CYLINDER / WORLD 各シェイプの形状

もっと使いこなす:カスタマイズできるパラメータ

まずは基本を動かしてみてから、余裕が出たら試してみてください。

パラメータ 説明 調整のポイント
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 ボリュームのサイズ 小さすぎると効果が見えない。シーンに応じて調整




複数FogVolumeの組み合わせ
図3: 複数のFogVolumeを組み合わせることで、より複雑な環境を表現できます

重要な注意点: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をもとに執筆しています。

コメント