From ac4ca8900096d099e14498cf7563f9bb04a286fe Mon Sep 17 00:00:00 2001 From: Arman Elgudzhyan <48544263+puchik@users.noreply.github.com> Date: Sat, 20 May 2023 16:40:16 -0700 Subject: [PATCH] Take 3D resolution scaling into account for mesh LOD --- servers/rendering/renderer_rd/renderer_scene_render_rd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index efd961fd8992..16bc36f4b832 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -964,7 +964,12 @@ void RendererSceneRenderRD::render_scene(const Ref &p_render scene_data.z_far = p_camera_data->main_projection.get_z_far(); // this should be the same for all cameras.. - scene_data.lod_distance_multiplier = p_camera_data->main_projection.get_lod_multiplier(); + const float lod_distance_multiplier = p_camera_data->main_projection.get_lod_multiplier(); + + // Also, take into account resolution scaling for the multiplier, since we have more leeway with quality + // degradation visibility. Conversely, allow upwards scaling, too, for increased mesh detail at high res. + const float scaling_3d_scale = GLOBAL_GET("rendering/scaling_3d/scale"); + scene_data.lod_distance_multiplier = lod_distance_multiplier * (1.0 / scaling_3d_scale); if (get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_DISABLE_LOD) { scene_data.screen_mesh_lod_threshold = 0.0;