summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/forward_clustered
diff options
context:
space:
mode:
authorDario <dariosamo@gmail.com>2024-05-10 11:57:27 -0300
committerDario <dariosamo@gmail.com>2024-05-10 11:57:27 -0300
commit3f64eeb393d1c2089b0e93449c01d09a62fc096e (patch)
tree58e9032cfe9fe3c1a17f9fb7936cbab46d8e470f /servers/rendering/renderer_rd/forward_clustered
parent2ba22d1554ded08094e3869a83bd87487266ad38 (diff)
downloadredot-engine-3f64eeb393d1c2089b0e93449c01d09a62fc096e.tar.gz
Rewrite reprojection for FSR2 to work correctly with Reverse-Z.
Diffstat (limited to 'servers/rendering/renderer_rd/forward_clustered')
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
index 2df0331688..8175010caf 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -2289,11 +2289,14 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
params.delta_time = float(time_step);
params.reset_accumulation = false; // FIXME: The engine does not provide a way to reset the accumulation.
+ Projection correction;
+ correction.set_depth_correction(true, true, false);
+
const Projection &prev_proj = p_render_data->scene_data->prev_cam_projection;
const Projection &cur_proj = p_render_data->scene_data->cam_projection;
const Transform3D &prev_transform = p_render_data->scene_data->prev_cam_transform;
const Transform3D &cur_transform = p_render_data->scene_data->cam_transform;
- params.reprojection = prev_proj.flipped_y() * prev_transform.affine_inverse() * cur_transform * cur_proj.flipped_y().inverse();
+ params.reprojection = (correction * prev_proj) * prev_transform.affine_inverse() * cur_transform * (correction * cur_proj).inverse();
fsr2_effect->upscale(params);
}