Files
uarep-ctl/shaders/antenas.tres

121 lines
4.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[gd_resource type="ShaderMaterial" load_steps=3 format=4 uid="uid://s6xe8igevnv2"]
[sub_resource type="Shader" id="1"]
code = "shader_type canvas_item;
#include \"tools.gdshaderinc\"
#define RADIUS_INNER_0 200.0 /* Радиус внутренний для режима приоритет РТО */
#define RADIUS_INNER_1 480.0 /* Радиус внутренний для режима приоритет РЛС */
#define ANTENAS_COUNT 28 /* Количество антенн */
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */
uniform vec4 fxp = vec4(0.2, 0.0, 0.0, 10.0); /* Индикация неисправности модулей ФС: Заметность штриховки. Скорость движения штрховки. Наклон штрховки. Частота штриховки */
uniform vec4 ant_band_c[ANTENAS_COUNT];
uniform uint ant_band_m[ANTENAS_COUNT];
uniform float rotation: hint_range(0.0, 360.0) = 0.0; /* */
uniform int mode = 0; /* Режим отображения. Приоритет РТО - 0, приоритет РЛС - 1 */
uniform sampler2D band_colors: source_color;
const float ant_band_r0_0[] = {100.0, 240.0};
const float ant_band_r0_1[] = {125.0, 245.0};
const float ant_band_r0_2[] = {150.0, 250.0};
const float ant_band_r0_3[] = {175.0, 255.0};
const float ant_band_r0_4[] = {200.0, 260.0};
const float ant_band_r0_5[] = {225.0, 265.0};
const float ant_band_r0_6[] = {250.0, 270.0};
const float ant_band_r1_0[] = {125.0, 245.0};
const float ant_band_r1_1[] = {150.0, 250.0};
const float ant_band_r1_2[] = {175.0, 255.0};
const float ant_band_r1_3[] = {200.0, 260.0};
const float ant_band_r1_4[] = {225.0, 265.0};
const float ant_band_r1_5[] = {250.0, 270.0};
const float ant_band_r1_6[] = {275.0, 275.0};
const float d4 = 90.0;
const float ds = 1.0;
const float sf = 500.0;
const float radius_inner_0 = RADIUS_INNER_0;
const float radius_inner_1 = RADIUS_INNER_1;
const float alpha = 0.5;
const vec2 pc0 = vec2(280, 280); /* Центр сетки антенн */
const int ant_band_count = 2;
float sector(float ac, float r0, float r1, vec4 ldt)
{
float a0 = radians(ac - 45.0);
float a1 = radians(ac + 45.0);
float va = smooth_px(a0 * sf, ldt.w, ds) - smooth_px(a1 * sf, ldt.w, ds);
float vr = smooth_px(r0, ldt.x, ds) - smooth_px(r1, ldt.x, ds);
return sqrt(va * vr);
}
void antenas(inout vec4 c, vec2 uv, float r0, float r1, int index, vec4 ldt)
{
vec4 col;
int j;
vec2 uvr;
for (int i = -ant_band_count; i <= ant_band_count; i ++)
{
j = index;
if (i == 2)
{
index--;
j = index - 3;
}
index++;
vec4 abc = ant_band_c[j];
uint abm = ant_band_m[j];
col.rgb = abc.rgb;
col.a = alpha + (random_timed(uv) - 0.5f) * abc.a;
if (abm == ANT_BAND_FAILED)
{
uvr = uv;
rotate_vec2(uvr, radians(fxp.z), pc0);
col.a *= (1.0 - fxp.x) + tanh(10.0 * sin(TIME * fxp.y + 2.0 * PI * uvr.x / fxp.w)) * fxp.x;
}
c += col * sector(float(i) * 90.0, r0, r1, ldt);
}
}
void vertex()
{
rotate_vec2(VERTEX, radians(360.0 - rotation), pc0);
}
void fragment()
{
ivec2 isz = textureSize(TEXTURE, 0);
vec2 uv = UV * vec2(float(isz.x), float(isz.y)); // координаты текущей точки в пикселях
COLOR = vec4(0, 0, 0, 0);
vec2 d = uv - pc0;
float theta = atan(d.x, d.y) * sf;
vec4 ldt = vec4(distance(pc0, uv), d, theta);
antenas(COLOR, uv, ant_band_r0_0[mode], ant_band_r1_0[mode], 0, ldt);
antenas(COLOR, uv, ant_band_r0_1[mode], ant_band_r1_1[mode], 4, ldt);
antenas(COLOR, uv, ant_band_r0_2[mode], ant_band_r1_2[mode], 8, ldt);
antenas(COLOR, uv, ant_band_r0_3[mode], ant_band_r1_3[mode], 12, ldt);
antenas(COLOR, uv, ant_band_r0_4[mode], ant_band_r1_4[mode], 16, ldt);
antenas(COLOR, uv, ant_band_r0_5[mode], ant_band_r1_5[mode], 20, ldt);
antenas(COLOR, uv, ant_band_r0_6[mode], ant_band_r1_6[mode], 24, ldt);
if (COLOR.a == 0.0) discard;
}
"
[sub_resource type="ImageTexture" id="ImageTexture_ij61e"]
[resource]
shader = SubResource("1")
shader_parameter/fxp = Vector4(0.13, 0, 0, 5)
shader_parameter/ant_band_c = PackedVector4Array(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)
shader_parameter/rotation = 0.0
shader_parameter/mode = 0
shader_parameter/band_colors = SubResource("ImageTexture_ij61e")