Post-processing
Camera profiles, volumes, exposure, bloom, LUTs and diagnostics.
Camera profiles
PostProcessProfile stores image effects separately from level lighting and materials. Multiple cameras can share a profile; edits affect every reference to that resource. Duplicate the profile when a camera needs an independent look.
Use Forward+ or Deferred for the full desktop 3D effect set. Mobile, Compatibility and Canvas have different capabilities: retaining a setting does not mean the selected renderer executes the effect. Choose a renderer.
- Select the game
Camera3D, rather than the editor's free camera. - Assign or create a
PostProcessProfileunder Post Processing. - Open the profile in Inspector and add the required effect.
- Enable the effect and the override checkboxes beside the parameters you want it to control. A parameter checkbox makes the profile supply that value.
- Check the camera's
Post Process Weight: zero removes the profile's influence. - Save the profile as
.rdata, save the scene and run with that same camera.
Start with manual exposure and tone mapping. Keep exposure fixed while adjusting lights; automatic adaptation would otherwise compensate for your changes.
Adjustment order
| Goal | Tool | Check |
|---|---|---|
| Correct an overly bright or dark frame | Exposure, Tonemap | Light intensity and manual exposure first, then tone mapping |
| Reveal shadows without lifting the entire frame | Local Exposure | Renderer support and halos along high-contrast edges |
| Shape color | Color Grading, Channel Mixer, Curves, LUT | Do not use strong grading to compensate for incorrect exposure |
| Add glow | Bloom | Bright areas should provide an intentional source of glow |
| Blur objects outside the focal plane | Depth of Field | Focus distance, camera mode and depth availability |
| Add optical character | Vignette, Grain, Flare, Aberration | Detail and UI legibility at the target resolution |
Automatic exposure meters the image and requires Forward+ or Deferred. Physical DOF requires CameraAttributesPhysical on the camera. Sharpening on top of an upscaler can amplify noise and edges; check the upscaler's existing sharpening first.
Bloom, LUTs and presets
Standard bloom provides soft glow. Convolution bloom uses an optical kernel; account for the cost and kernel size. Avoid maximizing every layer: inspect contrast and detail around bright objects.
Color controls include wheels, channel mixing, curves and LUTs. .cube import is supported. Store the chosen LUT in the project with its required license; referencing an external folder does not include the file in your game distribution.
Look profiles and shader presets remain editable. Save a project-specific resource, then change individual parameters. Removing an effect differs from disabling its overrides: a disabled override allows another source to supply the value.
Local volumes and blending
PostProcessVolume3D applies a profile according to the camera's position. A character entering a volume does not change the image if the camera remains outside.
- Add
PostProcessVolume3Dand assign a separate profile, for example an interior look. - Disable
Globalfor a local zone; choose Box or Sphere and setSizeorRadius. - Set
Blend Distancefor a gradual transition. - Check the volume's
Enabled,WeightandPriority. - Enable
Post Process Use Volumeson the camera. Its volume mask must overlap the zone'sVolume Mask. - Move the game camera across the boundary and compare the image inside and outside.
Global volumes are not limited by boundary distance. Overlapping volumes resolve according to priorities, weights and enabled overrides. Keep a local profile limited to the parameters that should actually change.
2D cameras and PostProcessVolume2D also support profiles. Canvas has no 3D scene depth or normals; SSAO, SSR and effects that require those inputs cannot be treated as ordinary Canvas color filters. Separate scene processing from HUD processing when the interface needs to remain legible.
Assign a profile from C#
Attach this component to a Camera3D and assign the resource to Look in Inspector:
using Reckfell;
public partial class CameraLook : Camera3D
{
[Export] public PostProcessProfile Look { get; set; } = null!;
public override void _Ready()
{
PostProcessProfile = Look;
PostProcessWeight = 1.0;
PostProcessUseVolumes = true;
}
}Troubleshooting
| Symptom | Check |
|---|---|
| A value changes without affecting the frame | Active camera, profile weight, effect Enabled and parameter override |
| A volume has no effect | Camera position, Global/zone size, Weight and overlapping masks |
| A value unexpectedly returns | Other volumes and the final parameter's source in diagnostics |
| An effect works in 3D but not Canvas | Depth, normal and renderer requirements |
| Brightness is excessive or unstable | Automatic exposure, light intensity and profile changes |
| Camera motion leaves trails | Temporal accumulation and editor/game setting differences |
Use before/after comparison, parameter-source inspection, volume weights and image scopes: histogram, waveform, RGB Parade and vectorscope. Change one effect at a time with the same camera and exposure.
Custom fullscreen materials support insertion stages, camera inputs and intermediate textures. Choose a stage that supplies the required inputs; surface data and depth are not available everywhere. Shaders and Shader Graph.