はじめに
ダンジョン内の松明の灯り、爆発のフラッシュ、プレイヤーが持つランプ──こうした「全方向に光を放つ」光源を作るならOmniLight3Dが欠かせません。このノードは点光源として、周囲をリアルに照らします。本記事では、OmniLight3Dの使い方と効果的な活用方法を詳しく解説します。
OmniLight3Dとは?
OmniLight3Dは、全方向に光を放つ点光源です。光の範囲内にある物体や環境を照らし、陰影を作ります。自分からは光を放つだけで、物理的に動くことはありません。
たとえ: 電球、松明、蝋燭、魔法の光玉。「周囲全体を照らす」という特性があります。
継承ツリー:
OmniLight3D → Light3D → VisualInstance3D → Node3D → Node他の光源との違い: DirectionalLight3D は太陽のような遠い光源、SpotLight3D は懐中電灯のような方向性のある光です。

このノードを使うべき場面
使うべき場面:
- 室内照明: 部屋の天井の電球、ランプシェード
- 松明や蝋燭: ダンジョン、城、洞窟の灯り
- 爆発フラッシュ: 爆発時の瞬間的な明るさ
- 魔法エフェクト: 魔法陣、光の結界、エネルギーボール
- インタラクティブな光源: プレイヤーが操作できる光、敵の目
使わない場面:
- 太陽光(DirectionalLight3Dを使用)
- 懐中電灯や聚光灯(SpotLight3Dを使用)
主なプロパティと機能
| プロパティ | 説明 | デフォルト値 |
|---|---|---|
| light_color | 光の色(Color型) | Color(1, 1, 1, 1) 白色 |
| light_energy | 光の強さ(0〜8程度。大きいほど眩しい) | 1.0 |
| omni_range | 光が届く最大距離(ユニット) | 5.0 |
| omni_attenuation | 光の減衰カーブ(0〜8。小さいほど遠くまで届く) | 1.0 |
| shadow_enabled | 影を生成するか(true = 影あり、CPU負荷高) | false |
| shadow_blur | 影のボケ具合(0〜3。大きいほどボケ) | 1.0 |
基本的な使用例1:暖色系の松明
extends OmniLight3D
func _ready():
# 松明の色(暖色)
light_color = Color(1.0, 0.8, 0.3) # 黄色がかったオレンジ
light_energy = 2.0
omni_range = 8.0
omni_attenuation = 1.5 # 減衰を加速
func _process(delta):
# 明滅アニメーション(炎のゆらぎを表現)
var flicker = sin(Time.get_ticks_msec() / 200.0) * 0.3 + 1.0
light_energy = 2.0 * flicker
基本的な使用例2:爆発時のフラッシュ
extends OmniLight3D
@export var flash_duration: float = 0.3
@export var max_energy: float = 5.0
var elapsed_time: float = 0.0
func _ready():
visible = false
func trigger_explosion():
visible = true
elapsed_time = 0.0
light_energy = max_energy
func _process(delta):
if visible:
elapsed_time += delta
# エネルギーを時間で減衰
light_energy = max_energy * (1.0 - (elapsed_time / flash_duration))
if elapsed_time >= flash_duration:
visible = false
もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ | 効果 | 使用例 |
|---|---|---|
| light_color | RGB値で光の色をカスタマイズ | Color(0.5, 0.5, 1.0) で青い光、Color(1.0, 0.3, 0.3) で赤い光 |
| light_energy | 光の強さ。大きいほど眩しい(パフォーマンス注意) | 2.0 で普通、5.0 で非常に明るい |
| omni_range | 光が届く距離を制御。長いほど遠くを照らすが負荷増 | 小: 3.0、中: 10.0、大: 20.0 |
| omni_attenuation | 減衰曲線。値が大きいほど近くで暗くなる | 1.0(直線減衰)、2.0(二次減衰、自然) |
| shadow_enabled | 影を有効化。リアルだがCPU負荷が増加 | 松明・電球など重要な光だけ有効に |
| Tween による時間変化 | AnimationPlayerやTweenで明滅・色変化 | 信号機、ネオンサイン、警告灯 |
光源の使い分け表
| 光源タイプ | 特性 | 使用例 | パフォーマンス |
|---|---|---|---|
| OmniLight3D | 全方向に放射。範囲内のすべてを照らす | 電球、松明、魔法陣 | 中 |
| DirectionalLight3D | 無限遠からの平行光。太陽を再現 | 太陽光、月光 | 低 |
| SpotLight3D | 円錐状に放射。方向性がある | 懐中電灯、舞台照明、車のヘッドライト | 中 |

まとめ
OmniLight3Dは、3Dゲーム世界の雰囲気を決める最も重要な要素のひとつです。
- light_color、light_energy、omni_rangeで、光の色・明るさ・範囲をカスタマイズできます
- AnimationPlayerやTweenで時間変化させることで、動的で生きた照明を作れます
- 複数のOmniLight3Dを組み合わせ、DirectionalLight3DやSpotLight3Dと層状に配置することで、映画のような照明デザインが可能になります
次回からは、他のGodot 4ノードの応用編や、複数ノードの組み合わせテクニックについて深掘りしていく予定です。
シリーズ:Godot 4 ノード解説
001〜040:各種ノード
041〜060:
041:Node / 042:Node2D / 043:Node3D / 044:Control / 045:Canvas Layer / 046:Sprite2D / 047:Sprite3D / 048:Label / 049:Button / 050:ColorRect / 051:TextureRect / 052:AnimatedSprite2D / 053:AnimationPlayer / 054:CharacterBody3D / 055:PhysicsBody3D / 056:StaticBody3D / 057:RigidBody3D / 058:Area3D / 059:CollisionShape3D / 060:OmniLight3D
この記事はGodot 4.xをもとに執筆しています。


コメント