godot-rendering-lighting

Installation
SKILL.md

Godot rendering and lighting (lighter / graphics technical artist)

Version 0.1 (2026-10-02), part of Godot Expert Skills v0.1. Target: Godot 4.7.2.stable, macOS Apple Silicon (Metal by default).

Expert level here means that lighting comes from a measured loop: a calibration scene, one variable at a time, a rendered image looked at after every change, numbers on that image, and a GPU cost for every effect. The renderer and the GI method are chosen first, because they decide what the other settings can do. The art direction (value pattern, warm and cool, focal contrast) is judged on pixels the agent actually opened, never on the inspector.

REQUIRED BACKGROUND: godot-expert (channels, gd_run, the review loop, 4.7 traps).

Stance (the expert delta)

  1. Use lightmaps for static scenes. SeasonalAsh measured on an RTX 4060 that SDFGI roughly halves fps, VoxelGI runs at 60 to 80 fps, and lightmaps are fastest: lightmaps "9 times out of 10" unless the world is destructible (SeasonalAsh 13:07, 17:48). In 4.7.2 an agent can bake them: the editor job presses "Bake Lightmaps" itself (P7). Dynamic geometry or a moving sun means SDFGI or VoxelGI; static means LightmapGI plus ReflectionProbes.
  2. Calibrate on a lookdev scene before lighting the level. Brackeys uses guide spheres (dark, white, mirror) and Display > Lighting (Brackeys 7:19, 28:53). Picster keeps the primitive blockout for later retests (Picster 2:05, 1:15:35). lookdev.gd builds an exterior and a sealed room.
  3. Pick the tonemapper by look, then retune exposure. Brackeys and Wild Ox use AgX; SeasonalAsh and LegionGames use ACES. Measured: AgX gives the lowest p95, no clipping, and keeps an orange emitter orange where Filmic and ACES push it to yellow (P5). AgX is also the costliest tonemapper, which matters on phones (docs). A new Environment is Linear (P1): always set it.
  4. Make emission readable on two levels. Glow makes an emitter look bright; a real light (or baked GI) makes it light the scene (Brackeys 13:56, Gamefromscratch 7:09). Glow defaults changed in 4.6 (Screen, intensity 0.3, levels 2 to 4 at 0.8/0.4/0.1, P15): retune scenes made before 4.6.
  5. Never use SDFGI and VoxelGI together, and never trust SDFGI on frame one. SDFGI converges in about 30 frames (P1) and is darker right after enabling (P8). GDQuest retunes the tonemap after turning it on.
  6. Volumetric fog quality lives in Project Settings, and that is where its cost is. Four Games calls volume size 64 too low and 256 a good compromise; god rays need anisotropy about 0.7 and a shorter length (Four Games 0:32 to 3:52). Raise one hero light's Volumetric Fog Energy, drop a flashlight's to 0.1 (Brackeys 19:52, LegionGames 2:08). Measured: 512 costs +3.9 ms at 1080p (P9).
  7. The base look must hold on every renderer; tiers only add. Mobile ignores SDFGI, VoxelGI, SSR, SSAO, SSIL and volumetric fog; Compatibility the same minus SSAO; each prints one WARNING line at load (P4). Fog, glow, tonemap, lightmaps and probes carry the look everywhere [added]. Renderer fallback to Compatibility is silent since 4.4 and fallback_to_opengl3 defaults to true (docs, P15): set it false on PC so a bad driver fails loudly; on Android keeping it true is a choice, so test the Compatibility look.
  8. CompositorEffect is GLSL compute, not .gdshader (Acerola 9:39). The docs list Forward+ and Mobile, but the docs pattern (colour as a storage image) logs 172 errors on Mobile in 4.7.2 because Mobile's colour buffer lacks the storage bit, and Compatibility ignores the effect silently (P12). Ship it on Forward+ and guard Mobile. Callbacks run on the render thread: mutex any state shared with the main thread, pad push constants to multiples of 16 bytes, and remember upscaling runs after post (docs). For post with UI on top, a CanvasLayer ColorRect works everywhere (Lukky).
Installs
3
GitHub Stars
3
First Seen
Oct 31, 2026