introduced frame independence to guertin implementation

This commit is contained in:
sphynx-owner
2024-08-25 15:00:16 +03:00
parent 6563c58845
commit e7ebdac09e
3 changed files with 47 additions and 7 deletions

View File

@ -101,13 +101,15 @@ void main()
vec4 base_color = textureLod(color_sampler, x, 0.0);
vec4 vxzw = textureLod(velocity_sampler, x, 0.0) * vec4(render_size / 2., 1, 1) * params.motion_blur_intensity;
if(vn_length < 0.5)
{
imageStore(output_color, uvi, base_color);
#ifdef DEBUG
imageStore(debug_1_image, uvi, base_color);
imageStore(debug_2_image, uvi, vec4(vn / render_size * 2, 0, 1));
imageStore(debug_3_image, uvi, vec4(0));
imageStore(debug_3_image, uvi, vec4(vxzw.xy / render_size * 2, 0, 1));
imageStore(debug_4_image, uvi, vec4(0));
#endif
return;
@ -115,8 +117,6 @@ void main()
vec2 wn = safenorm(vn);
vec4 vxzw = textureLod(velocity_sampler, x, 0.0) * vec4(render_size / 2., 1, 1) * params.motion_blur_intensity;
vec2 vx = vxzw.xy;
float vx_length = max(0.5, length(vx));
@ -192,9 +192,9 @@ void main()
imageStore(output_color, uvi, sum);
#ifdef DEBUG
imageStore(debug_1_image, uvi, sum);
imageStore(debug_1_image, uvi, base_color);
imageStore(debug_2_image, uvi, vec4(vn / render_size * 2, 0, 1));
imageStore(debug_3_image, uvi, vnzw);
imageStore(debug_3_image, uvi, vec4(vx / render_size * 2, 0, 1));
imageStore(debug_4_image, uvi, vxzw);
#endif
}

View File

@ -55,7 +55,27 @@ var freeze : bool = false
func _get_max_dilation_range() -> float:
return tile_size;
var temp_intensity : float
var previous_time : float = 0
func _render_callback_2(render_size : Vector2i, render_scene_buffers : RenderSceneBuffersRD, render_scene_data : RenderSceneDataRD):
var time : float = float(Time.get_ticks_msec()) / 1000
var delta_time : float = time - previous_time
previous_time = time
temp_intensity = intensity
if framerate_independent:
var capped_frame_time : float = 1 / target_constant_framerate
if !uncapped_independence:
capped_frame_time = min(capped_frame_time, delta_time)
temp_intensity = intensity * capped_frame_time / delta_time
ensure_texture(tile_max_x, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1.))
ensure_texture(tile_max, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1. / tile_size))
ensure_texture(neighbor_max, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1. / tile_size))
@ -129,7 +149,7 @@ func _render_callback_2(render_size : Vector2i, render_scene_buffers : RenderSce
minimum_user_threshold,
importance_bias,
maximum_jitter_value,
intensity,
temp_intensity,
]
var int_blur_push_constants : PackedInt32Array = [
tile_size,

View File

@ -55,7 +55,27 @@ var freeze : bool = false
func _get_max_dilation_range() -> float:
return tile_size;
var temp_intensity : float
var previous_time : float = 0
func _render_callback_2(render_size : Vector2i, render_scene_buffers : RenderSceneBuffersRD, render_scene_data : RenderSceneDataRD):
var time : float = float(Time.get_ticks_msec()) / 1000
var delta_time : float = time - previous_time
previous_time = time
temp_intensity = intensity
if framerate_independent:
var capped_frame_time : float = 1 / target_constant_framerate
if !uncapped_independence:
capped_frame_time = min(capped_frame_time, delta_time)
temp_intensity = intensity * capped_frame_time / delta_time
ensure_texture(tile_max_x, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1.))
ensure_texture(tile_max, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1. / tile_size))
ensure_texture(neighbor_max, render_scene_buffers, RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT, Vector2(1. / tile_size, 1. / tile_size))
@ -129,7 +149,7 @@ func _render_callback_2(render_size : Vector2i, render_scene_buffers : RenderSce
minimum_user_threshold,
importance_bias,
maximum_jitter_value,
intensity,
temp_intensity,
]
var int_blur_push_constants : PackedInt32Array = [
tile_size,