はじめに
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("昼間の環境設定が完了しました")

夜間・霧の森の実装例:
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


コメント