diff --git a/base/shaders/ssao_pass.kong b/base/shaders/ssao_pass.kong index a380bc2b..9f16a7e6 100644 --- a/base/shaders/ssao_pass.kong +++ b/base/shaders/ssao_pass.kong @@ -16,8 +16,8 @@ const gbufferD: tex2d; #[set(everything)] const gbuffer0: tex2d; -const max_steps: float = 32; -const ray_step: float = 0.001; +const max_steps: float = 24; +const ray_step: float = 0.0015; struct vert_in { pos: float2; @@ -79,7 +79,9 @@ fun ray_cast(view_ray: float3, dir: float3, vpos: float3): float { var delta: float = get_delta_depth(view_ray, hit_coord); if (delta > 0.0 && delta < 0.2) { dist = distance(vpos, hit_coord); - // break; + return dist; + } + if (distance(vpos, hit_coord) > 2.0) { return dist; } @@ -146,11 +148,12 @@ fun ssao_pass_frag(input: vert_out): float { n = normalize(constants.V3 * n); var vpos: float3 = get_pos_view(input.view_ray, d); - var col: float = ray_cast(input.view_ray, n, vpos); - var o1: float3 = normalize(tangent(n)); + var o1: float3 = tangent(n); var o2: float3 = cross(o1, n); var c1: float3 = 0.5 * (o1 + o2); var c2: float3 = 0.5 * (o1 - o2); + + var col: float = ray_cast(input.view_ray, n, vpos); col += ray_cast(input.view_ray, lerp3(n, o1, 0.5), vpos); col += ray_cast(input.view_ray, lerp3(n, o2, 0.5), vpos); col += ray_cast(input.view_ray, lerp3(n, -c1, 0.5), vpos); diff --git a/base/sources/ts/render_path_base.ts b/base/sources/ts/render_path_base.ts index 0f5ecc29..247893d2 100644 --- a/base/sources/ts/render_path_base.ts +++ b/base/sources/ts/render_path_base.ts @@ -255,8 +255,7 @@ function render_path_base_init_ssao() { function render_path_base_draw_ssao() { let ssao: bool = config_raw.rp_ssao != false && context_raw.camera_type == camera_type_t.PERSPECTIVE; - // if (ssao && context_raw.ddirty > 0 && render_path_base_taa_frame > 0) { - if (ssao && render_path_base_taa_frame > 0) { + if (ssao && context_raw.ddirty > 0 && render_path_base_taa_frame > 0) { if (map_get(render_path_render_targets, "singlea") == null) { render_path_base_init_ssao(); }