Godot Adapt 3D To 2D
thedivergentai/GD-Agentic-Skills
Expert patterns for simplifying 3D games to 2D including dimension reduction strategies, 2.5D fake-depth, isometric ports, camera flattening, physics conversion, 3D-to-sprite art pipeline, and…
A skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jame581/GodotPrompter godot-optimization --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/godot-optimization .claude/skills/godot-optimization && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .claude/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimizationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jame581/GodotPrompter godot-optimization --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/godot-optimization .agents/skills/godot-optimization && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .agents/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jame581/GodotPrompter godot-optimization --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/godot-optimization .cursor/skills/godot-optimization && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .cursor/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jame581/GodotPrompter.git --path skills/godot-optimization--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jame581/GodotPrompter godot-optimization --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/godot-optimization .gemini/skills/godot-optimization && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .gemini/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jame581/GodotPrompter godot-optimizationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/godot-optimization .github/skills/godot-optimization && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .github/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jame581/GodotPrompter godot-optimization --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/godot-optimization .opencode/skills/godot-optimization && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "godot-optimization" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-optimization into .opencode/skills/godot-optimization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-optimization", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
godot-optimizationA skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks
Godot Optimization is an agent skill from jame581/GodotPrompter. Use when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/cpu-bottlenecks.md`, `references/draw-calls.md` and `references/memory-management.md`).
It sits in Game Development, covering Game development and Performance optimization. It works with Godot. The repository describes itself as: Agentic skills framework for Godot 4.x. Domain-specific skills for AI coding agents (Claude Code, Copilot, Antigravity, Cursor). The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1e7d79d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are gdscript and csharp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Godot Optimization loads about 3k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 33 tokens; SKILL.md has 1,247 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jame581/GodotPrompter at commit 1e7d79d, republished under its MIT licence (© jame581). 1,247 words, ~2,955 tokens.
.claude/skills/godot-optimization/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.This skill covers performance optimization for Godot 4.3+ projects in both GDScript and C#. It covers the built-in profiler, draw call reduction, physics tuning, GDScript performance patterns, memory management, object pooling, and a reference table of common bottlenecks.
Related skills: godot-debugging for systematic debugging and profiling, godot-code-review for performance review checklist, export-pipeline for release build optimization, physics-system for collision shapes, layers, and physics body types, 2d-essentials for 2D mesh optimization, particle performance, and draw order tuning, multithreading for moving work off the main thread, mobile-development for mobile performance budgets.
At 60 fps, the entire frame (update, physics, rendering) must complete in 16.6 ms. At 30 fps the budget is 33.3 ms. Any single system that consumes the majority of that budget is a bottleneck.
| Target FPS | Frame budget |
|---|---|
| 120 | 8.3 ms |
| 60 | 16.6 ms |
| 30 | 33.3 ms |
Open Debugger > Profiler, click Start, play through the scenario you want to measure, then click Stop.
# Manual micro-benchmark for a specific block
var start := Time.get_ticks_usec()
_run_expensive_operation()
var elapsed := Time.get_ticks_usec() - start
print("_run_expensive_operation: %d µs" % elapsed)C#:
// Manual micro-benchmark using Stopwatch (high-resolution timer)
using System.Diagnostics;
var sw = Stopwatch.StartNew();
RunExpensiveOperation();
sw.Stop();
GD.Print($"RunExpensiveOperation: {sw.Elapsed.TotalMilliseconds:F3} ms");
// Alternative using Godot's built-in timer (microsecond precision)
long start = (long)Time.GetTicksUsec();
RunExpensiveOperation();
long elapsed = (long)Time.GetTicksUsec() - start;
GD.Print($"RunExpensiveOperation: {elapsed} µs");Debugger > Monitors shows real-time engine metrics while the game is running. Click a monitor name to open a live graph. Key monitors to watch:
| Monitor | What to watch for |
|---|---|
Time > FPS | Below target — frame budget overrun |
Time > Process | High — _process() callbacks are expensive |
Time > Physics Process | High — _physics_process() or physics sim is expensive |
Render > Total Draw Calls | Above ~500 (mobile) or ~2 000 (desktop) — needs batching |
Render > Video RAM | Steadily growing — unfreed textures or meshes (memory leak) |
Object > Object Count | Growing across scene reloads — nodes are not being freed |
Physics 3D > Active Bodies | Large count in simple scenes — bodies not sleeping |
# Query any monitor at runtime from code
var fps := Performance.get_monitor(Performance.TIME_FPS)
var draw_calls := Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME)
var video_ram := Performance.get_monitor(Performance.RENDER_VIDEO_MEM_USED)
print("FPS: %d | Draw calls: %d | VRAM: %.1f MB" % [fps, draw_calls, video_ram / 1_048_576.0])C#:
// Query any monitor at runtime from code
double fps = Performance.GetMonitor(Performance.Monitor.TimeFps);
double drawCalls = Performance.GetMonitor(Performance.Monitor.RenderTotalDrawCallsInFrame);
double videoRam = Performance.GetMonitor(Performance.Monitor.RenderVideoMemUsed);
GD.Print($"FPS: {fps:F0} | Draw calls: {drawCalls:F0} | VRAM: {videoRam / 1_048_576.0:F1} MB");Every distinct mesh, sprite, or canvas item that cannot be batched with its neighbours costs one draw call. Reducing draw calls is one of the highest-leverage optimisations, especially on mobile — wrap 2D groups sharing a texture in CanvasGroup, keep unique-material count low, atlas sprites, and cull off-screen work.
See references/draw-calls.md for the full recipes (CanvasGroup batching constraints, shared shader-parameter materials, texture atlases,
VisibleOnScreenNotifier2D/3Dculling, and 3D LOD swapping).
Physics tuning hinges on minimising broadphase work and avoiding mesh colliders on moving bodies. Trim collision masks to only the layers each body actually needs, replace ConcavePolygonShape3D with primitives on anything that moves, and prefer Area2D/3D over per-frame raycasts for overlap detection.
See references/physics-tuning.md for the full recipes (layer/mask bit examples, collision-shape cost table,
Engine.physics_ticks_per_secondtuning, Area-vs-raycast patterns).
Hot-path GDScript wins come from eliminating per-frame allocations, comparing StringName instead of String, using typed arrays / PackedArrays, and preload-ing resources at class scope. The same allocation discipline applies to C# (with List<T> in place of typed Array[T] and static readonly StringName fields).
See references/cpu-bottlenecks.md for the full recipes (cached group queries, reused vector locals,
&"..."literals,PackedVector2Array, static typing,preloadvsload, plus C# parity blocks).
Watch Performance.MEMORY_STATIC and OBJECT_COUNT across scene reloads — steady growth means leaked references. Resources loaded by path are cached and shared; call .duplicate() when you need per-instance mutation. Always prefer queue_free() for nodes; free() inside a self-emitted signal will crash.
See references/memory-management.md for the full recipes (Performance singleton queries, ResourceLoader cache semantics,
queue_freevsfreetable, plus the full GDScript and C# object pool implementations for bullets/effects/particles).
| Problem | Diagnosis tool | Fix |
|---|---|---|
| Too many draw calls | Debugger > Monitors Render > Total Draw Calls; Viewport > Debug > Draw Calls overlay | Use CanvasGroup for 2D batching; merge meshes for 3D; use texture atlases; reduce unique materials |
Heavy GDScript in _process | Profiler > Self column shows script functions at top | Move logic to _physics_process (runs less often), cache queries, avoid per-frame allocations, consider C# for tight loops |
| Excessive signal connections | Profiler shows signal dispatch overhead; manually audit get_signal_connection_list() | Remove redundant connections; prefer polling over per-frame signals for high-frequency data; use CONNECT_ONE_SHOT for fire-and-forget |
| Unoptimised TileMap | Profiler shows TileMap._process or high draw call count | Split into fewer layers; use a single atlas texture per layer; disable use_parent_material if not needed; use TileMapLayer (Godot 4.3+) instead of legacy TileMap |
| Large uncompressed textures | Monitors Render > Video RAM is high; check Import dock for texture settings | Enable texture compression (VRAM Compressed) in the Import dock; use mipmaps; halve resolution of assets not viewed up-close |
| Too many active physics bodies | Monitors Physics 3D > Active Bodies is high; slow _physics_process in Profiler | Enable sleeping on RigidBody3D (can_sleep = true); lower physics tick rate; replace distant bodies with fake animations; use layers/masks to narrow collision checks |
| String operations in hot paths | Profiler shows String allocation functions; high GC pressure | Replace String comparisons with StringName (&"..."); avoid String formatting in _process; build strings once and cache |
instantiate() in hot paths | Profiler shows PackedScene.instantiate with high Self time | Implement object pooling (see references/memory-management.md); preload scenes at startup; spawn during loading screens rather than during gameplay |
_process — new Arrays, Dictionaries, Strings, or Vector constructors per frame. Cache the container, mutate fields in place. See references/cpu-bottlenecks.md.ConcavePolygonShape3D on a CharacterBody3D or RigidBody3D. Use a capsule, box, or convex hull instead. See references/physics-tuning.md.material_override = SomeMaterial.new() in _ready() breaks batching. Share one material; vary via shader parameters. See references/draw-calls.md.load() in hot paths — calling load("res://...") from _process or _physics_process. Use const X := preload(...) at class scope. See references/cpu-bottlenecks.md.instantiate() + queue_free() for short-lived objects — bullets, hit effects, particles. Pool them. See references/memory-management.md.Work through this list before shipping or when investigating a performance complaint.
Profiler
Draw Calls
CanvasGroup.VisibleOnScreenNotifier2D/3D to pause processing.Physics
ConcavePolygonShape — replaced with capsule, box, or convex.Area2D/3D is used for overlap detection instead of per-frame raycasts.RigidBody3D nodes have can_sleep = true where applicable.GDScript
Array, Dictionary, or String is allocated inside _process or _physics_process.StringName (&"...").Array[T] or PackedArray).preload at class scope, not load per frame.Memory
Performance.get_monitor(Performance.MEMORY_STATIC) is stable between scene reloads..duplicate()d.queue_free() unless synchronous teardown is explicitly required.Object Pooling
© jame581, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/godot-optimization of jame581/GodotPrompter.
Open the folder on GitHubat commit 1e7d79d
Godot Optimization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Godot Optimization this skilljame581/GodotPrompter | 795 | — | ~3k | Automated safety check: Pass | MIT | |
| Godot Adapt 3D To 2Dthedivergentai/GD-Agentic-Skills | 809 | — | ~4.5k | Automated safety check: Pass | LGPL-3.0 | |
| Godot Adapt Desktop To Mobilethedivergentai/GD-Agentic-Skills | 809 | — | ~3.1k | Automated safety check: Pass | LGPL-3.0 | |
| Godot Genre Battle Royalethedivergentai/GD-Agentic-Skills | 809 | — | ~3.9k | Automated safety check: Pass | LGPL-3.0 | |
| Godot Performance Optimizationthedivergentai/GD-Agentic-Skills | 809 | — | ~3k | Automated safety check: Pass | LGPL-3.0 | |
| Godot Debugging Profilingthedivergentai/GD-Agentic-Skills | 809 | — | ~3.3k | Automated safety check: Pass | LGPL-3.0 |
thedivergentai/GD-Agentic-Skills
Expert patterns for simplifying 3D games to 2D including dimension reduction strategies, 2.5D fake-depth, isometric ports, camera flattening, physics conversion, 3D-to-sprite art pipeline, and…
thedivergentai/GD-Agentic-Skills
Expert patterns for porting desktop games to mobile including touch control schemes (virtual joystick, gesture detection), UI scaling for small screens, performance optimization for mobile GPUs…
thedivergentai/GD-Agentic-Skills
Expert blueprint for Battle Royale games including shrinking zone/storm mechanics (phase-based, damage scaling), large-scale networking (relevancy, tick rate optimization), deployment systems…
thedivergentai/GD-Agentic-Skills
Expert blueprint for performance profiling and optimization (frame drops, memory leaks, draw calls) using Godot Profiler, object pooling, visibility culling, and bottleneck identification.
thedivergentai/GD-Agentic-Skills
Expert debugging and profiling for leaks, GPU/Visual Profiler, headless CI QA, orphan nodes, thread-safe logs, and custom Debugger monitors — not print/breakpoint tutorials.
thedivergentai/GD-Agentic-Skills
Expert testing decision trees for GdUnit4: unit vs scene vs CI gates, headless runners, snapshots, and mock networks.
jame581/GodotPrompter
Covers Godot 4.3+ 2D systems with GDScript and C# examples: canvas layers, draw order, TileMaps, parallax, lights and shadows, particles and custom drawing.
jame581/GodotPrompter
Covers Godot 4.3+ 3D systems such as materials, lighting, shadows, environment, global illumination, fog, LOD, occlusion culling and decals, with GDScript first and C# second.
jame581/GodotPrompter
Builds a data-driven ability system in Godot 4 from Resources and a component node, with cooldowns, buffs, stat modifiers, gameplay tags and HUD binding.
jame581/GodotPrompter
Covers Godot 4.3+ editor plugins: plugin folders, @tool scripts, the EditorPlugin lifecycle, custom inspectors, dock panels and gizmos, in GDScript and C#.
jame581/GodotPrompter
Covers pathfinding and enemy movement in Godot 4.3 and later: navigation regions, NavigationAgent nodes, steering, behavior trees and patrol routes.
jame581/GodotPrompter
Covers animation in Godot 4.3 and later: AnimationPlayer basics, AnimationTree blend trees and state machines, sprite animation, skeleton IK and code-driven motion.
Works with
Categories
A skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks. Godot Optimization is an agent skill from jame581/GodotPrompter.
Godot Optimization fits situations like: optimizing Godot games — profiler; memory management; common bottlenecks.
Run `npx skills add jame581/GodotPrompter --skill godot-optimization -a claude-code`. Or copy the skill folder (skills/godot-optimization in jame581/GodotPrompter) into .claude/skills/godot-optimization in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jame581/GodotPrompter --skill godot-optimization -a codex`. Or copy the skill folder (skills/godot-optimization in jame581/GodotPrompter) into .agents/skills/godot-optimization in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jame581/GodotPrompter --skill godot-optimization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/godot-optimization, .gemini/skills/godot-optimization, .github/skills/godot-optimization and .opencode/skills/godot-optimization in your project.
SKILL.md names no scripts, command-line tools or credentials: Godot Optimization is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Godot Optimization is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Godot Optimization: Godot Adapt 3D To 2D (thedivergentai/GD-Agentic-Skills, 809 stars), Godot Adapt Desktop To Mobile (thedivergentai/GD-Agentic-Skills, 809 stars), Godot Genre Battle Royale (thedivergentai/GD-Agentic-Skills, 809 stars) and Godot Performance Optimization (thedivergentai/GD-Agentic-Skills, 809 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jame581 (a GitHub user) maintains it in jame581/GodotPrompter, which has 795 GitHub stars. The repository holds 58 skills in this directory. The repository was last updated on October 6, 2026.
Source: jame581/GodotPrompter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.