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

はじめに

3Dシーンの照明を設計する時、個別の光源だけでは足りません。空の色、霧のかかり具合、全体の色調、グローやポストプロセス効果——こうした「シーン全体の環境」を一括で管理するのがWorldEnvironmentです。

本記事では、WorldEnvironmentの役割と使い方を、実践的なコード例や設定パターンを交えて解説します。

WorldEnvironmentとは?

WorldEnvironmentは、3Dシーン全体の環境設定(背景、環境光、霧、グロー、トーンマッピングなど)を管理するノードです。Environmentリソースをプロパティに設定して機能します。

継承ツリー:

WorldEnvironment → Node → Object

WorldEnvironmentはシーンツリーに1つだけ配置し、そこに「Environment」という設定リソースを割り当てることで、全体の見た目を統合的にコントロールします。個別の光源(DirectionalLight3D、OmniLight3Dなど)とは異なり、ポストプロセス全体に影響します。

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

活躍する場面:

  • 屋外シーンの空・地平線・背景の設定
  • 霧や薄霧のある森や洞窟の表現
  • ネオン輝くSF都市やサイバーパンク世界
  • 全体的な色調調整(セピア、青白い、暗い夜など)
  • グロー・ブルームによる発光表現

使わない場面:

  • 個別オブジェクトの光源制御(Light3Dノードを使う)
  • 極めてシンプルな屋内シーン(環境設定不要な場合も)

主なプロパティと機能

WorldEnvironmentとEnvironmentリソースの基本設定を表にまとめました:

プロパティ説明デフォルト値
environmentEnvironment環境設定リソース(Environment.tres など)null
camera_attributesCameraAttributes露出やカメラの色管理設定null

Environment リソース内の主要プロパティ:

プロパティ説明一般的な値
background_modeenum背景の種類(SKY/COLOR/CANVAS)SKY
background_colorColor背景色(background_mode=COLORの時)Color(0,0,0,1)
ambient_light_colorColor環境光の色Color(1,1,1,1)
ambient_light_energyfloat環境光の明るさ1.0
fog_enabledbool霧を有効にするかfalse
fog_densityfloat霧の濃さ(0.0 〜 1.0)0.01
glow_enabledboolグロー(発光)を有効にするかfalse
tonemap_modeenumトーンマッピング方式TONE_MAPPER_LINEAR

基本的な使用例(昼間の屋外):


extends Node3D

func _ready():
	# WorldEnvironmentノードを取得
	var world_env = $WorldEnvironment
	var env = world_env.environment

	if env:
		# 背景を空に設定
		env.background_mode = Environment.BG_SKY

		# 環境光を明るく設定(昼間)
		env.ambient_light_color = Color.WHITE
		env.ambient_light_energy = 1.5

		# 霧は無効
		env.fog_enabled = false

		print("昼間の環境設定が完了しました")
WorldEnvironmentがシーン全体に及ぼす影響
WorldEnvironmentはシーン全体の環境を統一的に管理します

夜間・霧の森の実装例:


extends Node3D

func _ready():
	var world_env = $WorldEnvironment
	var env = world_env.environment

	if env:
		# 背景色を濃い紺色に(夜間)
		env.background_mode = Environment.BG_COLOR
		env.background_color = Color(0.05, 0.05, 0.15, 1.0)  # 夜間の紺

		# 環境光を暗く、青白く
		env.ambient_light_color = Color(0.6, 0.7, 0.9)  # 青白い月光
		env.ambient_light_energy = 0.5

		# 霧を有効化
		env.fog_enabled = true
		env.fog_density = 0.05  # 靄がかかった感じ
		env.fog_air_density = 0.01  # 空気中の霧の量

		print("夜間の森の環境設定が完了しました")

func set_time_of_day(hour: int):
	# 時間帯に応じた環境光の調整
	var env = $WorldEnvironment.environment
	match hour:
		6, 7, 8:  # 早朝
			env.ambient_light_color = Color(1.0, 0.8, 0.6)
			env.ambient_light_energy = 0.8
		12, 13, 14:  # 昼間
			env.ambient_light_color = Color.WHITE
			env.ambient_light_energy = 1.5
		18, 19, 20:  # 夕方
			env.ambient_light_color = Color(1.0, 0.6, 0.4)
			env.ambient_light_energy = 1.0
		_:  # 夜間
			env.ambient_light_color = Color(0.6, 0.7, 0.9)
			env.ambient_light_energy = 0.4

background_mode の種類と使い分け

WorldEnvironmentの背景表現は、background_mode の値で大きく変わります:

background_mode説明用途例
BG_SKYSky リソース(球面スカイボックス)を使用屋外ステージ、広大な風景
BG_COLOR単色背景(background_color)シンプルな背景、スタジオのような撮影
BG_CANVASCanvasLayer で描画(2D背景など)2D背景、UI背景

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

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

パラメータ設定値の例効果
glow_enabledtrue明るい部分が発光。ネオンやSF世界で有効
glow_intensity0.4 〜 1.0グロー強度。高いほど眩しい印象
fog_air_density0.005 〜 0.05空気中の粒子感。高いほど霧が濃い
ssao_enabledtrueScreen Space Ambient Occlusion(隅や凹部の暗さ)
ssao_radius1.0 〜 3.0SSAOの影響範囲
tonemap_modeTONE_MAPPER_ACES映画的なトーンマッピング(ACES方式)

まとめ

WorldEnvironmentは、3Dシーン全体の見た目を統一的にコントロールする中核ノードです。背景、環境光、霧、ポストプロセス効果が一つのリソースで管理でき、時間帯や場所の切り替えも容易です。

  • Environment リソースを作成して WorldEnvironment に割り当てることで、シーン全体の環境が一元化される
  • background_mode(SKY/COLOR/CANVAS)を使い分けることで、多彩な背景表現が可能
  • fog_enabled や glow_enabled などのポストプロセス効果で、雰囲気をドラマティックに演出できる

次回は AudioStreamPlayer3D について解説します。3D空間上の位置から音を再生し、距離や方向で音が変わるノードです。

この記事はGodot 4.xをもとに執筆しています。

関連性の高いノード解説記事

コメント