From 829545ae9859a3b0b984685cb0c95234f57b0f94 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 25 Mar 2025 16:26:22 +0100 Subject: [PATCH] Use taa only, reduce mem usage --- armorforge/sources/sim.ts | 4 +- base/assets/Scene.arm | Bin 178478 -> 178444 bytes base/assets/shader_datas.arm | Bin 16777 -> 14182 bytes base/assets/smaa_area.png | Bin 22194 -> 0 bytes base/assets/smaa_search.png | Bin 313 -> 0 bytes base/shaders/smaa_blend_weight.kong | 375 ---------------------- base/shaders/smaa_edge_detect.kong | 119 ------- base/shaders/smaa_neighborhood_blend.kong | 80 ----- base/sources/ts/config.ts | 3 - base/sources/ts/export_arm.ts | 2 +- base/sources/ts/iron/camera_object.ts | 20 +- base/sources/ts/render_path_base.ts | 82 ++--- base/sources/ts/render_path_deferred.ts | 53 +-- base/sources/ts/render_path_forward.ts | 2 +- base/sources/ts/render_path_raytrace.ts | 6 +- 15 files changed, 55 insertions(+), 691 deletions(-) delete mode 100644 base/assets/smaa_area.png delete mode 100644 base/assets/smaa_search.png delete mode 100644 base/shaders/smaa_blend_weight.kong delete mode 100644 base/shaders/smaa_edge_detect.kong delete mode 100644 base/shaders/smaa_neighborhood_blend.kong diff --git a/armorforge/sources/sim.ts b/armorforge/sources/sim.ts index df05dbe1..a47d59a5 100644 --- a/armorforge/sources/sim.ts +++ b/armorforge/sources/sim.ts @@ -32,7 +32,7 @@ function sim_update() { iron_delay_idle_sleep(); if (sim_record) { - let rt: render_target_t = map_get(render_path_render_targets, "taa"); + let rt: render_target_t = map_get(render_path_render_targets, "last"); let pixels: buffer_t = gpu_get_texture_pixels(rt._image); ///if (arm_metal || arm_vulkan) export_arm_bgra_swap(pixels); @@ -52,7 +52,7 @@ function sim_play() { return; } let path: string = path_base_dir(project_filepath) + "/output.mp4"; - let rt: render_target_t = map_get(render_path_render_targets, "taa"); + let rt: render_target_t = map_get(render_path_render_targets, "last"); iron_mp4_begin(path, rt._image.width, rt._image.height); } diff --git a/base/assets/Scene.arm b/base/assets/Scene.arm index e739fcfcc1f936075dc51e0ffceb9349b5e3d66c..dfca562ca59c92e916feb00da0b7b68fbfc3b6bd 100644 GIT binary patch delta 20 ccmZ4YiL2)mS3?Wq7N&PQ7@4NO-@zmc0A>*g^Z)<= delta 55 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 diff --git a/base/shaders/smaa_blend_weight.kong b/base/shaders/smaa_blend_weight.kong deleted file mode 100644 index 0b13716c..00000000 --- a/base/shaders/smaa_blend_weight.kong +++ /dev/null @@ -1,375 +0,0 @@ - -#[set(everything)] -const edges_tex: tex2d; - -#[set(everything)] -const edges_tex_sampler: sampler; - -#[set(everything)] -const area_tex: tex2d; - -#[set(everything)] -const area_tex_sampler: sampler; - -#[set(everything)] -const search_tex: tex2d; - -#[set(everything)] -const search_tex_sampler: sampler; - -#[set(everything)] -const constants: { - screen_size: float2; - screen_size_inv: float2; -}; - -struct vert_in { - pos: float2; -} - -struct vert_out { - pos: float4; - tex: float2; - pixcoord: float2; - offset0: float4; - offset1: float4; - offset2: float4; -} - -fun smaa_blend_weight_vert(input: vert_in): vert_out { - var output: vert_out; - output.tex = input.pos.xy * 0.5 + 0.5; - output.pixcoord = output.tex * constants.screen_size; - output.pos = float4(input.pos.xy, 0.0, 1.0); - - var xyxy: float4 = float4(constants.screen_size_inv.xy, constants.screen_size_inv.xy); - output.offset0 = xyxy * float4(-0.25, -0.125, 1.25, -0.125) + float4(output.tex.xy, output.tex.xy); - output.offset1 = xyxy * float4(-0.125, -0.25, -0.125, 1.25) + float4(output.tex.xy, output.tex.xy); - var xxyy: float4 = float4(constants.screen_size_inv.xx, constants.screen_size_inv.yy); - output.offset2 = xxyy * float4(-32.0, 32.0, -32.0, 32.0) + float4(output.offset0.xz, output.offset1.yw); - return output; -} - -fun abs1(a: float): float { - if (a < 0) { - return -a; - } - return a; -} - -fun sample_edges_tex(coord: float2): float4 { - coord.y = 1.0 - coord.y; - return sample_lod(edges_tex, edges_tex_sampler, coord, 0.0); -} - -fun smaa_sample_level_zero_offset(coord: float2, offset: float2): float4 { - return sample_edges_tex(coord + offset * constants.screen_size_inv.xy); -} - -fun smaa_decode_diag_bilinear_access2(e: float2): float2 { - e.r = e.r * abs1(5.0 * e.r - 5.0 * 0.75); - // return floor(e + 0.5); - e.x = floor(e.x + 0.5); - e.y = floor(e.y + 0.5); - return e; -} - -fun smaa_decode_diag_bilinear_access4(e: float4): float4 { - // e.rb = e.rb * abs(5.0 * e.rb - 5.0 * 0.75); - e.r = e.r * abs1(5.0 * e.r - 5.0 * 0.75); - e.b = e.b * abs1(5.0 * e.b - 5.0 * 0.75); - // return floor(e + 0.5); - e.x = floor(e.x + 0.5); - e.y = floor(e.y + 0.5); - e.z = floor(e.z + 0.5); - e.w = floor(e.w + 0.5); - return e; -} - -fun smaa_search_diag1(texcoord: float2, dir: float2): float3 { - var coord: float4 = float4(texcoord, -1.0, 1.0); - var t: float3 = float3(constants.screen_size_inv.xy, 1.0); - var cdw_end: float2; - while (coord.z < 7.0 && coord.w > 0.9) { - coord.xyz = t * float3(dir, 1.0) + coord.xyz; - cdw_end = sample_edges_tex(coord.xy).rg; - coord.w = dot(cdw_end /*e*/, float2(0.5, 0.5)); - } - return float3(coord.zw, cdw_end.y); -} - -fun smaa_search_diag2(texcoord: float2, dir: float2): float3 { - var coord: float4 = float4(texcoord, -1.0, 1.0); - coord.x += 0.25 * constants.screen_size_inv.x; - var t: float3 = float3(constants.screen_size_inv.xy, 1.0); - var cw: float = coord.w; - var cdw_end: float2; - while (coord.z < 7.0 && cw > 0.9) { - coord.xyz = t * float3(dir, 1.0) + coord.xyz; - cdw_end = sample_edges_tex(coord.xy).rg; - cdw_end = smaa_decode_diag_bilinear_access2(cdw_end); - cw = dot(cdw_end, float2(0.5, 0.5)); - } - coord.w = cw; - return float3(coord.zw, cdw_end.y); -} - -fun smaa_area_diag(dist: float2, e: float2, offset: float): float2 { - var texcoord: float2 = float2(20, 20) * e + dist; - texcoord = float2(1.0 / 160.0, 1.0 / 560.0) * texcoord + 0.5 * float2(1.0 / 160.0, 1.0 / 560.0); - texcoord.x += 0.5; - texcoord.y += (1.0 / 7.0) * offset; - return sample_lod(area_tex, area_tex_sampler, texcoord, 0.0).rg; -} - -fun smaa_calculate_diag_weights(texcoord: float2, e: float2): float2 { - var weights: float2 = float2(0.0, 0.0); - var d: float4; - if (e.r > 0.0) { - var r: float3 = smaa_search_diag1(texcoord, float2(-1.0, 1.0)); - d.xz = r.xy; - var dadd: float; - if (r.z > 0.9) { - dadd = 1.0; - } - else { - dadd = 0.0; - } - d.x += dadd; - } - else { - d.xz = float2(0.0, 0.0); - } - d.yw = smaa_search_diag1(texcoord, float2(1.0, -1.0)).xy; - - if (d.x + d.y > 2.0) { - var xyxy: float4 = float4(constants.screen_size_inv.xy, constants.screen_size_inv.xy); - var coords: float4 = float4(-d.x + 0.25, d.x, d.y, -d.y - 0.25) * xyxy + float4(texcoord.xy, texcoord.xy); - var c: float4; - - c.xy = smaa_sample_level_zero_offset(coords.xy, float2(-1, 0)).rg; - c.zw = smaa_sample_level_zero_offset(coords.zw, float2( 1, 0)).rg; - c.yxwz = smaa_decode_diag_bilinear_access4(c.xyzw); - - var cc: float2 = float2(2.0, 2.0) * c.xz + c.yw; - var a1condx: float = step(0.9, d.z); - var a1condy: float = step(0.9, d.w); - if (a1condx == 1.0) { - cc.x = 0.0; - } - if (a1condy == 1.0) { - cc.y = 0.0; - } - weights += smaa_area_diag(d.xy, cc, 0.0); - } - - d.xz = smaa_search_diag2(texcoord, float2(-1.0, -1.0)).xy; - if (smaa_sample_level_zero_offset(texcoord, float2(1, 0)).r > 0.0) { - var r: float3 = smaa_search_diag2(texcoord, float2(1.0, 1.0)); - d.yw = r.xy; - var dadd: float; - if (r.z > 0.9) { - dadd = 1.0; - } - else { - dadd = 0.0; - } - d.y += dadd; - } - else { - d.yw = float2(0.0, 0.0); - } - - if (d.x + d.y > 2.0) { - var xyxy: float4 = float4(constants.screen_size_inv.xy, constants.screen_size_inv.xy); - var coords: float4 = float4(-d.x, -d.x, d.y, d.y) * xyxy + float4(texcoord.xy, texcoord.xy); - var c: float4; - c.x = smaa_sample_level_zero_offset(coords.xy, float2(-1, 0)).g; - c.y = smaa_sample_level_zero_offset(coords.xy, float2( 0, -1)).r; - c.zw = smaa_sample_level_zero_offset(coords.zw, float2( 1, 0)).gr; - var cc: float2 = float2(2.0, 2.0) * c.xz + c.yw; - - var a1condx: float = step(0.9, d.z); - var a1condy: float = step(0.9, d.w); - if (a1condx == 1.0) { - cc.x = 0.0; - } - if (a1condy == 1.0) { - cc.y = 0.0; - } - weights += smaa_area_diag(d.xy, cc, 0.0).gr; - } - return weights; -} - -fun smaa_search_length(e: float2, offset: float): float { - var scale: float2 = float2(66.0, 33.0) * float2(0.5, -1.0); - var bias: float2 = float2(66.0, 33.0) * float2(offset, 1.0); - scale += float2(-1.0, 1.0); - bias += float2( 0.5, -0.5); - scale *= 1.0 / float2(64.0, 16.0); - bias *= 1.0 / float2(64.0, 16.0); - var coord: float2 = scale * e + bias; - return sample_lod(search_tex, search_tex_sampler, coord, 0.0).r; -} - -fun smaa_search_x_left(texcoord: float2, end: float): float { - var e: float2 = float2(0.0, 1.0); - while (texcoord.x > end && e.g > 0.8281 && e.r == 0.0) { - e = sample_edges_tex(texcoord).rg; - texcoord = -float2(2.0, 0.0) * constants.screen_size_inv.xy + texcoord; - } - var offset: float = -(255.0 / 127.0) * smaa_search_length(e, 0.0) + 3.25; - return constants.screen_size_inv.x * offset + texcoord.x; -} - -fun smaa_search_x_right(texcoord: float2, end: float): float { - var e: float2 = float2(0.0, 1.0); - while (texcoord.x < end && e.g > 0.8281 && e.r == 0.0) { - e = sample_edges_tex(texcoord).rg; - texcoord = float2(2.0, 0.0) * constants.screen_size_inv.xy + texcoord; - } - var offset: float = -(255.0 / 127.0) * smaa_search_length(e, 0.5) + 3.25; - return -constants.screen_size_inv.x * offset + texcoord.x; -} - -fun smaa_search_y_up(texcoord: float2, end: float): float { - var e: float2 = float2(1.0, 0.0); - while (texcoord.y > end && e.r > 0.8281 && e.g == 0.0) { - e = sample_edges_tex(texcoord).rg; - texcoord = -float2(0.0, 2.0) * constants.screen_size_inv.xy + texcoord; - } - var offset: float = -(255.0 / 127.0) * smaa_search_length(e.gr, 0.0) + 3.25; - return constants.screen_size_inv.y * offset + texcoord.y; -} - -fun smaa_search_y_down(texcoord: float2, end: float): float { - var e: float2 = float2(1.0, 0.0); - while (texcoord.y < end && e.r > 0.8281 && e.g == 0.0) { - e = sample_edges_tex(texcoord).rg; - texcoord = float2(0.0, 2.0) * constants.screen_size_inv.xy + texcoord; - } - var offset: float = -(255.0 / 127.0) * smaa_search_length(e.gr, 0.5) + 3.25; - return -constants.screen_size_inv.y * offset + texcoord.y; -} - -fun smaa_area(dist: float2, e1: float, e2: float): float2 { - // var f2: float2 = floor(4.0 * float2(e1, e2)); - var f2: float2 = float2(floor(4.0 * e1), floor(4.0 * e2)); - var texcoord: float2 = float2(16, 16) * (f2 + 0.5) + dist; - texcoord = float2(1.0 / 160.0, 1.0 / 560.0) * texcoord + 0.5 * float2(1.0 / 160.0, 1.0 / 560.0); - texcoord.y = (1.0 / 7.0) + texcoord.y; - return sample_lod(area_tex, area_tex_sampler, texcoord, 0.0).rg; -} - -fun smaa_detect_horizontal_corner_pattern(weights: float2, texcoord: float4, d: float2): float2 { - // var left_right: float2 = step(d.xy, d.yx); - var left_right: float2 = float2(step(d.x, d.y), step(d.y, d.x)); - - var rounding: float2 = (1.0 - 0.25) * left_right; - rounding /= left_right.x + left_right.y; - var factor: float2 = float2(1.0, 1.0); - factor.x -= rounding.x * smaa_sample_level_zero_offset(texcoord.xy, float2(0, 1)).r; - factor.x -= rounding.y * smaa_sample_level_zero_offset(texcoord.zw, float2(1, 1)).r; - factor.y -= rounding.x * smaa_sample_level_zero_offset(texcoord.xy, float2(0, -2)).r; - factor.y -= rounding.y * smaa_sample_level_zero_offset(texcoord.zw, float2(1, -2)).r; - // weights *= saturate(factor); - weights.x *= saturate(factor.x); - weights.y *= saturate(factor.y); - return weights; -} - -fun smaa_detect_vertical_corner_pattern(weights: float2, texcoord: float4, d: float2): float2 { - // var left_right: float2 = step(d.xy, d.yx); - var left_right: float2 = float2(step(d.x, d.y), step(d.y, d.x)); - - var rounding: float2 = (1.0 - 0.25) * left_right; - rounding /= left_right.x + left_right.y; - var factor: float2 = float2(1.0, 1.0); - factor.x -= rounding.x * smaa_sample_level_zero_offset(texcoord.xy, float2( 1, 0)).g; - factor.x -= rounding.y * smaa_sample_level_zero_offset(texcoord.zw, float2( 1, 1)).g; - factor.y -= rounding.x * smaa_sample_level_zero_offset(texcoord.xy, float2(-2, 0)).g; - factor.y -= rounding.y * smaa_sample_level_zero_offset(texcoord.zw, float2(-2, 1)).g; - weights.x *= saturate(factor.x); - weights.y *= saturate(factor.y); - return weights; -} - -fun smaa_blend_weight_frag(input: vert_out): float4 { - var weights: float4 = float4(0.0, 0.0, 0.0, 0.0); - var e: float2 = sample_edges_tex(input.tex).rg; - - if (e.g > 0.0) { - weights.rg = smaa_calculate_diag_weights(input.tex, e); - if (weights.r == -weights.g) { - var d: float2; - - var coords: float3; - coords.x = smaa_search_x_left(input.offset0.xy, input.offset2.x); - coords.y = input.offset1.y; - d.x = coords.x; - - var e1: float = sample_edges_tex(coords.xy).r; - - coords.z = smaa_search_x_right(input.offset0.zw, input.offset2.y); - d.y = coords.z; - - var f2: float2 = constants.screen_size.xx * d - input.pixcoord.xx; - // d = abs(floor(f2) + 0.5); - d.x = abs1(floor(f2.x) + 0.5); - d.y = abs1(floor(f2.y) + 0.5); - - // var sqrt_d: float2 = sqrt(d); - var sqrt_d: float2 = float2(sqrt(d.x), sqrt(d.y)); - - var e2: float = smaa_sample_level_zero_offset(coords.zy, float2(1, 0)).r; - weights.rg = smaa_area(sqrt_d, e1, e2); - coords.y = input.tex.y; - - var xyzy: float4 = float4(coords.xy, coords.zy); - weights.rg = smaa_detect_horizontal_corner_pattern(weights.rg, xyzy, d); - } - else { - e.r = 0.0; - } - } - - if (e.r > 0.0) { - var d: float2; - - var coords: float3; - coords.y = smaa_search_y_up(input.offset1.xy, input.offset2.z); - coords.x = input.offset0.x; - d.x = coords.y; - - var e1: float = sample_edges_tex(coords.xy).g; - - coords.z = smaa_search_y_down(input.offset1.zw, input.offset2.w); - d.y = coords.z; - - var f2: float2 = constants.screen_size.yy * d - input.pixcoord.yy; - // d = abs(floor(f2) + 0.5); - d.x = abs1(floor(f2.x) + 0.5); - d.y = abs1(floor(f2.y) + 0.5); - - // var sqrt_d: float2 = sqrt(d); - var sqrt_d: float2 = float2(sqrt(d.x), sqrt(d.y)); - - var e2: float = smaa_sample_level_zero_offset(coords.xz, float2(0, 1)).g; - // weights.ba = smaa_area(sqrt_d, e1, e2); - weights.ba = smaa_area(float2(0,0), 0, 0); - coords.x = input.tex.x; - - var xyxz: float4 = float4(coords.xy, coords.xz); - // weights.ba = smaa_detect_vertical_corner_pattern(weights.ba, xyxz, d); - weights.ba = smaa_detect_vertical_corner_pattern(float2(1,1), float4(1,1,1,1), float2(1,1)); - } - - return weights; -} - -#[pipe] -struct pipe { - vertex = smaa_blend_weight_vert; - fragment = smaa_blend_weight_frag; -} diff --git a/base/shaders/smaa_edge_detect.kong b/base/shaders/smaa_edge_detect.kong deleted file mode 100644 index 1b50decf..00000000 --- a/base/shaders/smaa_edge_detect.kong +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) 2013 Jorge Jimenez (jorge@iryoku.com) -// Copyright (C) 2013 Jose I. Echevarria (joseignacioechevarria@gmail.com) -// Copyright (C) 2013 Belen Masia (bmasia@unizar.es) -// Copyright (C) 2013 Fernando Navarro (fernandn@microsoft.com) -// Copyright (C) 2013 Diego Gutierrez (diegog@unizar.es) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is furnished to -// do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. As clarification, there -// is no requirement that the copyright notice and permission be included in -// binary distributions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// http://www.iryoku.com/smaa/ - -#[set(everything)] -const color_tex: tex2d; - -#[set(everything)] -const color_tex_sampler: sampler; - -#[set(everything)] -const constants: { - screen_size_inv: float2; -}; - -struct vert_in { - pos: float2; -} - -struct vert_out { - pos: float4; - tex: float2; - offset0: float4; - offset1: float4; - offset2: float4; -} - -fun smaa_edge_detect_vert(input: vert_in): vert_out { - var output: vert_out; - output.tex = input.pos.xy * 0.5 + 0.5; - output.tex.y = 1.0 - output.tex.y; - output.pos = float4(input.pos.xy, 0.0, 1.0); - var xyxy: float4 = float4(constants.screen_size_inv.xy, constants.screen_size_inv.xy); - output.offset0 = xyxy * float4(-1.0, 0.0, 0.0, 1.0) + float4(output.tex.xy, output.tex.xy); - output.offset1 = xyxy * float4( 1.0, 0.0, 0.0, -1.0) + float4(output.tex.xy, output.tex.xy); - output.offset2 = xyxy * float4(-2.0, 0.0, 0.0, 2.0) + float4(output.tex.xy, output.tex.xy); - return output; -} - -fun smaa_edge_detect_frag(input: vert_out): float4 { - var delta: float4; - var C: float3 = sample_lod(color_tex, color_tex_sampler, input.tex, 0.0).rgb; - - var Cleft: float3 = sample_lod(color_tex, color_tex_sampler, input.offset0.xy, 0.0).rgb; - var t: float3 = abs(C - Cleft); - delta.x = max(max(t.r, t.g), t.b); - - var Ctop: float3 = sample_lod(color_tex, color_tex_sampler, input.offset0.zw, 0.0).rgb; - t = abs(C - Ctop); - delta.y = max(max(t.r, t.g), t.b); - - // var edges: float2 = step(float2(0.1, 0.1), delta.xy); - // if (dot(edges, float2(1.0, 1.0)) == 0.0) { - // discard; - // } - - var edges: float2; - edges.x = step(0.1, delta.x); - edges.y = step(0.1, delta.y); - if (dot(edges, float2(1.0, 1.0)) == 0.0) { - discard; - } - - var Cright: float3 = sample_lod(color_tex, color_tex_sampler, input.offset1.xy, 0.0).rgb; - t = abs(C - Cright); - delta.z = max(max(t.r, t.g), t.b); - - var Cbottom: float3 = sample_lod(color_tex, color_tex_sampler, input.offset1.zw, 0.0).rgb; - t = abs(C - Cbottom); - delta.w = max(max(t.r, t.g), t.b); - - var max_delta: float2 = max(delta.xy, delta.zw); - - var Cleftleft: float3 = sample_lod(color_tex, color_tex_sampler, input.offset2.xy, 0.0).rgb; - t = abs(C - Cleftleft); - delta.z = max(max(t.r, t.g), t.b); - - var Ctoptop: float3 = sample_lod(color_tex, color_tex_sampler, input.offset2.zw, 0.0).rgb; - t = abs(C - Ctoptop); - delta.w = max(max(t.r, t.g), t.b); - - max_delta = max(max_delta.xy, delta.zw); - var final_delta: float = max(max_delta.x, max_delta.y); - - // edges.xy *= step(final_delta, 2.0 * delta.xy); - edges.x *= step(final_delta, 2.0 * delta.x); - edges.y *= step(final_delta, 2.0 * delta.y); - - return float4(edges.xy, 0, 0); -} - -#[pipe] -struct pipe { - vertex = smaa_edge_detect_vert; - fragment = smaa_edge_detect_frag; -} diff --git a/base/shaders/smaa_neighborhood_blend.kong b/base/shaders/smaa_neighborhood_blend.kong deleted file mode 100644 index 71b50791..00000000 --- a/base/shaders/smaa_neighborhood_blend.kong +++ /dev/null @@ -1,80 +0,0 @@ - -#[set(everything)] -const color_tex: tex2d; - -#[set(everything)] -const color_tex_sampler: sampler; - -#[set(everything)] -const blend_tex: tex2d; - -#[set(everything)] -const blend_tex_sampler: sampler; - -#[set(everything)] -const constants: { - screen_size_inv: float2; -}; - -struct vert_in { - pos: float2; -} - -struct vert_out { - pos: float4; - tex: float2; - offset: float4; -} - -fun smaa_neighborhood_blend_vert(input: vert_in): vert_out { - var output: vert_out; - output.tex = input.pos.xy * 0.5 + 0.5; - output.tex.y = 1.0 - output.tex.y; - output.pos = float4(input.pos.xy, 0.0, 1.0); - var xyxy: float4 = float4(constants.screen_size_inv.xy, constants.screen_size_inv.xy); - output.offset = xyxy * float4(1.0, 0.0, 0.0, -1.0) + float4(output.tex.xy, output.tex.xy); - return output; -} - -fun sample_color_tex(coords: float2): float4 { - coords.y = 1.0 - coords.y; - return sample_lod(color_tex, color_tex_sampler, coords, 0.0); -} - -fun smaa_neighborhood_blend_frag(input: vert_out): float4 { - var a: float4; - a.x = sample_lod(blend_tex, blend_tex_sampler, input.offset.xy, 0.0).a; // Right - a.y = sample_lod(blend_tex, blend_tex_sampler, input.offset.zw, 0.0).g; // Top - a.wz = sample_lod(blend_tex, blend_tex_sampler, input.tex, 0.0).xz; // Bottom / Left - - if (dot(a, float4(1.0, 1.0, 1.0, 1.0)) < 0.00001) { // 1e-5 - return sample_lod(color_tex, color_tex_sampler, input.tex, 0.0); - } - else { - var h: bool = max(a.x, a.z) > max(a.y, a.w); - var blending_offset: float4 = float4(0.0, a.y, 0.0, a.w); - var blending_weight: float2 = a.yw; - if (h) { - blending_offset.x = a.x; - blending_offset.y = 0.0; - blending_offset.z = a.z; - blending_offset.w = 0.0; - blending_weight.x = a.x; - blending_weight.y = a.z; - } - blending_weight /= dot(blending_weight, float2(1.0, 1.0)); - var tc: float2 = float2(input.tex.x, 1.0 - input.tex.y); - var xyxy: float4 = float4(tc.xy, tc.xy); - var blending_coord: float4 = blending_offset * float4(constants.screen_size_inv.xy, -constants.screen_size_inv.xy) + xyxy; - var color: float4 = blending_weight.x * sample_color_tex(blending_coord.xy); - color += blending_weight.y * sample_color_tex(blending_coord.zw); - return color; - } - return float4(0.0, 0.0, 0.0, 0.0); -} - -#[pipe] -struct pipe { - vertex = smaa_neighborhood_blend_vert; - fragment = smaa_neighborhood_blend_frag; -} diff --git a/base/sources/ts/config.ts b/base/sources/ts/config.ts index 8c96391a..977187e8 100644 --- a/base/sources/ts/config.ts +++ b/base/sources/ts/config.ts @@ -55,7 +55,6 @@ function config_save() { json_encode_f32("rp_supersample", config_raw.rp_supersample); json_encode_bool("rp_ssao", config_raw.rp_ssao); json_encode_bool("rp_bloom", config_raw.rp_bloom); - json_encode_bool("rp_motionblur", config_raw.rp_motionblur); json_encode_bool("rp_gi", config_raw.rp_gi); json_encode_f32("rp_vignette", config_raw.rp_vignette); json_encode_f32("rp_grain", config_raw.rp_grain); @@ -142,7 +141,6 @@ function config_init() { config_raw.rp_gi = false; config_raw.rp_vignette = 0.2; config_raw.rp_grain = 0.09; - config_raw.rp_motionblur = false; ///if (arm_android || arm_ios || is_forge) config_raw.rp_ssao = false; ///else @@ -395,7 +393,6 @@ type config_t = { rp_supersample?: f32; rp_ssao?: bool; rp_bloom?: bool; - rp_motionblur?: bool; rp_gi?: bool; rp_vignette?: f32; rp_grain?: f32; diff --git a/base/sources/ts/export_arm.ts b/base/sources/ts/export_arm.ts index 9539672a..c2907b0f 100644 --- a/base/sources/ts/export_arm.ts +++ b/base/sources/ts/export_arm.ts @@ -173,7 +173,7 @@ function export_arm_run_project() { ///end ///if (arm_android || arm_ios) - let rt: render_target_t = map_get(render_path_render_targets, context_raw.render_mode == render_mode_t.FORWARD ? "buf" : "tex"); + let rt: render_target_t = map_get(render_path_render_targets, "buf"); let tex: iron_gpu_texture_t = rt._image; let mesh_icon: iron_gpu_texture_t = gpu_create_render_target(256, 256); let r: f32 = sys_w() / sys_h(); diff --git a/base/sources/ts/iron/camera_object.ts b/base/sources/ts/iron/camera_object.ts index 4ae864f7..85409175 100644 --- a/base/sources/ts/iron/camera_object.ts +++ b/base/sources/ts/iron/camera_object.ts @@ -70,16 +70,20 @@ function camera_object_proj_jitter(raw: camera_object_t) { let w: i32 = render_path_current_w; let h: i32 = render_path_current_h; raw.p = mat4_clone(raw.no_jitter_p); + + let i: i32 = raw.frame % 6; let x: f32 = 0.0; let y: f32 = 0.0; - if (raw.frame % 2 == 0) { - x = 0.25; - y = 0.25; - } - else { - x = -0.25; - y = -0.25; - } + + if (i == 0) { x = 0.5; y = 0.333; } + else if (i == 1) { x = -0.5; y = -0.333; } + else if (i == 2) { x = 0.25; y = 0.111; } + else if (i == 3) { x = -0.25; y = -0.111; } + else if (i == 4) { x = 0.375; y = 0.444; } + else { x = -0.375; y = -0.444; } + x *= 2; + y *= 2; + raw.p.m20 += x / w; raw.p.m21 += y / h; raw.frame++; diff --git a/base/sources/ts/render_path_base.ts b/base/sources/ts/render_path_base.ts index d307ccb9..c5dced28 100644 --- a/base/sources/ts/render_path_base.ts +++ b/base/sources/ts/render_path_base.ts @@ -114,10 +114,13 @@ function render_path_base_is_cached(): bool { if (context_raw.ddirty > -2) { ///end render_path_set_target(""); - render_path_bind_target("taa", "tex"); - render_path_base_ssaa4() ? - render_path_draw_shader("shader_datas/supersample_resolve/supersample_resolve") : + render_path_bind_target("last", "tex"); + if (render_path_base_ssaa4()) { + render_path_draw_shader("shader_datas/supersample_resolve/supersample_resolve"); + } + else { render_path_draw_shader("shader_datas/copy_pass/copy_pass"); + } render_path_paint_commands_cursor(); if (context_raw.ddirty <= 0) { context_raw.ddirty--; @@ -153,7 +156,7 @@ function render_path_base_commands(draw_commands: ()=>void) { render_path_base_end(); } -function render_path_base_draw_bloom(tex: string) { +function render_path_base_draw_bloom() { if (config_raw.rp_bloom == false) { return; } @@ -187,13 +190,13 @@ function render_path_base_draw_bloom(tex: string) { render_path_base_bloom_current_mip = i; render_path_set_target(render_path_base_bloom_mipmaps[i].name); render_path_clear_target(0x00000000); - render_path_bind_target(i == 0 ? tex : render_path_base_bloom_mipmaps[i - 1].name, "tex"); + render_path_bind_target(i == 0 ? "buf" : render_path_base_bloom_mipmaps[i - 1].name, "tex"); render_path_draw_shader("shader_datas/bloom_pass/bloom_downsample_pass"); } for (let i: i32 = 0; i < num_mips; ++i) { let mip_level: i32 = num_mips - 1 - i; render_path_base_bloom_current_mip = mip_level; - render_path_set_target(mip_level == 0 ? tex : render_path_base_bloom_mipmaps[mip_level - 1].name); + render_path_set_target(mip_level == 0 ? "buf" : render_path_base_bloom_mipmaps[mip_level - 1].name); render_path_bind_target(render_path_base_bloom_mipmaps[mip_level].name, "tex"); render_path_draw_shader("shader_datas/bloom_pass/bloom_upsample_pass"); } @@ -272,7 +275,7 @@ function render_path_base_draw_ssao() { } function render_path_base_draw_deferred_light() { - render_path_set_target("tex"); + render_path_set_target("buf"); render_path_bind_target("_main", "gbufferD"); render_path_bind_target("gbuffer0", "gbuffer0"); render_path_bind_target("gbuffer1", "gbuffer1"); @@ -287,27 +290,14 @@ function render_path_base_draw_deferred_light() { render_path_draw_shader("shader_datas/deferred_light/deferred_light"); - render_path_set_depth_from("tex", "gbuffer0"); // Bind depth for world pass + render_path_set_depth_from("buf", "gbuffer0"); // Bind depth for world pass - render_path_set_target("tex"); + render_path_set_target("buf"); render_path_draw_skydome("shader_datas/world_pass/world_pass"); - render_path_set_depth_from("tex", "gbuffer1"); // Unbind depth + render_path_set_depth_from("buf", "gbuffer1"); // Unbind depth } -// function render_path_base_draw_motion_blur() { -// if (config_raw.rp_motionblur != false) { -// render_path_set_target("buf"); -// render_path_bind_target("tex", "tex"); -// render_path_bind_target("gbuffer0", "gbuffer0"); -// render_path_bind_target("_main", "gbufferD"); -// render_path_draw_shader("shader_datas/motion_blur_pass/motion_blur_pass"); -// render_path_set_target("tex"); -// render_path_bind_target("buf", "tex"); -// render_path_draw_shader("shader_datas/copy_pass/copy_pass"); -// } -// } - // function render_path_base_draw_histogram() { // { // let t: render_target_t = RenderTarget.create(); @@ -316,57 +306,43 @@ function render_path_base_draw_deferred_light() { // t.height = 1; // t.format = "RGBA64"; // render_path_create_render_target(t); - // render_path_load_shader("shader_datas/histogram_pass/histogram_pass"); // } - // render_path_set_target("histogram"); -// render_path_bind_target("taa", "tex"); +// render_path_bind_target("last", "tex"); // render_path_draw_shader("shader_datas/histogram_pass/histogram_pass"); // } -function render_path_base_draw_taa() { - let current: string = render_path_base_taa_frame % 2 == 0 ? "buf2" : "taa2"; - let last: string = render_path_base_taa_frame % 2 == 0 ? "taa2" : "buf2"; - - render_path_set_target(current); - render_path_clear_target(0x00000000); - render_path_bind_target("buf", "color_tex"); - render_path_draw_shader("shader_datas/smaa_edge_detect/smaa_edge_detect"); - - render_path_set_target("taa"); - render_path_clear_target(0x00000000); - render_path_bind_target(current, "edges_tex"); - render_path_draw_shader("shader_datas/smaa_blend_weight/smaa_blend_weight"); - - render_path_set_target(current); - render_path_bind_target("buf", "color_tex"); - render_path_bind_target("taa", "blend_tex"); - render_path_draw_shader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); +function render_path_base_draw_taa(bufa: string, bufb: string) { + render_path_set_target(bufb); + render_path_bind_target(bufa, "tex"); let skip_taa: bool = context_raw.split_view; if (skip_taa) { - render_path_set_target("taa"); - render_path_bind_target(current, "tex"); render_path_draw_shader("shader_datas/copy_pass/copy_pass"); } else { - render_path_set_target("taa"); - render_path_bind_target(current, "tex"); - render_path_bind_target(last, "tex2"); + render_path_bind_target("last", "tex2"); render_path_draw_shader("shader_datas/taa_pass/taa_pass"); } + render_path_set_target(""); + render_path_bind_target(bufb, "tex"); + if (render_path_base_ssaa4()) { - render_path_set_target(""); - render_path_bind_target(render_path_base_taa_frame % 2 == 0 ? "taa2" : "taa", "tex"); render_path_draw_shader("shader_datas/supersample_resolve/supersample_resolve"); } else { - render_path_set_target(""); - render_path_bind_target(render_path_base_taa_frame == 0 ? current : "taa", "tex"); render_path_draw_shader("shader_datas/copy_pass/copy_pass"); } + + // Swap buf and last targets + let last_target: render_target_t = map_get(render_path_render_targets, "last"); + last_target.name = bufb; + let buf_target: render_target_t = map_get(render_path_render_targets, bufb); + buf_target.name = "last"; + map_set(render_path_render_targets, bufb, last_target); + map_set(render_path_render_targets, "last", buf_target); } function render_path_base_draw_gbuffer() { diff --git a/base/sources/ts/render_path_deferred.ts b/base/sources/ts/render_path_deferred.ts index c7b30b5d..48660bc0 100644 --- a/base/sources/ts/render_path_deferred.ts +++ b/base/sources/ts/render_path_deferred.ts @@ -30,54 +30,21 @@ function render_path_deferred_init() { t.scale = render_path_base_get_super_sampling(); render_path_create_render_target(t); } - { - let t: render_target_t = render_target_create(); - t.name = "tex"; - t.width = 0; - t.height = 0; - t.format = "RGBA64"; - t.scale = render_path_base_get_super_sampling(); - render_path_create_render_target(t); - } { let t: render_target_t = render_target_create(); t.name = "buf"; t.width = 0; t.height = 0; - ///if (arm_direct3d12 || arm_vulkan) - // Match raytrace_target format - // Will cause "The render target format in slot 0 does not match that specified by the current pipeline state" t.format = "RGBA64"; - ///else - t.format = "RGBA32"; - ///end t.scale = render_path_base_get_super_sampling(); render_path_create_render_target(t); } { let t: render_target_t = render_target_create(); - t.name = "buf2"; + t.name = "last"; t.width = 0; t.height = 0; - t.format = "RGBA32"; - t.scale = render_path_base_get_super_sampling(); - render_path_create_render_target(t); - } - { - let t: render_target_t = render_target_create(); - t.name = "taa"; - t.width = 0; - t.height = 0; - t.format = "RGBA32"; - t.scale = render_path_base_get_super_sampling(); - render_path_create_render_target(t); - } - { - let t: render_target_t = render_target_create(); - t.name = "taa2"; - t.width = 0; - t.height = 0; - t.format = "RGBA32"; + t.format = "RGBA64"; t.scale = render_path_base_get_super_sampling(); render_path_create_render_target(t); } @@ -137,13 +104,8 @@ function render_path_deferred_init() { render_path_load_shader("shader_datas/compositor_pass/compositor_pass"); render_path_load_shader("shader_datas/copy_pass/copy_pass"); render_path_load_shader("shader_datas/copy_pass/copyR8_pass"); - render_path_load_shader("shader_datas/smaa_edge_detect/smaa_edge_detect"); - render_path_load_shader("shader_datas/smaa_blend_weight/smaa_blend_weight"); - render_path_load_shader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); render_path_load_shader("shader_datas/taa_pass/taa_pass"); render_path_load_shader("shader_datas/supersample_resolve/supersample_resolve"); - // render_path_load_shader("shader_datas/motion_blur_pass/motion_blur_pass"); - // render_path_load_shader("shader_datas/motion_blur_veloc_pass/motion_blur_veloc_pass"); render_path_paint_init(); @@ -164,18 +126,17 @@ function render_path_deferred_commands() { function render_path_deferred_draw_deferred() { render_path_base_draw_ssao(); render_path_base_draw_deferred_light(); - render_path_base_draw_bloom("tex"); - // draw_motion_blur(); + render_path_base_draw_bloom(); // draw_histogram(); - render_path_set_target("buf"); - render_path_bind_target("tex", "tex"); + render_path_set_target("gbuffer1"); + render_path_bind_target("buf", "tex"); // render_path_bind_target("histogram", "histogram"); render_path_draw_shader("shader_datas/compositor_pass/compositor_pass"); - render_path_set_target("buf"); + render_path_set_target("gbuffer1"); render_path_base_draw_compass(); render_path_draw_meshes("overlay"); - render_path_base_draw_taa(); + render_path_base_draw_taa("gbuffer1", "buf"); } diff --git a/base/sources/ts/render_path_forward.ts b/base/sources/ts/render_path_forward.ts index ec6e44f0..766fc96b 100644 --- a/base/sources/ts/render_path_forward.ts +++ b/base/sources/ts/render_path_forward.ts @@ -23,5 +23,5 @@ function render_path_forward_draw_forward() { render_path_base_draw_compass(); render_path_draw_meshes("overlay"); - render_path_base_draw_taa(); + render_path_base_draw_taa("buf", "gbuffer1"); } diff --git a/base/sources/ts/render_path_raytrace.ts b/base/sources/ts/render_path_raytrace.ts index 38a88df6..b65aa110 100644 --- a/base/sources/ts/render_path_raytrace.ts +++ b/base/sources/ts/render_path_raytrace.ts @@ -219,16 +219,16 @@ function render_path_raytrace_draw(use_live_layer: bool) { ///end render_path_raytrace_commands(use_live_layer); - render_path_base_draw_bloom("buf"); + render_path_base_draw_bloom(); render_path_set_target("buf"); render_path_draw_meshes("overlay"); render_path_set_target("buf"); render_path_base_draw_compass(); - render_path_set_target("taa"); + render_path_set_target("last"); render_path_bind_target("buf", "tex"); render_path_draw_shader("shader_datas/compositor_pass/compositor_pass"); render_path_set_target(""); - render_path_bind_target("taa", "tex"); + render_path_bind_target("last", "tex"); render_path_draw_shader("shader_datas/copy_pass/copy_pass"); if (config_raw.brush_3d) { render_path_paint_commands_cursor();