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

はじめに

ダンジョン内の松明の灯り、爆発のフラッシュ、プレイヤーが持つランプ──こうした「全方向に光を放つ」光源を作るならOmniLight3Dが欠かせません。このノードは点光源として、周囲をリアルに照らします。本記事では、OmniLight3Dの使い方と効果的な活用方法を詳しく解説します。

OmniLight3Dとは?

OmniLight3Dは、全方向に光を放つ点光源です。光の範囲内にある物体や環境を照らし、陰影を作ります。自分からは光を放つだけで、物理的に動くことはありません。

たとえ: 電球、松明、蝋燭、魔法の光玉。「周囲全体を照らす」という特性があります。

継承ツリー:
OmniLight3D → Light3D → VisualInstance3D → Node3D → Node

他の光源との違い: DirectionalLight3D は太陽のような遠い光源、SpotLight3D は懐中電灯のような方向性のある光です。




OmniLight3Dの光の範囲
OmniLight3Dは点を中心に全方向に光を放ちます

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

使うべき場面:

  • 室内照明: 部屋の天井の電球、ランプシェード
  • 松明や蝋燭: ダンジョン、城、洞窟の灯り
  • 爆発フラッシュ: 爆発時の瞬間的な明るさ
  • 魔法エフェクト: 魔法陣、光の結界、エネルギーボール
  • インタラクティブな光源: プレイヤーが操作できる光、敵の目

使わない場面:

  • 太陽光(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による照明
複数のOmniLight3Dを組み合わせることで、複雑で豊かな照明を実現できます

まとめ

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をもとに執筆しています。

コメント