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

はじめに

Godot 4で3Dシーンに奥行きのある照明を加える時、単なる均一な光では足りないことがあります。懐中電灯の光、街灯の明かり、舞台のスポットライト——こうした「特定方向に限定された光」を表現するのがSpotLight3Dです。

本記事では、SpotLight3Dの基本的な使い方から応用テクニックまで、実践的なコード例を交えて解説します。

SpotLight3Dとは?

SpotLight3Dは、光源から特定方向に円錐状に光を照射するノードです。懐中電灯や舞台照明のように、角度と距離で照射範囲が決まります。

継承ツリー:

SpotLight3D → Light3D → VisualInstance3D → Node3D → Node → Object

DirectionalLight3D(太陽のように無限遠から平行光線)やOmniLight3D(電球のように全方向に光る)と異なり、SpotLight3Dは「円錐形の範囲内だけを照らす」という制限があります。この特性が、リアルな局所照明表現を可能にします。

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

活躍する場面:

  • FPS ゲームの懐中電灯・ヘッドライト
  • 街灯や路面照明、夜間ステージの環境光
  • 舞台演出のスポットライト
  • セキュリティカメラの照明範囲表現
  • 車のヘッドライトやテールランプの再現

使わない場面:

  • 太陽光(広大で無限遠:DirectionalLight3Dを使う)
  • 室内の天井照明全体(OmniLight3Dで十分)

主なプロパティと機能

SpotLight3Dの基本的なプロパティを表にまとめました:

プロパティ 説明 デフォルト値
light_color Color 光の色(RGB) white(1,1,1,1)
light_energy float 光の明るさ 1.0
spot_range float 光が届く最大距離(メートル) 5.0
spot_angle float 円錐の広がり角度(度) 45.0
spot_angle_attenuation float 角度の周辺での減衰(0〜1) 1.0
shadow_enabled bool 影を描画するか false

基本的な使用例:


extends Node3D

@onready var spotlight = $SpotLight3D

func _ready():
	# 懐中電灯の設定
	spotlight.light_color = Color.WHITE
	spotlight.light_energy = 2.0
	spotlight.spot_range = 20.0      # 20メートル先まで光が届く
	spotlight.spot_angle = 30.0      # 30度の円錐状
	spotlight.shadow_enabled = true  # 影を有効化

func _process(delta):
	# プレイヤーのカメラに追従(懐中電灯)
	spotlight.global_position = $Camera3D.global_position
	spotlight.global_rotation = $Camera3D.global_rotation




SpotLight3Dの円錐状光の図解
SpotLight3Dは円錐形の範囲内だけを照らします

街灯の実装例:


extends Node3D

@onready var spotlight = $SpotLight3D

func _ready():
	# 街灯の設定:暖色で下向き
	spotlight.light_color = Color(1.0, 0.9, 0.7)  # 暖色黄色
	spotlight.light_energy = 3.0
	spotlight.spot_range = 15.0
	spotlight.spot_angle = 60.0
	spotlight.shadow_enabled = false

	# ノードの方向を下向きに
	rotation.x = PI / 4  # 45度下を向く

func toggle_light():
	spotlight.visible = !spotlight.visible

DirectionalLight3D・OmniLight3D・SpotLight3D の比較

3種類の光源がどう異なるかを理解することは、照明設計の鍵です:

光源 照射パターン 到達範囲 用途例 パフォーマンス
DirectionalLight3D 平行光線(無限遠から) 無制限(シーン全体) 太陽光、月光 高速(1シーンに1〜2個推奨)
OmniLight3D 全方向球面状 spot_rangeで制限 電球、懐中電灯(無指向) 中程度
SpotLight3D 円錐状(指向性) spot_rangeで制限 街灯、舞台照明、ヘッドライト 中程度(指向性で最適化される)

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

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

パラメータ 設定値の例 効果
light_energy 0.5 〜 5.0 明るさの段階的調整。夜間は低め、ステージ照明は高め
spot_range 5.0 〜 50.0 懐中電灯(5〜15)、街灯(20〜40)、舞台(30〜60)
spot_angle 15.0 〜 90.0 狭い(15度)でスポット効果強、広い(60度以上)で拡散光
spot_angle_attenuation 0.5 〜 1.0 周辺の減衰。1.0で急峻、0.5で緩やか
shadow_enabled true/false 影の計算。有効化で見栄えup、但し負荷増
light_color Color値 色温度調整。暖色(街灯)、寒色(SF)、RGB指定で演出

まとめ

SpotLight3Dは「限定された方向に光を放つ」という特性により、現実的で印象的な照明を3Dシーンに加えます。懐中電灯から舞台照明まで、多くのゲーム演出で活躍するノードです。

  • spot_range と spot_angle の組み合わせで円錐形を自由に設計できる
  • light_color で色温度を調整し、昼夜や雰囲気の表現が可能
  • shadow_enabled は見栄えと負荷のトレードオフなので、プロトタイプ段階から検討を

次回は WorldEnvironment について解説します。シーン全体の環境(空・霧・グロー)を統合的に設定するノードです。

この記事は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

コメント