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

はじめに

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

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

WorldEnvironmentとは?

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

継承ツリー:

WorldEnvironment → Node → Object

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

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

活躍する場面:

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

使わない場面:

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

主なプロパティと機能

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

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

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

プロパティ 説明 一般的な値
background_mode enum 背景の種類(SKY/COLOR/CANVAS) SKY
background_color Color 背景色(background_mode=COLORの時) Color(0,0,0,1)
ambient_light_color Color 環境光の色 Color(1,1,1,1)
ambient_light_energy float 環境光の明るさ 1.0
fog_enabled bool 霧を有効にするか false
fog_density float 霧の濃さ(0.0 〜 1.0) 0.01
glow_enabled bool グロー(発光)を有効にするか false
tonemap_mode enum トーンマッピング方式 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_SKY Sky リソース(球面スカイボックス)を使用 屋外ステージ、広大な風景
BG_COLOR 単色背景(background_color) シンプルな背景、スタジオのような撮影
BG_CANVAS CanvasLayer で描画(2D背景など) 2D背景、UI背景

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

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

パラメータ 設定値の例 効果
glow_enabled true 明るい部分が発光。ネオンやSF世界で有効
glow_intensity 0.4 〜 1.0 グロー強度。高いほど眩しい印象
fog_air_density 0.005 〜 0.05 空気中の粒子感。高いほど霧が濃い
ssao_enabled true Screen Space Ambient Occlusion(隅や凹部の暗さ)
ssao_radius 1.0 〜 3.0 SSAOの影響範囲
tonemap_mode TONE_MAPPER_ACES 映画的なトーンマッピング(ACES方式)

まとめ

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

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

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

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

シリーズ:Godot 4 ノード解説

001〜040:各種ノード

  • 041:Control
  • 042:Button
  • 043:Label
  • 044:TextEdit
  • 045:Panel
  • 046:VBoxContainer
  • 047:AnimationPlayer
  • 048:Timer
  • 049:Area3D
  • 050:RigidBody3D
  • 051:CharacterBody3D
  • 052:CollisionShape3D
  • 053:MeshInstance3D
  • 054:Node3D
  • 055:Camera3D
  • 056:Sprite3D
  • 057:DirectionalLight3D
  • 058:OmniLight3D
  • 059:ReflectionProbe
  • 060:VisibleOnScreenNotifier3D
  • 061:SpotLight3D
  • 062:WorldEnvironment
  • 063:AudioStreamPlayer3D
  • 064:GPUParticles3D
  • 065:CSGBox3D
  • 066:GridMap
  • 067:Decal
  • 068:OccluderInstance3D
  • 069:LightmapGI
  • 070:SubViewport

コメント