thickness edge detection
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
class_name EdgeDetectionCompositor
|
class_name EdgeDetectionCompositor
|
||||||
extends CompositorEffect
|
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 rd: RenderingDevice
|
||||||
var shader: RID
|
var shader: RID
|
||||||
var pipeline: RID
|
var pipeline: RID
|
||||||
@@ -78,8 +81,8 @@ func _render_callback(p_effect_callback_type: EffectCallbackType, p_render_data:
|
|||||||
var texture_sampler = RDSamplerState.new()
|
var texture_sampler = RDSamplerState.new()
|
||||||
texture_sampler = rd.sampler_create(texture_sampler)
|
texture_sampler = rd.sampler_create(texture_sampler)
|
||||||
|
|
||||||
|
# --- MODIFICATO: Inviato il parametro line_thickness nel buffer GPU ---
|
||||||
var parameters := PackedFloat32Array([size.x, size.y, 0.0, 0.0])
|
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 := 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])
|
var inv_proj_mat_array := PackedVector4Array([inv_proj_mat.x, inv_proj_mat.y, inv_proj_mat.z, inv_proj_mat.w])
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,11 @@
|
|||||||
|
|
||||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
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 {
|
layout(set = 0, binding = 0, std430) readonly buffer Params {
|
||||||
vec2 raster_size;
|
vec2 raster_size;
|
||||||
vec2 reserved;
|
float line_thickness;
|
||||||
|
float reserved;
|
||||||
mat4 inv_proj_mat;
|
mat4 inv_proj_mat;
|
||||||
} params;
|
} params;
|
||||||
|
|
||||||
@@ -89,12 +91,13 @@ void main() {
|
|||||||
|
|
||||||
// Da qui in poi, il codice prosegue normalmente solo per gli altri oggetti
|
// 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];
|
vec2 uv_offsets[4];
|
||||||
uv_offsets[0] = uv_normalized + vec2(0.0, -1.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 + 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 + 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 + offset;
|
uv_offsets[3] = uv_normalized + vec2(-1.0, 0.0) * texel_size * thickness + offset;
|
||||||
|
|
||||||
float mask = ceil(raw_roughness);
|
float mask = ceil(raw_roughness);
|
||||||
|
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ access_resolved_depth = false
|
|||||||
needs_motion_vectors = false
|
needs_motion_vectors = false
|
||||||
needs_normal_roughness = false
|
needs_normal_roughness = false
|
||||||
script = ExtResource("4_lpdy6")
|
script = ExtResource("4_lpdy6")
|
||||||
|
line_thickness = 2.0
|
||||||
metadata/_custom_type_script = "uid://brcimd12tx3dm"
|
metadata/_custom_type_script = "uid://brcimd12tx3dm"
|
||||||
|
|
||||||
[sub_resource type="Compositor" id="Compositor_mb5yv"]
|
[sub_resource type="Compositor" id="Compositor_mb5yv"]
|
||||||
|
|||||||
Reference in New Issue
Block a user