godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
88.12k stars 19.94k forks source link

CameraAttributes exposure doesn't affect unshaded materials, but auto exposure does #89266

Open SODABYTES opened 5 months ago

SODABYTES commented 5 months ago

Tested versions

Reproducible in: 4.2.1,stable.official, 4.3.dev4.official

System information

Godot v4.3.dev4 - Windows 10.0.22000 - Vulkan (Forward+) - integrated Intel(R) UHD Graphics (Intel Corporation; 26.20.100.7926) - Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz (8 Threads)

Issue description

Unshaded materials will correctly stay unshaded when manually adjusting a CameraAttributes' exposure, but enabling auto exposure will brighten/darken them. Additionally, the exposure shader parameter doesn't seem to be affected by auto exposure. Happens in both Forward+ and Mobile renderers.

Steps to reproduce

Make a mesh with an unshaded material. Make a WorldEnvironment, give it camera attributes, enable Auto Exposure. Put them in the same scene and watch the magic happen.

Minimal reproduction project (MRP)

Auto Exposure MRP.zip

yosoyfreeman commented 5 months ago

I can confirm that exposure does not adjust the unshaded materials correctly and they will stay unchanged. Tonemap exposure and auto exposure works correctly.

AThousandShips commented 5 months ago

I believe the effect is post processing, not related to any individual mesh, unsure if this is a limitation or a bug, though the discrepancy is interesting

Note that the unshaded mode doesn't claim to disable all effects, only:

The object will not receive shadows. This is the fastest to render, but it disables all interactions with lights.

The exposure is completely unrelated to that

yosoyfreeman commented 5 months ago

Agree. Unshaded is meant to not be affected by light, but exposure is not related with the geometry or the light itself but with the light values of the final render or "Photo" in camera terms. This is being done correctly in all other places where there is an exposure setting.

In unreal this will happen too, and you need an special setup to take exposure into account. I believe a proposal to make this an option for unshaded models may be good for artistic purposes, but even if you have an unshaded model, most of the time you want to adjust your final image, exposure included.

EDIT: For more context, doing this in blender cycles would require you to create an emmisive setup but only read the light on the camera, so it does not emit light to other geometry. I agree this can be tricky, but is the expected behaviour. Maybe a light mode specifically for this purpose would be indeed useful as it would allow to create, for example, 3D UI that remains constant.