mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Jitter shadow map dithering pattern across frames when TAA is enabled
This improves shadow quality by reducing the visibility of the noisy pattern caused by dithering. This jittering also applies when FSR2 is enabled, as it provides its own form of temporal antialiasing. Co-authored-by: Clay John <claynjohn@gmail.com>
This commit is contained in:
parent
155fcd00b0
commit
0eb06da057
10 changed files with 54 additions and 47 deletions
|
@ -2700,6 +2700,7 @@ void RendererSceneCull::render_camera(const Ref<RenderSceneBuffers> &p_render_bu
|
|||
ERR_FAIL_NULL(camera);
|
||||
|
||||
Vector2 jitter;
|
||||
float taa_frame_count = 0.0f;
|
||||
if (p_jitter_phase_count > 0) {
|
||||
uint32_t current_jitter_count = camera_jitter_array.size();
|
||||
if (p_jitter_phase_count != current_jitter_count) {
|
||||
|
@ -2713,6 +2714,7 @@ void RendererSceneCull::render_camera(const Ref<RenderSceneBuffers> &p_render_bu
|
|||
}
|
||||
|
||||
jitter = camera_jitter_array[RSG::rasterizer->get_frame_number() % p_jitter_phase_count] / p_viewport_size;
|
||||
taa_frame_count = float(RSG::rasterizer->get_frame_number() % p_jitter_phase_count);
|
||||
}
|
||||
|
||||
RendererSceneRender::CameraData camera_data;
|
||||
|
@ -2755,7 +2757,7 @@ void RendererSceneCull::render_camera(const Ref<RenderSceneBuffers> &p_render_bu
|
|||
} break;
|
||||
}
|
||||
|
||||
camera_data.set_camera(transform, projection, is_orthogonal, vaspect, jitter, camera->visible_layers);
|
||||
camera_data.set_camera(transform, projection, is_orthogonal, vaspect, jitter, taa_frame_count, camera->visible_layers);
|
||||
} else {
|
||||
// Setup our camera for our XR interface.
|
||||
// We can support multiple views here each with their own camera
|
||||
|
@ -2777,7 +2779,7 @@ void RendererSceneCull::render_camera(const Ref<RenderSceneBuffers> &p_render_bu
|
|||
}
|
||||
|
||||
if (view_count == 1) {
|
||||
camera_data.set_camera(transforms[0], projections[0], false, camera->vaspect, jitter, camera->visible_layers);
|
||||
camera_data.set_camera(transforms[0], projections[0], false, camera->vaspect, jitter, p_jitter_phase_count, camera->visible_layers);
|
||||
} else if (view_count == 2) {
|
||||
camera_data.set_multiview_camera(view_count, transforms, projections, false, camera->vaspect);
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue