You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user