Skip to content
Development
Skill

/rendering-pipeline

Use when choosing a renderer or planning a project's look and frame budget — renderer per platform, lighting strategy and light limits, anti-aliasing, 3D resolution scaling (FSR, MetalFX), SubViewports and render targets, shader stutter, graphics settings menus, and rendering

BOOST
From plugin
godot-prompter
86261 skills9 agents1 hook
Install
$ npx -y skills add jame581/GodotPrompter --skill rendering-pipeline --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/rendering-pipeline

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when choosing a renderer or planning a project's look and frame budget — renderer per platform, lighting strategy and light limits, anti-aliasing, 3D resolution scaling (FSR, MetalFX), SubViewports and render targets, shader stutter, graphics settings menus, and rendering

SKILL.md

rendering-pipeline.SKILL.md
name: rendering-pipeline
description: Use when choosing a renderer or planning a project's look and frame budget — renderer per platform, lighting strategy and light limits, anti-aliasing, 3D resolution scaling (FSR, MetalFX), SubViewports and render targets, shader stutter, graphics settings menus, and rendering stats

Rendering Pipeline in Godot 4.3+

Project-level rendering decisions: which renderer runs where, how the lighting is built for it, how edges are smoothed, what resolution 3D renders at, and how to measure the result. All examples target Godot 4.3+ with no deprecated APIs. GDScript is shown first, then C#.

This skill picks the strategy; **3d-essentials** holds the per-node recipes (materials, light properties, GI setup, fog, decals).

> **Related skills:** **3d-essentials** for materials, lights, environment and GI node setup, **2d-essentials** for 2D lights and shadows, **shader-basics** for post-processing, compositor effects and the Shader Baker, **godot-optimization** for profiling CPU/GPU bottlenecks, **web-export** for the Compatibility-only browser target.

---

1. Pick the Renderer First

The renderer decides which lighting features exist at all, so choose it before building the look.

| Renderer | `rendering_method` | Use for | Missing compared to Forward+ | |---|---|---|---| | **Forward+** | `forward_plus` | Desktop and console, high-end visuals | — | | **Mobile** | `mobile` | Phones, tablets, standalone XR, low-end desktop | SDFGI, VoxelGI, SSAO/SSIL/SSR, volumetric fog, TAA, FSR | | **Compatibility** | `gl_compatibility` | Web (the only option there), very old GPUs | Everything Mobile lacks (though SSAO arrives in 4.6), plus FXAA/SMAA and MetalFX; glow is a simplified version |

Set **Project Settings → Rendering → Renderer → Rendering Method**. Platform overrides already exist: `rendering/renderer/rendering_method.mobile` defaults to `mobile` and `rendering_method.web` to `gl_compatibility`, so one project can run Forward+ on desktop and Mobile on phones — but then **test the look on both**, because effects silently disappear on the lighter renderer.

A settings menu must hide options the running renderer cannot honor. The later sections use this helper:

func is_forward_plus() -> bool:
    # Godot 4.4+: prefer RenderingServer.get_current_rendering_method(), which also sees
    # the --rendering-method CLI flag and the automatic fallback on unsupported hardware.
    return ProjectSettings.get_setting_with_override("rendering/renderer/rendering_method") == "forward_plus"
public static bool IsForwardPlus()
{
    // Godot 4.4+: prefer RenderingServer.GetCurrentRenderingMethod(), which also sees
    // the --rendering-method CLI flag and the automatic fallback on unsupported hardware.
    return ProjectSettings.GetSettingWithOverride("rendering/renderer/rendering_method").AsString() == "forward_plus";
}

Short feature table: see the renderer comparison in **3d-essentials** (`references/renderer-comparison.md`).

---

2. Lighting Strategy

Decide where light comes from before placing lights. Baked light is nearly free at runtime on every renderer; real-time GI is Forward+ only.

| Scene | Forward+ | Mobile | Compatibility | |---|---|---|---| | Static level, fixed sun | LightmapGI + real-time sun shadows | LightmapGI | LightmapGI | | Day/night cycle, large outdoor | SDFGI | Sky ambient + DirectionalLight3D | Sky ambient + DirectionalLight3D | | Small dynamic interiors | VoxelGI | LightmapGI + ReflectionProbes | LightmapGI + ReflectionProbes | | Procedural levels (nothing to bake) | SDFGI | Ambient + a few shadowed lights | Ambient + few unshadowed lights |

**Light budgets**

| Renderer | Limit | Setting | |---|---|---| | Forward+ | 512 clustered elements (omni + spot lights + decals + reflection probes) in view | `rendering/limits/cluster_builder/max_clustered_elements` | | Mobile | 8 omni + 8 spot lights per mesh | — split large meshes so lights don't compete | | Compatibility | 8 omni + 8 spot lights per object; 32 renderable lights per type (omni, spot) per frame | `rendering/limits/opengl/max_lights_per_object`, `max_renderable_lights` |

Rules that hold everywhere:

  • **Shadows are the expensive part, not lights.** Keep one shadowed `DirectionalLight3D`; turn `shadow_enabled` off on fill lights and small props.
  • **Bake what doesn't move.** Set static lights' `light_bake_mode` to Static so the lightmap carries them and they cost nothing at runtime. Baking needs a Forward+ or Mobile capable editor; the baked result plays on all three renderers.
  • **Fade distant lights** with `distance_fade_enabled` instead of leaving dozens active.

Light and GI node setup: **3d-essentials** (Sections 3 and 5).

---

3. Anti-Aliasing

| Method | Cost | Smooths | Renderers | Notes | |---|---|---|---|---| | MSAA 2×/4×/8× (`msaa_3d`) | Medium–high | Geometry edges | All three | 2× or 4× is usually the sweet spot; no help with shader/texture shimmer | | FXAA (`screen_space_aa`) | Low | Everything, blurry | Forward+, Mobile | Cheapest whole-image option | | SMAA (Godot 4.5+) | Low–medium | Everything, sharper than FXAA | Forward+, Mobile | Tune `rendering/anti_aliasing/quality/smaa_edge_detection_threshold` | | TAA (`use_taa`) | Medium | Everything incl. specular shimmer | Forward+ only | Ghosting on particles and skinned meshes | | FSR 2 at scale `1.0` | Medium | Like TAA, sharper | Forward+ only | Set `scaling_3d_mode` to FSR 2 and `scaling_3d_scale = 1.0` |

The project settings (`rendering/anti_aliasing/quality/*`) are read once at startup. To change AA from a settings menu, set the root viewport:

func apply_antialiasing(msaa: Viewport.MSAA, use_fxaa: bool, use_taa: bool) -> void:
    var vp := get_viewport()
    vp.msaa_3d = msaa
    vp.screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA if use_fxaa else Viewport.SCREEN_SPACE_AA_DISABLED
    vp.use_taa = use_taa and is_forward_plus()
public void ApplyAnti
Read more
Ships withgodot-prompter

Agentic skills framework for Godot 4.x game development. Gives AI coding agents domain-specific expertise for GDScript and C# projects.

Get the whole plugin

Other skills on godot-prompter.