DirectionalLight in Godot 4: it is DirectionalLight3D now

By Eduardo Orellana · Updated

DirectionalLight is called DirectionalLight3D in Godot 4, and DirectionalLight2D is new for 2D. In a Godot 4 project, DirectionalLight.new() fails to parse with Identifier "DirectionalLight" not declared in the current scope. Did you mean to use "DirectionalLight3D"?.

AppImage, x86_64. Ubuntu 22.04, Debian 12, Fedora 39 or newer.

Intel or AMD Chromebook, with Linux turned on.

Download for macOSDownload for Windows

What Godot is checking

GDScript resolves every name when the script loads. DirectionalLight is not a class in Godot 4, so the analyzer stops before anything runs, and because the name is in Godot's own table of Godot 3 renames, the message names the replacement.

The converter carries DirectionalLight to DirectionalLight3D. Only its rotation matters, not its position; it shines down its local -Z axis. directional_shadow_mode and directional_shadow_max_distance tune its shadows, and sky_mode decides whether it lights the sky.

Reproduce it

A Godot 3 script that creates a DirectionalLight in code, in a Godot 4 project.

extends Node

func _ready():
	var sun = DirectionalLight.new()
	print(sun)

What Godot 4.7.2 prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

SCRIPT ERROR: Parse Error: Identifier "DirectionalLight" not declared in the current scope. Did you mean to use "DirectionalLight3D"?
   at: GDScript::reload (res://answers/directionallight-in-godot-4/repro.gd:4)
ERROR: Failed to load script "res://answers/directionallight-in-godot-4/repro.gd" with error "Parse error".
   at: load (modules/gdscript/gdscript_resource_format.cpp:46)

Fix it

A DirectionalLight3D as the sun, tilted 45 degrees, with shadows.

extends Node3D

func _ready() -> void:
	var sun := DirectionalLight3D.new()
	sun.rotation_degrees = Vector3(-45, 30, 0)
	sun.shadow_enabled = true
	add_child(sun)
	print(sun.get_class(), " shadows ", sun.shadow_enabled, ", max distance ", sun.directional_shadow_max_distance)

What the fixed script prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

DirectionalLight3D shadows true, max distance 100.0

Verified on Godot 4.7.2

Both scripts on this page were run headless on Godot 4.7.2 (4.7.2.stable.mono.official.ed1daf0bf) on 18 October 2026, and the output above is what Godot printed, unedited.

Where the check lives in Godot's source: [gdscript_analyzer.cpp line 4687, the message with its hint](https://github.com/godotengine/godot/blob/4.7.2-stable/modules/gdscript/gdscript_analyzer.cpp#L4687), [renames_map_3_to_4.cpp line 1510, DirectionalLight to DirectionalLight3D](https://github.com/godotengine/godot/blob/4.7.2-stable/editor/project_upgrade/renames_map_3_to_4.cpp#L1510), [DirectionalLight3D class reference](https://github.com/godotengine/godot/blob/4.7.2-stable/doc/classes/DirectionalLight3D.xml).

Questions

Why are my sun shadows blurry far away?
Shadow resolution is spread over directional_shadow_max_distance. Lower it, or use the PSSM 4 splits mode.
Does DirectionalLight2D exist?
Yes, new in Godot 4, for sunlight on 2D scenes.