diff --git a/material_maker/panels/preview_2d/preview_2d_panel.gd b/material_maker/panels/preview_2d/preview_2d_panel.gd index d545e125..179df974 100644 --- a/material_maker/panels/preview_2d/preview_2d_panel.gd +++ b/material_maker/panels/preview_2d/preview_2d_panel.gd @@ -57,26 +57,33 @@ func set_temporal_aa(v : bool): yield(get_tree(), "idle_frame") set_generator(generator, output, true) +var start_accumulate_trigger : bool = false + func start_accumulate(): + if !temporal_aa_current: + return + if !start_accumulate_trigger: + start_accumulate_trigger = true + call_deferred("do_start_accumulate") + +func do_start_accumulate(): started = false yield(get_tree(), "idle_frame") yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") - + start_accumulate_trigger = false $Accumulate/Iteration.material.set_shader_param("sum", $Accumulate.get_texture()) $Accumulate/Iteration.material.set_shader_param("clear", true) - divide = 0 + divide = 1 started = true while started: - var next_divide = divide + 1 $Accumulate.render_target_update_mode = Viewport.UPDATE_ONCE $Accumulate.update_worlds() + material.set_shader_param("divide", divide) yield(get_tree(), "idle_frame") yield(get_tree(), "idle_frame") $Accumulate/Iteration.material.set_shader_param("clear", false) - material.set_shader_param("divide", divide) - divide = next_divide - if divide > 1000: + divide += 1 + if divide > 100000: started = false break diff --git a/material_maker/panels/preview_2d/preview_2d_panel.tscn b/material_maker/panels/preview_2d/preview_2d_panel.tscn index 87a2a9cd..7d05257e 100644 --- a/material_maker/panels/preview_2d/preview_2d_panel.tscn +++ b/material_maker/panels/preview_2d/preview_2d_panel.tscn @@ -62,12 +62,12 @@ uniform float preview_2d_scale = 1.2; uniform vec2 preview_2d_center = vec2(0.5); void fragment() { + vec2 ratio = preview_2d_size; + vec2 jitter_uv = UV+0.75*fract(sin(vec2(TIME, TIME*0.5)*43758.5453123))/preview_2d_size; + vec2 uv = preview_2d_center+(jitter_uv-0.5)*preview_2d_scale*ratio/min(ratio.x, ratio.y); if (clear) { - COLOR = vec4(0.0, 0.0, 0.0, 1.0); + COLOR = preview_2d(uv); } else { - vec2 ratio = preview_2d_size; - vec2 jitter_uv = UV+0.75*fract(sin(vec2(TIME, TIME*0.5)*43758.5453123))/preview_2d_size; - vec2 uv = preview_2d_center+(jitter_uv-0.5)*preview_2d_scale*ratio/min(ratio.x, ratio.y); COLOR = textureLod(sum, UV, 0.0)+preview_2d(uv); } }