From 3ceadf4a0fade7c82fc78a7f0950f7843ebad585 Mon Sep 17 00:00:00 2001 From: Matteo Sonaglioni Date: Thu, 4 Jun 2026 21:23:18 +0200 Subject: [PATCH] thickness edge detection --- core/daynight/edge_detection_compositor.gd | 7 +++++-- core/daynight/edge_detection_shader.glsl | 15 +++++++++------ tgcc/main_scene.tscn | 1 + 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/daynight/edge_detection_compositor.gd b/core/daynight/edge_detection_compositor.gd index 61bfa37..91bca25 100644 --- a/core/daynight/edge_detection_compositor.gd +++ b/core/daynight/edge_detection_compositor.gd @@ -1,6 +1,9 @@ class_name EdgeDetectionCompositor extends CompositorEffect +# --- MODIFICATO: Parametro esportato per l'Inspector --- +@export_range(0.0, 5.0, 0.1) var line_thickness: float = 1.0 + var rd: RenderingDevice var shader: RID var pipeline: RID @@ -78,8 +81,8 @@ func _render_callback(p_effect_callback_type: EffectCallbackType, p_render_data: var texture_sampler = RDSamplerState.new() texture_sampler = rd.sampler_create(texture_sampler) - - var parameters := PackedFloat32Array([size.x, size.y, 0.0, 0.0]) + # --- MODIFICATO: Inviato il parametro line_thickness nel buffer GPU --- + var parameters := PackedFloat32Array([size.x, size.y, line_thickness, 0.0]) var inv_proj_mat := p_render_data.get_render_scene_data().get_cam_projection().inverse() var inv_proj_mat_array := PackedVector4Array([inv_proj_mat.x, inv_proj_mat.y, inv_proj_mat.z, inv_proj_mat.w]) diff --git a/core/daynight/edge_detection_shader.glsl b/core/daynight/edge_detection_shader.glsl index 02dac2d..91b9bce 100644 --- a/core/daynight/edge_detection_shader.glsl +++ b/core/daynight/edge_detection_shader.glsl @@ -4,9 +4,11 @@ layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; +// --- MODIFICATO: Inserito line_thickness e mantenuto il padding (reserved) --- layout(set = 0, binding = 0, std430) readonly buffer Params { vec2 raster_size; - vec2 reserved; + float line_thickness; + float reserved; mat4 inv_proj_mat; } params; @@ -89,12 +91,13 @@ void main() { // Da qui in poi, il codice prosegue normalmente solo per gli altri oggetti - // UV ofssets + // --- MODIFICATO: Aggiunto multiplier "thickness" agli UV offsets --- + float thickness = params.line_thickness; vec2 uv_offsets[4]; - uv_offsets[0] = uv_normalized + vec2(0.0, -1.0) * texel_size + offset; - uv_offsets[1] = uv_normalized + vec2(0.0, 1.0) * texel_size + offset; - uv_offsets[2] = uv_normalized + vec2(1.0, 0.0) * texel_size + offset; - uv_offsets[3] = uv_normalized + vec2(-1.0, 0.0) * texel_size + offset; + uv_offsets[0] = uv_normalized + vec2(0.0, -1.0) * texel_size * thickness + offset; + uv_offsets[1] = uv_normalized + vec2(0.0, 1.0) * texel_size * thickness + offset; + uv_offsets[2] = uv_normalized + vec2(1.0, 0.0) * texel_size * thickness + offset; + uv_offsets[3] = uv_normalized + vec2(-1.0, 0.0) * texel_size * thickness + offset; float mask = ceil(raw_roughness); diff --git a/tgcc/main_scene.tscn b/tgcc/main_scene.tscn index 62c0665..916a577 100644 --- a/tgcc/main_scene.tscn +++ b/tgcc/main_scene.tscn @@ -157,6 +157,7 @@ access_resolved_depth = false needs_motion_vectors = false needs_normal_roughness = false script = ExtResource("4_lpdy6") +line_thickness = 2.0 metadata/_custom_type_script = "uid://brcimd12tx3dm" [sub_resource type="Compositor" id="Compositor_mb5yv"]