[gd_resource type="VisualShader" load_steps=4 format=3 uid="uid://cyfnxkbtd6ehn"] [sub_resource type="VisualShaderNodeExpression" id="VisualShaderNodeExpression_pnln1"] size = Vector2(400, 260) expression = "float base = texture(tex, uv).a; border = texture(tex, uv + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(tex, uv - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(tex, uv + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; border += texture(tex, uv - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; if (base < 0.5 && border > 0.5) { border = 1.0; } else { border = 0.0; }" [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_dxtqj"] input_name = "texture" [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ebc8y"] output_port_for_preview = 0 input_name = "uv" [resource] code = "shader_type canvas_item; render_mode blend_mix; void fragment() { // Input:4 vec2 n_out4p0 = UV; float n_out2p0; // Expression:2 n_out2p0 = 0.0; { float base = texture(TEXTURE, n_out4p0).a; n_out2p0 = texture(TEXTURE, n_out4p0 + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; n_out2p0 += texture(TEXTURE, n_out4p0 - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; n_out2p0 += texture(TEXTURE, n_out4p0 + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; n_out2p0 += texture(TEXTURE, n_out4p0 - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; if (base < 0.5 && n_out2p0 > 0.5) { n_out2p0 = 1.0; } else { n_out2p0 = 0.0; } } // Output:0 COLOR.rgb = vec3(n_out2p0); } " graph_offset = Vector2(29.7429, 470.485) mode = 1 flags/light_only = false nodes/fragment/0/position = Vector2(500, 360) nodes/fragment/2/node = SubResource("VisualShaderNodeExpression_pnln1") nodes/fragment/2/position = Vector2(80, 380) nodes/fragment/2/size = Vector2(400, 260) nodes/fragment/2/input_ports = "0,8,tex;1,3,uv;" nodes/fragment/2/output_ports = "0,0,border;" nodes/fragment/2/expression = "float base = texture(tex, uv).a; border = texture(tex, uv + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(tex, uv - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(tex, uv + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; border += texture(tex, uv - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; if (base < 0.5 && border > 0.5) { border = 1.0; } else { border = 0.0; }" nodes/fragment/3/node = SubResource("VisualShaderNodeInput_dxtqj") nodes/fragment/3/position = Vector2(-160, 340) nodes/fragment/4/node = SubResource("VisualShaderNodeInput_ebc8y") nodes/fragment/4/position = Vector2(-180, 420) nodes/fragment/connections = PackedInt32Array(3, 0, 2, 0, 4, 0, 2, 1, 2, 0, 0, 0)