A room can contain detailed models and still be difficult to read. This exercise starts with simple shapes so you can see what each lighting decision changes. You will establish a direct light, control the environment, compare material roughness, and decide whether indirect lighting belongs in your project. Keep one camera position throughout the experiment so the comparisons mean something.
Need a quick definition? Look up SSAO, SSGI and Godot’s SSIL, or global illumination before choosing an effect.
If the scene is unexpectedly dark, start with the dark-scene troubleshooting guide to check preview lighting, materials, and camera overrides before styling the room.
1. Prepare a scene you can compare
Use the floor, player, Camera3D, Sun, and WorldEnvironment from the first 3D scene tutorial. Save a copy as LightingRoom.tscn. Keep the camera at (0, 6, 9), rotation (-35, 0, 0) degrees. Remove the player script in this copy so the capsule stays in place while you inspect lighting. Set Player’s position to (0, 0.9, 0), so its 1.8-unit capsule rests on the floor, and keep its geometry unchanged.
Add two MeshInstance3D nodes under Main, named MatteSample and GlossySample. Give each a SphereMesh with Radius 0.6 and Height 1.2. Position them at (-2, 0.6, 0) and (2, 0.6, 0). These are display objects; they do not need physics bodies in this exercise. Give each sphere its own StandardMaterial3D in Material Override. Do not share one material, because the next comparison needs independent settings.
Use the same neutral albedo on both spheres, Metallic = 0, and keep Transparency disabled. Set Roughness to 0.85 on MatteSample and 0.15 on GlossySample. Leave optional post-processing effects off. Save a baseline screenshot from the running scene, with the renderer and viewport size written beside it.
Select a node to inspect it.
Groups objects in 3D space. Moving or rotating it also transforms its children.
A copy of Main.tscn for lighting comparisons.
A physics body for solid geometry that does not move, such as the floor. Its collision shape defines the solid boundary.
Keep its mesh and collider children from the first scene.
Child of Main
A body controlled by your script. It provides movement and collision methods; it does not walk or fall without code.
- Position
- (0, 0.9, 0)
- Script
- None in this copy
Remove its script for this stationary lighting study.
Child of Main
Defines the view used to render the game. The editor viewport is separate from this game camera.
- Position
- (0, 6, 9)
- Rotation degrees
- (-35, 0, 0)
- Current
- On
Keep the same view for each comparison.
Child of Main
Lights the scene with parallel rays. Its rotation sets the light direction; its position does not.
- Energy
- 1.0
- Shadow enabled
- On
- Rotation degrees
- (-55, -25, 0)
Start with one direct light.
Child of Main
Holds the Environment resource used for background, ambient lighting, and supported visual effects.
- Ambient source
- Color
- Ambient energy
- 0.3
Compare the color ambient baseline before switching to a sky.
Child of Main
Displays a mesh. The material controls its appearance; a separate physics body and shape handle collision.
- Position
- (-2, 0.6, 0)
- Mesh
- SphereMesh
- Radius
- 0.6
- Height
- 1.2
- Roughness
- 0.85
- Metallic
- 0
Give this sphere its own StandardMaterial3D in Material Override.
Child of Main
Displays a mesh. The material controls its appearance; a separate physics body and shape handle collision.
- Position
- (2, 0.6, 0)
- Mesh
- SphereMesh
- Radius
- 0.6
- Height
- 1.2
- Roughness
- 0.15
- Metallic
- 0
Use a separate material so this roughness can change independently.
Child of Main
Lighting-focused view. The floor and player child nodes are the same as in the first room guide.
2. Establish a light direction before adding fill
Select Sun, keep rotation (-55, -25, 0) degrees, and start Light → Energy at 1.0. Enable Shadow. The position of a DirectionalLight3D does not place the sun closer to an object; rotate it to change where its rays come from. Run the room and identify the bright side of the capsule and the direction of its cast shadow.
Rotate Sun around Y in small steps while leaving every other setting unchanged. Choose an angle where the capsule is distinct from the floor and both spheres show a readable highlight. This is an art-direction decision: a light that creates dramatic silhouettes may be a poor choice for a game where players must judge exact platform edges.
3. Separate the background from ambient illumination
Select WorldEnvironment and open its Environment resource. First compare Ambient Light → Energy at 0.0 and 0.3 with Source set to Color. Watch the unlit side of the capsule. Ambient illumination makes those surfaces readable, but pushing it too high removes useful contrast. Keep the direct light fixed during this comparison.
Now set Background → Mode to Sky, create a Sky resource, and assign a ProceduralSkyMaterial to its Sky Material. Set Ambient Light → Source to Sky. Use Reflected Light → Source = Sky so glossy objects have a sky to reflect. This changes the lighting setup, so take a second baseline image rather than trying to compare it with a screenshot that also used different materials.
A background, ambient illumination, and reflected light answer different questions: what is behind the scene, how do unlit surfaces receive fill, and what appears in shiny surfaces? WorldEnvironment groups their settings, but increasing a background color is not a reliable substitute for understanding the chosen ambient source.
4. Compare material response, not just color
Look at MatteSample and GlossySample under the same sun and environment. The low-roughness sample should have a tighter specular response; the high-roughness sample spreads it out. Neither roughness setting changes the sphere’s silhouette. Switch their roughness values and verify that the look follows the material setting rather than the position in the room.
For a second experiment, duplicate one material and set Metallic to 1.0. Compare it with the nonmetal sample under the sky. A metal without a useful reflection source can look unexpectedly dark. Before increasing every light, inspect the environment and reflection settings. Use Metallic = 0 for an ordinary painted, stone, or plastic surface; use the metal comparison as a separate material study.
Do not use emission to rescue every dark object. An emissive surface can appear bright without lighting neighboring objects in this setup. Bloom or glow also does not automatically supply bounced illumination. If the neighboring floor must receive light, use an actual light or a suitable global illumination technique and check its renderer support.
5. Fix shadows in a deliberate order
Start with the geometry: the objects should meet the floor, use sensible dimensions, and cast shadows. Then inspect shadow settings. A crawling dark pattern on a lit surface can indicate shadow acne. A shadow that appears detached from the sphere can indicate excessive bias. Adjust one bias control in small increments and return to the saved baseline when the result gets worse.
For this small room, try reducing Sun’s directional Shadow Max Distance to around 25 units and compare the visible detail. That value is an exercise starting point; a larger level needs a distance suited to its camera and view. Raising resolution or adding softer shadows has a cost, so judge the result at the actual game resolution, not only while zoomed into the editor.
Avoid assuming that all shadow options work identically across rendering methods. In the current renderer comparison, directional PCSS belongs to Forward+. Keep a plain shadow baseline if you intend to compare Mobile or Compatibility. The renderer guide gives a small test plan for those differences.
6. Decide whether you need bounced light
Global illumination addresses indirect lighting: for example, light bouncing off a colored wall onto a nearby object. Our room deliberately starts without it. Add it when a specific visual problem requires it, not because a tutorial’s screenshot lists a large number of enabled effects.
- LightmapGI: investigate for mostly static environments. Baking is an authoring step; it needs suitable lightmap UVs and compatible baking hardware. Change the static geometry or lighting, then rebake.
- VoxelGI and SDFGI: investigate for Forward+ projects that need their dynamic GI capabilities. They have different setup and performance tradeoffs; neither is a portable baseline for every renderer.
- ReflectionProbe: supplies local reflected surroundings. It is useful to investigate for a shiny object that should reflect a room rather than only the sky; it is not a replacement for every form of indirect diffuse light.
If you choose lightmaps, begin with one static floor and wall rather than baking an entire game. Read the official LightmapGI workflow linked below, generate the required UV2 data, set the participating geometry’s GI mode appropriately, bake, and inspect the exported result. Keep moving objects as a separate test case: a baked environment is not the same thing as a fully dynamic lighting solution.
7. Keep a comparison that can guide the next decision
- Capture the baseline and one changed setting from the same camera.
- Label each capture with renderer, viewport size, and the changed value.
- Check player visibility, contact shadows, and the material highlight before judging atmosphere.
- Test an exported build on the intended device before adding another expensive effect.
If the scene looks flat, reduce ambient fill and recheck the light direction. If it looks black only while running, verify the saved Camera3D and WorldEnvironment. If every duplicate changes at once, make the material resource unique. If a shiny sphere reflects the wrong world, inspect its reflected-light source before changing its albedo.
Bring the chosen lighting back into your playable room and move the character through it. A pleasant still image is only one check: the player must remain readable near edges and behind obstacles. Continue with renderer selection and performance comparisons, or revisit the room setup if camera or collision behavior is still unclear.
Choose how your game renders
Compare the same room on the rendering methods available to your target device.
Sources and revision context
Added a link to the dark-scene troubleshooting guide on September 8, 2026. The existing lighting experiment and its documentation-review scope are unchanged.