From a48d45d0b58e5a8122015b3a1d3f9e26649a65ef Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 22 Dec 2025 16:35:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/diagram/diagram.gd | 8 ++--- scenes/diagram/diagram.tscn | 24 ++++++++++--- shaders/{antenas.tres => antenas.gdshader} | 42 ++++++---------------- shaders/antenas.gdshader.uid | 1 + shaders/color-invers.gdshader | 2 +- shaders/select_tr.gdshader | 38 ++++++++++---------- shaders/strips.gdshader | 2 +- shaders/tools.gdshaderinc | 10 +++--- shaders/tracked.gdshader | 10 +++--- shaders/two-color.gdshader | 2 +- 10 files changed, 65 insertions(+), 74 deletions(-) rename shaders/{antenas.tres => antenas.gdshader} (68%) create mode 100644 shaders/antenas.gdshader.uid diff --git a/scenes/diagram/diagram.gd b/scenes/diagram/diagram.gd index 8f13b070..74879bed 100644 --- a/scenes/diagram/diagram.gd +++ b/scenes/diagram/diagram.gd @@ -39,7 +39,7 @@ func get_strob_radius() -> float: return $строб.get_instance_shader_param func get_strob_color() -> float: return $строб.get_instance_shader_parameter('color') func get_canvas_rotation() -> float: return material.get('shader_parameter/rotation') -func get_radius_outter() -> float: return 280.0 # material.get('shader_parameter/radius_outter') +func get_radius_outter() -> float: return size.x / scale.x func get_band_colors(_val: Array): return material.get('shader_parameter/ant_band_c') func get_band_failures(_val: Array): return material.get('shader_parameter/ant_band_m') @@ -116,10 +116,8 @@ func _on_settings_changed(): ## Закрашивание по умолчанию блоков ФС цветами из настроек. func set_def_colors(): var col_arr: PackedColorArray = [color0, color1] - var col = false for i in NUM_OF_RANGE: for j in NUM_OF_DIRECTIONS: - fs_default_colors.append(col_arr[int(col)]) - col = not col - col = not col + fs_default_colors.append(col_arr[i & 1]) + i += 1 set_band_colors(fs_default_colors) diff --git a/scenes/diagram/diagram.tscn b/scenes/diagram/diagram.tscn index 1392ef24..4e802783 100644 --- a/scenes/diagram/diagram.tscn +++ b/scenes/diagram/diagram.tscn @@ -1,20 +1,34 @@ -[gd_scene load_steps=6 format=3 uid="uid://b5kjdyxuwsot5"] +[gd_scene load_steps=7 format=3 uid="uid://b5kjdyxuwsot5"] -[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://shaders/antenas.tres" id="1_newdt"] +[ext_resource type="Shader" uid="uid://dhipoo0ju5ebg" path="res://shaders/antenas.gdshader" id="1_8cjpq"] [ext_resource type="Script" uid="uid://b85scuflwlqom" path="res://scenes/diagram/diagram.gd" id="2_8xjuy"] [ext_resource type="PackedScene" uid="uid://c73ahpv8uiuc7" path="res://scenes/diagram/sector.tscn" id="3_tgnog"] [ext_resource type="Shader" uid="uid://k36g8tww5yo" path="res://shaders/sector.gdshader" id="4_obn6s"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_oqtdt"] +shader = ExtResource("1_8cjpq") +shader_parameter/grid_cells_angle = 4 +shader_parameter/grid_layers_radius = 7 +shader_parameter/alpha = 0.5 +shader_parameter/inner_radius = 0.36 +shader_parameter/outer_radius = 1.0 +shader_parameter/grid_line_width = 0.0025 +shader_parameter/rotation = 0.0 +shader_parameter/ffr = 0.2 +shader_parameter/sfr = 0.0 +shader_parameter/pfr = 0.05 +shader_parameter/ant_band_c = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +shader_parameter/ant_band_m = PackedInt32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + [sub_resource type="ShaderMaterial" id="ShaderMaterial_lniyv"] resource_local_to_scene = true shader = ExtResource("4_obn6s") [node name="canvas" type="ColorRect"] texture_filter = 1 -material = ExtResource("1_newdt") -offset_top = -3.0 +material = SubResource("ShaderMaterial_oqtdt") offset_right = 560.0 -offset_bottom = 557.0 +offset_bottom = 560.0 scale = Vector2(2, 2) script = ExtResource("2_8xjuy") SecZap = ExtResource("3_tgnog") diff --git a/shaders/antenas.tres b/shaders/antenas.gdshader similarity index 68% rename from shaders/antenas.tres rename to shaders/antenas.gdshader index dfb7e20c..2d1ade08 100644 --- a/shaders/antenas.tres +++ b/shaders/antenas.gdshader @@ -1,24 +1,20 @@ -[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://s6xe8igevnv2"] +shader_type canvas_item; -[sub_resource type="Shader" id="1"] -code = "shader_type canvas_item; - -#include \"tools.gdshaderinc\" +#include "tools.gdshaderinc" #define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */ #define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */ // Конфигурация сетки -uniform int grid_cells_angle = 4; // Количество секторов (90° каждый) -uniform int grid_layers_radius = 7; // Количество слоёв по радиусу +uniform int grid_cells_angle = 4; /* Количество секторов (90° каждый) */ +uniform int grid_layers_radius = 7; /* Количество слоёв по радиусу */ uniform float alpha: hint_range(0.0, 1.0) = 0.5; -uniform float inner_radius = 0.36; // Внутренняя незакрашенная окружность -uniform float outer_radius = 1.0; // Внешний радиус -uniform float grid_line_width = 0.0025; // Сетка, ширина линий. Относительное значение +uniform float inner_radius = 0.36; /* Внутренняя незакрашенная окружность. Относительное значение */ +uniform float outer_radius = 1.0; /* Внешний радиус. Относительное значение */ +uniform float grid_line_width = 0.0025; /* Сетка, ширина линий. Относительное значение */ uniform float rotation: hint_range(0, 360) = 0.0; uniform float ffr: hint_range(0.0, 1.0) = 0.2; /* Индикация неисправности модулей ФС. Заметность штриховки. Индикация неисправности модулей ФС */ uniform float sfr: hint_range(0.0, 10.0) = 0.0; /* Индикация неисправности модулей ФС. Скорость движения штрховки */ -uniform float afr: hint_range(0.0, 180.0) = 0.0; /* Индикация неисправности модулей ФС. Наклон штрховки */ uniform float pfr: hint_range(0.01, 1.0) = 0.05; /* Индикация неисправности модулей ФС. Частота штриховки */ @@ -97,30 +93,14 @@ void fragment() layer_height - radius_in_layer < grid_line_width) { cell_color.rgb *= 0.7; // Затемняем границы } - + // Подмешивание шума для включённых cell_color.a = alpha + random_timed(centered_uv); + + // Индикация не исправности if (ant_band_m[cell_index] == ANT_BAND_FAILED) { - vec2 uvr = (UV - 0.5) * 2.0; - cell_color.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / pfr)) * ffr; + cell_color.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * centered_uv.x / pfr)) * ffr; } COLOR = cell_color; } -" - -[resource] -shader = SubResource("1") -shader_parameter/grid_cells_angle = 4 -shader_parameter/grid_layers_radius = 7 -shader_parameter/alpha = 0.5 -shader_parameter/inner_radius = 0.36 -shader_parameter/outer_radius = 1.0 -shader_parameter/grid_line_width = 0.0025 -shader_parameter/rotation = 0.0 -shader_parameter/ffr = 0.2 -shader_parameter/sfr = 0.0 -shader_parameter/afr = 0.0 -shader_parameter/pfr = 0.024 -shader_parameter/ant_band_c = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -shader_parameter/ant_band_m = PackedInt32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) diff --git a/shaders/antenas.gdshader.uid b/shaders/antenas.gdshader.uid new file mode 100644 index 00000000..f9244121 --- /dev/null +++ b/shaders/antenas.gdshader.uid @@ -0,0 +1 @@ +uid://dhipoo0ju5ebg diff --git a/shaders/color-invers.gdshader b/shaders/color-invers.gdshader index d082f902..12b79acc 100644 --- a/shaders/color-invers.gdshader +++ b/shaders/color-invers.gdshader @@ -2,5 +2,5 @@ shader_type canvas_item; void fragment() { - COLOR.rgb = vec3(1.0, 1.0, 1.0) - log(COLOR.rgb); + COLOR.rgb = vec3(1.0, 1.0, 1.0) - log(COLOR.rgb); } diff --git a/shaders/select_tr.gdshader b/shaders/select_tr.gdshader index 3dac47fe..4fdb901f 100644 --- a/shaders/select_tr.gdshader +++ b/shaders/select_tr.gdshader @@ -16,42 +16,40 @@ uniform float ant_band_r1_0 = 0.4; float smooth_px(float r, float R, float dss) { - return 1.0 - smoothstep(R - dss, R + dss, r); + return 1.0 - smoothstep(R - dss, R + dss, r); } void sector(inout vec4 c, vec2 uv, vec2 cnt, float a, float da, float r0, float r1, vec4 col) { - float l = distance(cnt, uv); - vec2 d = uv - cnt; - float sf = 500.0; - float theta = atan(d.x, d.y) * sf; - da /= 2.0; - float a0 = radians(a - da); - float a1 = radians(a + da); - float va = smooth_px(a0 * sf, theta, dsr) - smooth_px(a1 * sf, theta, dsr); - float vr = smooth_px(r0, l, ds) - smooth_px(r1, l, ds); + float l = distance(cnt, uv); + vec2 d = uv - cnt; + float sf = 500.0; + float theta = atan(d.x, d.y) * sf; + da /= 2.0; + float a0 = radians(a - da); + float a1 = radians(a + da); + float va = smooth_px(a0 * sf, theta, dsr) - smooth_px(a1 * sf, theta, dsr); + float vr = smooth_px(r0, l, ds) - smooth_px(r1, l, ds); float rgb = sqrt(va * vr); - c.rgb += col.rgb * rgb * col.a; + c.rgb += col.rgb * rgb * col.a; c.a += rgb * col.a; } void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, vec4 c0, vec4 c1) { - float da = 180.0f / float(cnt); + float da = 180.0f / float(cnt); for (int i = -cnt; i <= cnt; i ++) - { - float v = float(i & 1); - vec4 col = v * c0 + (1.0f - v) * c1; - sector(c, uv, p0, float(i) * da, da, r0, r1, col); - } + { + float v = float(i & 1); + vec4 col = v * c0 + (1.0f - v) * c1; + sector(c, uv, p0, float(i) * da, da, r0, r1, col); + } } vec2 rotateUVmatrinx(vec2 uv, vec2 pivot, float rotation) { - mat2 rotation_matrix=mat2( vec2(sin(rotation),-cos(rotation)), - vec2(cos(rotation),sin(rotation)) - ); + mat2 rotation_matrix=mat2(vec2(sin(rotation), -cos(rotation)), vec2(cos(rotation),sin(rotation))); uv -= pivot; uv *= rotation_matrix; uv += pivot; diff --git a/shaders/strips.gdshader b/shaders/strips.gdshader index 5f93c092..66f4c760 100644 --- a/shaders/strips.gdshader +++ b/shaders/strips.gdshader @@ -21,7 +21,7 @@ void vertex() void fragment() { - COLOR = color; + COLOR = color; if (disabled) { float ds = 1.0 / sharpness; diff --git a/shaders/tools.gdshaderinc b/shaders/tools.gdshaderinc index 6c4bca0b..a08e0ff7 100644 --- a/shaders/tools.gdshaderinc +++ b/shaders/tools.gdshaderinc @@ -8,16 +8,16 @@ float random_timed(vec2 uv) float smooth_px(float r, float R, float ds) { - return smoothstep(R + ds, R - ds, r); + return smoothstep(R + ds, R - ds, r); } void circle_thin(inout vec3 color, vec2 uv, vec2 p, float r, float w, vec3 c, float a) { - float d = distance(uv, p); - float v0 = r - w; - float v1 = r + w; - color += a * sqrt(smoothstep(v1, v0, d) * smoothstep(v0, v1, d) * c); + float d = distance(uv, p); + float v0 = r - w; + float v1 = r + w; + color += a * sqrt(smoothstep(v1, v0, d) * smoothstep(v0, v1, d) * c); } diff --git a/shaders/tracked.gdshader b/shaders/tracked.gdshader index 1c242dcd..76aa5ed3 100644 --- a/shaders/tracked.gdshader +++ b/shaders/tracked.gdshader @@ -19,9 +19,9 @@ uniform float speed: hint_range(0.0, 1024.0) = 0.0; float line(vec2 p1, vec2 p2, float width, vec2 uv) { - float dist = distance(p1, p2); // Дистанция между точками - float dist_uv = distance(p1, uv); // Дистанция между точкой и текущим пикселем - return 1.0 - floor(1.0 - (0.001 * width) + distance (mix(p1, p2, clamp(dist_uv / dist, 0.0, 1.0)), uv)); + float dist = distance(p1, p2); // Дистанция между точками + float dist_uv = distance(p1, uv); // Дистанция между точкой и текущим пикселем + return 1.0 - floor(1.0 - (0.001 * width) + distance (mix(p1, p2, clamp(dist_uv / dist, 0.0, 1.0)), uv)); } @@ -65,12 +65,12 @@ void fragment() float px1 = 0.0; float py0 = 0.0; float py1 = 0.0; - COLOR = vec4(1.0, 0.0, 0.0, 0.0); //texture(TEXTURE, UV); // Цвет текущей точки + COLOR = vec4(1.0, 0.0, 0.0, 0.0); // Цвет текущей точки get_line_points(px0, px1, py0, py1, 330.0); COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV); get_line_points(px0, px1, py0, py1, 90.0); COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV); get_line_points(px0, px1, py0, py1, 210.0); COLOR.a += line(vec2(px0, py0), vec2(px1, py1), 15.0, UV); - COLOR *= smooth_px(length(UV-center), radius, DSS); + COLOR *= smooth_px(length(UV - center), radius, DSS); } diff --git a/shaders/two-color.gdshader b/shaders/two-color.gdshader index fd0f624b..de27a828 100644 --- a/shaders/two-color.gdshader +++ b/shaders/two-color.gdshader @@ -13,5 +13,5 @@ vec3 bw_to_2color(vec3 c, vec3 dark, vec3 light) void fragment() { - COLOR.rgb = bw_to_2color(texture(TEXTURE, UV).rgb, white, black); + COLOR.rgb = bw_to_2color(texture(TEXTURE, UV).rgb, white, black); }