From 401a4cbe87d570fcc28c492b880222da9db762b6 Mon Sep 17 00:00:00 2001 From: blendegames Date: Mon, 5 Jan 2026 23:58:33 -0500 Subject: [PATCH] 2 jitter positions implementation This is a basic 2 jitter positions implementation that doesn't do any major changes other then the renderer_scene_cull which is now only giving 2 different jitter positions. --- .../renderer_rd/shaders/effects/taa_resolve.glsl | 4 ++-- servers/rendering/renderer_scene_cull.cpp | 13 ++++++------- servers/rendering/renderer_viewport.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl b/servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl index 94bc126d91bb..78fc56f8feaf 100644 --- a/servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl @@ -36,8 +36,8 @@ #define GROUP_SIZE 8 #define FLT_MIN 0.00000001 #define FLT_MAX 32767.0 +#define RPC_2 0.5 #define RPC_9 0.11111111111 -#define RPC_16 0.0625 #define DISOCCLUSION_SCALE 0.01 // Scale the weight of this pixel calculated as (change in velocity - threshold) * scale. @@ -330,7 +330,7 @@ vec3 temporal_antialiasing(uvec2 pos_group_top_left, uvec2 pos_group, uvec2 pos_ color_history = clip_history_3x3(pos_group, color_history, velocity_closest); // Compute blend factor - float blend_factor = RPC_16; // We want to be able to accumulate as many jitter samples as we generated, that is, 16. + float blend_factor = RPC_2; // We want to be able to accumulate as many jitter samples as we generated, that is, 16. { // If re-projected UV is out of screen, converge to current color immediately. float factor_screen = any(lessThan(uv_reprojected, vec2(0.0))) || any(greaterThan(uv_reprojected, vec2(1.0))) ? 1.0 : 0.0; diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 8bcddc1b3a7c..3aaff948bbb6 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -2597,19 +2597,18 @@ void RendererSceneCull::render_camera(const Ref &p_render_bu 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) { - // Resize the jitter array and fill it with the pre-computed Halton sequence. camera_jitter_array.resize(p_jitter_phase_count); - - for (uint32_t i = current_jitter_count; i < p_jitter_phase_count; i++) { - camera_jitter_array[i].x = get_halton_value(i, 2); - camera_jitter_array[i].y = get_halton_value(i, 3); - } } + static const Vector2 flip2[2] = { + Vector2( 0.03f, -0.03f), + Vector2(-0.03f, 0.03f), + }; - jitter = camera_jitter_array[RSG::rasterizer->get_frame_number() % p_jitter_phase_count] / p_viewport_size; + jitter = flip2[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); } diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index b965ec6181a1..d13f307a0daa 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -259,7 +259,7 @@ void RendererViewport::_configure_3d_render_buffers(Viewport *p_viewport) { jitter_phase_count = uint32_t(8.0f * std::pow(float(target_width) / render_width, 2.0f)); } else if (use_taa) { // Default jitter count for TAA. - jitter_phase_count = 16; + jitter_phase_count = 2; } p_viewport->internal_size = Size2(render_width, render_height);