How to minimize the visual difference between rendering backends?

Godot Version

4.2.2

Question

Hiya! I’m currently making a 3D game and want to target desktop and web. I plan to use Forward+ renderer for the desktop version for better quality overall, but will try to stick to features which are supported in Compatibility renderer. However, switching between backends reveal a big difference in colors. On Forward+ the colors are more washed out while on Compatibility they are much brighter and saturated.


What precautions could I take to minimize the difference between rendering modes? What is the root cause of this? No advanced effects in WorldEnvironment is enabled (just sky, ambient and basic fog), and similiar difference can be seen even with fresh project.

I do understand that there will be always a difference between renderers, but are there some techniques to mitigate the difference?

Currently what I’ve come up is to optimize the looks for Compatibility renderer and set up adjustments to match the looks in Forward+ (brightness 1.1 and saturation 1.5 makes it much closer).

The main visual difference in lighting is due to lights that have shadows enabled using the sRGB colorspace instead of linear in Compatibility. This is a less correct approach, but it’s faster, particularly on low-end hardware.

See also this comment in the associated pull request: Fix OpenGL convert linear to srgb with additive lighting by Arthas92t · Pull Request #90409 · godotengine/godot · GitHub

To compensate for this, decrease your DirectionalLight3D’s energy by a factor of 5 or so (e.g. go from 1.0 to 0.2) when using the Compatibility rendering method to better match the appearance of Forward+. This will need adjustments on a case-by-case basis, but in general your lights that have shadows enabled will need to be darker.

In general, I recommend using the same rendering method on all platforms as it’s far less work, even if this means the higher-end platforms will be limited by the “lowest common denominator” so to speak.

1 Like

Thanks for your detailed answer. Dividing the light energy by 5 did indeed make it about as bright as in Forward.
I think I’ll take the advice and just try to make it look as good as possible with Compatibility renderer. Shadows are a bit of a challenge, but I already have had some success lessening the artifacts…