mirror of
https://github.com/sphynx-owner/JFA_driven_motion_blur_addon.git
synced 2025-09-19 04:06:08 +08:00
introduced frame independence to guertin implementation
This commit is contained in:
@ -101,13 +101,15 @@ void main()
|
|||||||
|
|
||||||
vec4 base_color = textureLod(color_sampler, x, 0.0);
|
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)
|
if(vn_length < 0.5)
|
||||||
{
|
{
|
||||||
imageStore(output_color, uvi, base_color);
|
imageStore(output_color, uvi, base_color);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
imageStore(debug_1_image, uvi, base_color);
|
imageStore(debug_1_image, uvi, base_color);
|
||||||
imageStore(debug_2_image, uvi, vec4(vn / render_size * 2, 0, 1));
|
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));
|
imageStore(debug_4_image, uvi, vec4(0));
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
@ -115,8 +117,6 @@ void main()
|
|||||||
|
|
||||||
vec2 wn = safenorm(vn);
|
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;
|
vec2 vx = vxzw.xy;
|
||||||
|
|
||||||
float vx_length = max(0.5, length(vx));
|
float vx_length = max(0.5, length(vx));
|
||||||
@ -192,9 +192,9 @@ void main()
|
|||||||
|
|
||||||
imageStore(output_color, uvi, sum);
|
imageStore(output_color, uvi, sum);
|
||||||
#ifdef DEBUG
|
#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_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);
|
imageStore(debug_4_image, uvi, vxzw);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
@ -55,7 +55,27 @@ var freeze : bool = false
|
|||||||
func _get_max_dilation_range() -> float:
|
func _get_max_dilation_range() -> float:
|
||||||
return tile_size;
|
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):
|
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_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(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))
|
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,
|
minimum_user_threshold,
|
||||||
importance_bias,
|
importance_bias,
|
||||||
maximum_jitter_value,
|
maximum_jitter_value,
|
||||||
intensity,
|
temp_intensity,
|
||||||
]
|
]
|
||||||
var int_blur_push_constants : PackedInt32Array = [
|
var int_blur_push_constants : PackedInt32Array = [
|
||||||
tile_size,
|
tile_size,
|
||||||
|
@ -55,7 +55,27 @@ var freeze : bool = false
|
|||||||
func _get_max_dilation_range() -> float:
|
func _get_max_dilation_range() -> float:
|
||||||
return tile_size;
|
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):
|
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_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(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))
|
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,
|
minimum_user_threshold,
|
||||||
importance_bias,
|
importance_bias,
|
||||||
maximum_jitter_value,
|
maximum_jitter_value,
|
||||||
intensity,
|
temp_intensity,
|
||||||
]
|
]
|
||||||
var int_blur_push_constants : PackedInt32Array = [
|
var int_blur_push_constants : PackedInt32Array = [
|
||||||
tile_size,
|
tile_size,
|
||||||
|
Reference in New Issue
Block a user