godot-3d-essentials
gamedev-skills/awesome-gamedev-agent-skills
Set up Godot 4.7 3D scenes with transforms, cameras, lights, environments, and GridMap.
What is godot-3d-essentials?
Assemble a working 3D scene in Godot 4.7 by configuring Node3D transforms, Camera3D positioning, DirectionalLight3D/OmniLight3D lighting, WorldEnvironment with sky and post-processing, StandardMaterial3D assignments, and GridMap tile-based level blocking. Use this when building or fixing 3D scenes, setting up cameras and lighting, configuring environment effects, or working with 3D content and level layouts.
- Position and rotate Node3D objects using Transform3D (global_position, rotate_y, look_at)
- Set up and configure Camera3D with field-of-view, near/far planes, and smooth follow behavior
- Add and configure DirectionalLight3D (sun), OmniLight3D, and SpotLight3D with shadow support
- Create WorldEnvironment with sky, ambient lighting, tonemap, and post-processing (glow, SSAO, fog)
- Assign StandardMaterial3D and ShaderMaterial to MeshInstance3D for surface appearance
- Build tile-based 3D levels using GridMap with MeshLibrary items on a 3D grid
How to install godot-3d-essentials
npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials- Godot 4.7 installed and a project created
- Basic familiarity with Godot's scene tree and GDScript
How to use godot-3d-essentials
- 1.Create a Node3D root and add a Camera3D child; set camera.current = true or call make_current()
- 2.Add a DirectionalLight3D for main lighting and enable shadow_enabled; rotate to desired sun angle
- 3.Create a WorldEnvironment node with an Environment resource; configure background (sky/color), ambient_light_source, and tonemap_mode
- 4.Assign materials to MeshInstance3D nodes using StandardMaterial3D or ShaderMaterial via material_override
- 5.Add a GridMap node, assign a MeshLibrary, and populate cells using set_cell_item(Vector3i, item_id) to build level layouts
- 6.Test by running the scene; if it renders black, verify lights and ambient are configured
Use cases
- Starting a new 3D scene and positioning a camera to view the scene
- Adding sunlight and ambient environment to prevent black-rendered surfaces
- Creating a follow camera for third-person gameplay with smooth interpolation
- Tinting meshes with materials and adjusting metallic/roughness properties in code
- Blocking out level layouts quickly using GridMap and predefined mesh tiles
- Godot 4.x game developers building 3D scenes
- Level designers using GridMap for rapid prototyping
- Developers setting up cameras and lighting for 3D projects
- Anyone working with Node3D, Transform3D, and 3D content in Godot
godot-3d-essentials FAQ
New Godot scenes have no lights or ambient lighting by default. Add a DirectionalLight3D and/or a WorldEnvironment with ambient_light_source set to AMBIENT_SOURCE_SKY or a color.
Parent a Camera3D to a Node3D rig, then use lerp() in _physics_process to smoothly move the rig toward the target position and call look_at() to face the target.
position is relative to the parent node; global_position is in world space. Use global_position when you need world coordinates, especially with rotated parents.
Call set_cell_item(Vector3i(x, y, z), -1) to remove the item at that grid cell.
Non-uniform scale distorts child collisions and lights; prefer uniform scale or scaling the mesh asset instead.
Full instructions (SKILL.md)
Source of truth, from gamedev-skills/awesome-gamedev-agent-skills.
name: godot-3d-essentials description: > Set up a Godot 4.7 3D scene: Node3D transforms, Camera3D, lighting (DirectionalLight3D/OmniLight3D), WorldEnvironment for sky/ambient/tonemap/post, MeshInstance3D materials, and GridMap for tile-based 3D levels. Use when building a 3D scene in a Godot project, placing cameras/lights, configuring environment and post-processing, or working with Node3D/.tscn 3D content and GridMap.
Godot 3D Essentials (4.x)
Assemble a working 3D scene: transforms, camera, lights, environment/post, materials, and
GridMap blockouts. Targets Godot 4.7.
When to use
- Use when starting or fixing a 3D scene: positioning a
Camera3D, adding lights, setting up aWorldEnvironment(sky, ambient, tonemap, glow/SSAO), assigning materials, or building levels withGridMap.
When not to use: writing spatial shaders → godot-shaders; 3D physics bodies and
raycasts → godot-physics; character animation blending → godot-animation; full FPS
template → the fps-shooter genre skill.
Core workflow
- Everything 3D is a
Node3Dwith aTransform3D(position, rotation basis, scale). Move withglobal_position, rotate withrotate_y(angle)orlook_at(target). - Add a
Camera3D. Mark itcurrent(or callmake_current()); setfov,near,far. Parent it to a rig/pivot for orbit or follow cameras. - Light the scene. A
DirectionalLight3Dis the sun;OmniLight3D/SpotLight3Dare local. Enable shadows per light. Without lights and ambient, surfaces render black. - Add a
WorldEnvironmentwith anEnvironmentresource: background (sky/color), ambient light, tonemap, and post (glow, SSAO, fog, adjustments). - Give meshes materials (
StandardMaterial3Dor aShaderMaterial) onMeshInstance3D. - Block out levels with
GridMap, which placesMeshLibraryitems on a 3D grid (the 3D analog of a tilemap).
Patterns
1. A follow camera (third-person, smoothed)
extends Camera3D
@export var target: Node3D
@export var offset := Vector3(0, 4, 8)
@export var smooth := 6.0
func _physics_process(delta: float) -> void:
if target == null:
return
var desired := target.global_position + offset
global_position = global_position.lerp(desired, smooth * delta) # smooth follow
look_at(target.global_position, Vector3.UP) # face the target
2. Sun + environment in code
func _ready() -> void:
var sun := DirectionalLight3D.new()
sun.rotation_degrees = Vector3(-45, -30, 0)
sun.shadow_enabled = true
add_child(sun)
var we := WorldEnvironment.new()
var env := Environment.new()
env.background_mode = Environment.BG_SKY
env.sky = Sky.new()
env.sky.sky_material = ProceduralSkyMaterial.new()
env.ambient_light_source = Environment.AMBIENT_SOURCE_SKY
env.tonemap_mode = Environment.TONE_MAPPER_FILMIC
env.glow_enabled = true
we.environment = env
add_child(we)
3. Assign a StandardMaterial3D from code
func tint_mesh(mesh: MeshInstance3D, color: Color) -> void:
var mat := StandardMaterial3D.new()
mat.albedo_color = color
mat.metallic = 0.0
mat.roughness = 0.6
mat.emission_enabled = true
mat.emission = color * 0.3
mesh.material_override = mat # overrides the mesh's surface materials
4. Place tiles into a GridMap
@onready var grid: GridMap = $GridMap # cell_size + mesh_library set in the editor
func build_floor(width: int, depth: int, item_id: int) -> void:
for x in width:
for z in depth:
# set_cell_item(Vector3i cell, int item, orientation = 0)
grid.set_cell_item(Vector3i(x, 0, z), item_id)
Pitfalls
- Scene renders black → no lights and no ambient. Add a
DirectionalLight3Dand/or aWorldEnvironmentwith ambient/sky. New scenes have neither by default. - No camera / wrong camera. If nothing shows, no
Camera3Discurrent. Setcurrent = trueormake_current(); only one camera renders per viewport. - Confusing local vs global transforms.
position/rotationare relative to the parent;global_position/global_transformare world space. Mixing them under a rotated parent gives surprising results.look_atuses global coordinates. - Scaling physics/lights. Non-uniform
scaleon aNode3Ddistorts child collisions and lights; prefer scaling the mesh asset or using uniform scale. - Forgetting
from/upinlook_at.look_at(target, up)— a target equal to the node's position, or anupparallel to the look direction, produces NaNs/flips. - GridMap with no
MeshLibraryplaces nothing. Create aMeshLibrary(from scenes) and assign it;set_cell_item(cell, -1)clears a cell. - HDR/glow too strong → check
tonemap_modeand glow thresholds; raw emissive values bloom hard under filmic tonemapping.
References
- For Transform3D math, camera projection modes, light/shadow params, the full
Environment/post-processing options,
MeshLibrarycreation, andReflectionProbe/LightmapGIlighting, readreferences/scene-and-environment.md.
Related skills
godot-physics— 3D bodies, areas, and raycasts.godot-shaders— spatial shaders for custom 3D surfaces.godot-animation—AnimationTreefor 3D characters.camera-systems— third-person orbit / first-person look rigs, framing, and collision.performance-optimization— keep 3D scenes within frame budget (draw calls, lights, LOD).fps-shooter— composes 3D movement, input, and AI into a game.
Related skills
More from gamedev-skills/awesome-gamedev-agent-skills and the wider catalog.

godot-animation
Animate in Godot 4.x with AnimationPlayer clips, AnimationTree state machines, or Tween procedural effects.

godot-audio
Play, mix, and sync audio in Godot 4.7 with buses, effects, and beat-accurate timing.

godot-csharp
Write Godot 4.7 game code in C# with type-safe nodes, signals as events, and GDScript interop.

godot-export
Export and build Godot 4.x projects for Windows, macOS, Linux, Web, Android, and headless servers.

godot-gdscript
Write idiomatic GDScript 2.0 for Godot 4.7 with static typing, lifecycle callbacks, and signals.

godot-multiplayer
Build networked Godot 4.7 games with ENet, RPCs, and state replication.