mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Add agx_white, agx_contrast and HDR support to the AgX tonemapper.
Also optimize all tonemappers to perform less calculations per-pixel. Note: unlike `white`, `agx_white` is limited to a minimum of `2.0` and defaults to `16.29`. When using a RGB10A2 render buffer, `agx_white` will be ignored and a value of `2.0` will be used instead to ensure good behavior on the Mobile renderer.
This commit is contained in:
parent
7a228b4b91
commit
628df323e2
24 changed files with 546 additions and 241 deletions
|
|
@ -722,8 +722,19 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
|
|||
tonemap.texture_size = Vector2i(color_size.x, color_size.y);
|
||||
|
||||
if (p_render_data->environment.is_valid()) {
|
||||
// When we are using RGB10A2 render buffer format, our scene
|
||||
// is limited to a maximum of 2.0. In this case we should limit
|
||||
// the max white of tonemappers, specifically AgX which defaults
|
||||
// to a high white value.
|
||||
bool limit_agx_white = rb->get_base_data_format() == RD::DATA_FORMAT_A2B10G10R10_UNORM_PACK32;
|
||||
|
||||
tonemap.tonemap_mode = environment_get_tone_mapper(p_render_data->environment);
|
||||
tonemap.white = environment_get_white(p_render_data->environment);
|
||||
RendererEnvironmentStorage::TonemapParameters params = environment_get_tonemap_parameters(p_render_data->environment, limit_agx_white);
|
||||
tonemap.tonemapper_params[0] = params.tonemapper_params[0];
|
||||
tonemap.tonemapper_params[1] = params.tonemapper_params[1];
|
||||
tonemap.tonemapper_params[2] = params.tonemapper_params[2];
|
||||
tonemap.tonemapper_params[3] = params.tonemapper_params[3];
|
||||
tonemap.white = environment_get_white(p_render_data->environment, limit_agx_white);
|
||||
tonemap.exposure = environment_get_exposure(p_render_data->environment);
|
||||
}
|
||||
|
||||
|
|
@ -882,9 +893,20 @@ void RendererSceneRenderRD::_post_process_subpass(RID p_source_texture, RID p_fr
|
|||
RendererRD::ToneMapper::TonemapSettings tonemap;
|
||||
|
||||
if (p_render_data->environment.is_valid()) {
|
||||
// When we are using RGB10A2 render buffer format, our scene
|
||||
// is limited to a maximum of 2.0. In this case we should limit
|
||||
// the max white of tonemappers, specifically AgX which defaults
|
||||
// to a high white value.
|
||||
bool limit_agx_white = rb->get_base_data_format() == RD::DATA_FORMAT_A2B10G10R10_UNORM_PACK32;
|
||||
|
||||
tonemap.tonemap_mode = environment_get_tone_mapper(p_render_data->environment);
|
||||
RendererEnvironmentStorage::TonemapParameters params = environment_get_tonemap_parameters(p_render_data->environment, limit_agx_white);
|
||||
tonemap.tonemapper_params[0] = params.tonemapper_params[0];
|
||||
tonemap.tonemapper_params[1] = params.tonemapper_params[1];
|
||||
tonemap.tonemapper_params[2] = params.tonemapper_params[2];
|
||||
tonemap.tonemapper_params[3] = params.tonemapper_params[3];
|
||||
tonemap.exposure = environment_get_exposure(p_render_data->environment);
|
||||
tonemap.white = environment_get_white(p_render_data->environment);
|
||||
tonemap.white = environment_get_white(p_render_data->environment, limit_agx_white);
|
||||
}
|
||||
|
||||
// We don't support glow or auto exposure here, if they are needed, don't use subpasses!
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue