Updated temporal AA
This commit is contained in:
parent
c9394fd005
commit
179a7d4ce5
|
@ -57,26 +57,33 @@ func set_temporal_aa(v : bool):
|
||||||
yield(get_tree(), "idle_frame")
|
yield(get_tree(), "idle_frame")
|
||||||
set_generator(generator, output, true)
|
set_generator(generator, output, true)
|
||||||
|
|
||||||
|
var start_accumulate_trigger : bool = false
|
||||||
|
|
||||||
func start_accumulate():
|
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
|
started = false
|
||||||
yield(get_tree(), "idle_frame")
|
yield(get_tree(), "idle_frame")
|
||||||
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("sum", $Accumulate.get_texture())
|
||||||
$Accumulate/Iteration.material.set_shader_param("clear", true)
|
$Accumulate/Iteration.material.set_shader_param("clear", true)
|
||||||
divide = 0
|
divide = 1
|
||||||
started = true
|
started = true
|
||||||
while started:
|
while started:
|
||||||
var next_divide = divide + 1
|
|
||||||
$Accumulate.render_target_update_mode = Viewport.UPDATE_ONCE
|
$Accumulate.render_target_update_mode = Viewport.UPDATE_ONCE
|
||||||
$Accumulate.update_worlds()
|
$Accumulate.update_worlds()
|
||||||
|
material.set_shader_param("divide", divide)
|
||||||
yield(get_tree(), "idle_frame")
|
yield(get_tree(), "idle_frame")
|
||||||
yield(get_tree(), "idle_frame")
|
yield(get_tree(), "idle_frame")
|
||||||
$Accumulate/Iteration.material.set_shader_param("clear", false)
|
$Accumulate/Iteration.material.set_shader_param("clear", false)
|
||||||
material.set_shader_param("divide", divide)
|
divide += 1
|
||||||
divide = next_divide
|
if divide > 100000:
|
||||||
if divide > 1000:
|
|
||||||
started = false
|
started = false
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
|
@ -62,12 +62,12 @@ uniform float preview_2d_scale = 1.2;
|
||||||
uniform vec2 preview_2d_center = vec2(0.5);
|
uniform vec2 preview_2d_center = vec2(0.5);
|
||||||
|
|
||||||
void fragment() {
|
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) {
|
if (clear) {
|
||||||
COLOR = vec4(0.0, 0.0, 0.0, 1.0);
|
COLOR = preview_2d(uv);
|
||||||
} else {
|
} 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);
|
COLOR = textureLod(sum, UV, 0.0)+preview_2d(uv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue