From 9e4caef0ddcae86281ab1ef237abe49bd0e0e490 Mon Sep 17 00:00:00 2001 From: sphynx-owner Date: Mon, 8 Jul 2024 00:33:11 +0300 Subject: [PATCH] feature: Added uncapped_independence toggle --- MainScene.tscn | 1 + MyJumpFloodIteration/jump_flood_blur.gd | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/MainScene.tscn b/MainScene.tscn index 7926eed..6859e96 100644 --- a/MainScene.tscn +++ b/MainScene.tscn @@ -102,6 +102,7 @@ backtracking_velocity_match_parallel_sensitivity = 0.5 backtracking_velcoity_match_perpendicular_sensitivity = 0.1 JFA_pass_count = 3 framerate_independent = true +uncapped_independence = false target_constant_framerate = 30.0 [sub_resource type="Compositor" id="Compositor_ak7ke"] diff --git a/MyJumpFloodIteration/jump_flood_blur.gd b/MyJumpFloodIteration/jump_flood_blur.gd index 8eb28b4..c196ec7 100644 --- a/MyJumpFloodIteration/jump_flood_blur.gd +++ b/MyJumpFloodIteration/jump_flood_blur.gd @@ -53,6 +53,14 @@ class_name MotionBlurSphynxJumpFlood ## target_constant_framerate @export var framerate_independent : bool = true +## Description: Removes clamping on motion blur scale to allow framerate independent motion +## blur to scale longer than realistically possible when render framerate is higher +## than target framerate.[br][br] +## [color=yellow]Warning:[/color] Turning this on would allow over-blurring of pixels, which +## produces inaccurate results, and would likely cause nausea in players over +## long exposure durations, use with caution and out of artistic intent +@export var uncapped_independence : bool = false + ## if framerate_independent is enabled, the blur would simulate ## sutter speeds at that framerate, and up. @export var target_constant_framerate : float = 30 @@ -138,8 +146,6 @@ func get_sampler_uniform(image: RID, binding: int) -> RDUniform: uniform.add_id(image) return uniform - - var temp_motion_blur_intensity : float var previous_time : float = 0 @@ -154,7 +160,11 @@ func _render_callback(p_effect_callback_type, p_render_data): temp_motion_blur_intensity = motion_blur_intensity if framerate_independent: - var capped_frame_time : float = min(1 / target_constant_framerate, delta_time) + var capped_frame_time : float = 1 / target_constant_framerate + + if !uncapped_independence: + capped_frame_time = min(capped_frame_time, delta_time) + temp_motion_blur_intensity = motion_blur_intensity * capped_frame_time / delta_time if rd and p_effect_callback_type == CompositorEffect.EFFECT_CALLBACK_TYPE_POST_TRANSPARENT: