ai-behavior-trees-util…
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
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
Claude Code
$ npx -y skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials --agent claude-code
Codex
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a codex -y
Cursor
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a cursor -y
Gemini CLI
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a gemini-cli -y
GitHub Copilot
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a github-copilot -y
OpenCode
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a opencode -y
Windsurf
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-3d-essentials -a windsurf -y
name: godot-3d-essentials description: > Godot 4.7 3D scene setup: Camera3D, lights, WorldEnvironment (sky, ambient, tonemap, fog), StandardMaterial3D, GridMap and local vs global transforms, with a headless scene check. Use when a 3D scene renders black or washed out, a mesh is invisible, or a child rotates on the wrong axis. Not for spatial shaders (`godot-shaders`), bodies and raycasts (`godot-physics`) or camera feel (`camera-systems`).
Assemble a 3D scene that shows what it should in the running game: a current camera, real lights, an environment, materials and GridMap blockouts. Targets **Godot 4.7**; read `config/features` and `rendering/renderer/rendering_method` in `project.godot` first, because Forward+, Mobile and Compatibility differ in what they draw.
1. **Check the renderer** (`rendering/renderer/rendering_method`: `forward_plus`, `mobile` or `gl_compatibility`). Mobile and Compatibility (web, low-end) have no SDFGI, SSIL, screen-space reflections or volumetric fog, and Mobile also has no SSAO, so do not build the look on them for those targets. The reference has the renderer table. 2. **One current `Camera3D` per viewport.** Set `current = true` on the one you want. Godot's convention is -Z forward, +Y up. 3. **Light the scene in the scene itself.** The editor viewport's preview sun and preview environment (toolbar toggles) do not exist at runtime. Add a `DirectionalLight3D` and a `WorldEnvironment` to the main scene, or set `rendering/environment/defaults/default_environment`. 4. **Configure the `Environment`:** background (sky or colour), ambient source, tonemapper, then post effects. Pick the tonemapper before tuning light energy or glow. 5. **Materials:** `StandardMaterial3D` on `MeshInstance3D.material_override` (all surfaces) or `set_surface_override_material(i, mat)`; `ShaderMaterial` for custom looks. 6. **Block out with `GridMap`** and a `MeshLibrary`. 7. **Verify before you finish** (paths are relative to this skill's folder):
and fix every `ERROR`.
(no scene argument means the main scene). It needs no GPU and exits 1 when there is no current camera, nothing lights the meshes, a sky background has no `Sky`, or a mesh is hidden by the camera's `cull_mask`, behind the camera or past `far`.
`xvfb-run -a godot --path <project> --rendering-driver opengl3 --write-movie shots/f.png --quit-after 3 res://level.tscn` writes `shots/f00000000.png` and up, which you can open and inspect. This draws with the Compatibility renderer, so judge Forward+ looks by asking the user for a screenshot.
func _ready() -> void:
var sun := DirectionalLight3D.new()
sun.rotation_degrees = Vector3(-50, -30, 0) # pointing down: -X tilt
sun.shadow_enabled = true
add_child(sun)
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_AGX
var world_env := WorldEnvironment.new()
world_env.environment = env
add_child(world_env)Only one `WorldEnvironment` applies per world: the first one keeps control and a later one is ignored without a runtime message (the editor shows a node warning).
func tint(mesh: MeshInstance3D, color: Color) -> void:
var mat := StandardMaterial3D.new()
mat.albedo_color = color
mat.roughness = 0.6
mesh.material_override = mat # wins over surface and mesh materials@onready var grid: GridMap = $GridMap # mesh_library and cell_size set on the node
func build_floor(width: int, depth: int, item_id: int) -> void:
for x in width:
for z in depth:
grid.set_cell_item(Vector3i(x, 0, z), item_id) # -1 clears a cellwere doing the lighting. Put a light and a `WorldEnvironment` in the scene.
add flat ambient from `rendering/environment/defaults/default_clear_color`, but Compatibility adds none, so the same scene is dim grey on desktop and black on web. An `Environment` with ambient `Disabled` or a black colour background does the same.
sits inside a mesh, whose back faces are culled.
Keep `current` on one camera, or call `make_current()` after the scene loads.
`far`, or an imported mesh has flipped normals (try `cull_mode = CULL_DISABLED` to test).
vector is parallel to the view direction (looking straight down with `Vector3.UP`), or the node is not in the tree yet; use `look_at_from_position()` before `add_child()`.
`global_position` are world space.
scale on bodies.
thres
<img src="docs/assets/awesome-gamedev-agent-skills-banner.png" width="820" alt="awesome-gamedev-agent-skills — game-dev skills for AI coding agents.
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
Implement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain), adaptive/dynamic music via…
Build game cameras that feel good — 2D follow with a deadzone, look-ahead, smoothing, and level-bounds clamping; 3D third-person…
Plan, generate, source, normalize, and validate cohesive visual game assets. Use for art direction, style bibles, sprites,…
Build branching dialogue and narrative — a node/choice graph with conditions, variables, and localization hooks — and choose…
Design NPC and enemy decision-making with finite state machines, behavior trees, steering behaviors, and A* pathfinding —…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.