mirror of
https://github.com/godotengine/godot.git
synced 2026-02-07 19:32:36 +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:
@@ -147,6 +147,10 @@ void ToneMapper::tonemapper(RID p_source_color, RID p_dst_framebuffer, const Ton
|
||||
}
|
||||
|
||||
tonemap.push_constant.tonemapper = p_settings.tonemap_mode;
|
||||
tonemap.push_constant.tonemapper_params[0] = p_settings.tonemapper_params[0];
|
||||
tonemap.push_constant.tonemapper_params[1] = p_settings.tonemapper_params[1];
|
||||
tonemap.push_constant.tonemapper_params[2] = p_settings.tonemapper_params[2];
|
||||
tonemap.push_constant.tonemapper_params[3] = p_settings.tonemapper_params[3];
|
||||
tonemap.push_constant.flags |= p_settings.use_auto_exposure ? TONEMAP_FLAG_USE_AUTO_EXPOSURE : 0;
|
||||
tonemap.push_constant.exposure = p_settings.exposure;
|
||||
tonemap.push_constant.white = p_settings.white;
|
||||
@@ -237,6 +241,11 @@ void ToneMapper::tonemapper_mobile(RID p_source_color, RID p_dst_framebuffer, co
|
||||
tonemap_mobile.push_constant.white = p_settings.white;
|
||||
tonemap_mobile.push_constant.luminance_multiplier = p_settings.luminance_multiplier;
|
||||
|
||||
tonemap_mobile.push_constant.tonemapper_params[0] = p_settings.tonemapper_params[0];
|
||||
tonemap_mobile.push_constant.tonemapper_params[1] = p_settings.tonemapper_params[1];
|
||||
tonemap_mobile.push_constant.tonemapper_params[2] = p_settings.tonemapper_params[2];
|
||||
tonemap_mobile.push_constant.tonemapper_params[3] = p_settings.tonemapper_params[3];
|
||||
|
||||
uint32_t spec_constant = 0;
|
||||
spec_constant |= p_settings.use_bcs ? TONEMAP_MOBILE_FLAG_USE_BCS : 0;
|
||||
spec_constant |= p_settings.use_glow ? TONEMAP_MOBILE_FLAG_USE_GLOW : 0;
|
||||
@@ -324,6 +333,11 @@ void ToneMapper::tonemapper_subpass(RD::DrawListID p_subpass_draw_list, RID p_so
|
||||
tonemap_mobile.push_constant.white = p_settings.white;
|
||||
tonemap_mobile.push_constant.luminance_multiplier = p_settings.luminance_multiplier;
|
||||
|
||||
tonemap_mobile.push_constant.tonemapper_params[0] = p_settings.tonemapper_params[0];
|
||||
tonemap_mobile.push_constant.tonemapper_params[1] = p_settings.tonemapper_params[1];
|
||||
tonemap_mobile.push_constant.tonemapper_params[2] = p_settings.tonemapper_params[2];
|
||||
tonemap_mobile.push_constant.tonemapper_params[3] = p_settings.tonemapper_params[3];
|
||||
|
||||
uint32_t spec_constant = TONEMAP_MOBILE_ADRENO_BUG;
|
||||
spec_constant |= p_settings.use_bcs ? TONEMAP_MOBILE_FLAG_USE_BCS : 0;
|
||||
//spec_constant |= p_settings.use_glow ? TONEMAP_MOBILE_FLAG_USE_GLOW : 0;
|
||||
|
||||
@@ -122,6 +122,8 @@ private:
|
||||
float white; // 4 - 88
|
||||
float auto_exposure_scale; // 4 - 92
|
||||
float luminance_multiplier; // 4 - 96
|
||||
|
||||
float tonemapper_params[4]; // 16 - 112
|
||||
};
|
||||
|
||||
struct TonemapPushConstantMobile {
|
||||
@@ -135,6 +137,8 @@ private:
|
||||
float glow_map_strength; // 4 - 40
|
||||
float exposure; // 4 - 44
|
||||
float white; // 4 - 48
|
||||
|
||||
float tonemapper_params[4]; // 16 - 64
|
||||
};
|
||||
|
||||
/* tonemap actually writes to a framebuffer, which is
|
||||
@@ -171,6 +175,7 @@ public:
|
||||
RID glow_map;
|
||||
|
||||
RS::EnvironmentToneMapper tonemap_mode = RS::ENV_TONE_MAPPER_LINEAR;
|
||||
float tonemapper_params[4] = { 0.0, 0.0, 0.0, 0.0 };
|
||||
float exposure = 1.0;
|
||||
float white = 1.0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user