From 0701b4beae306a2799bf08ac07318fcc81dc7459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Fri, 29 Aug 2025 09:33:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor(shader):=20=E4=BC=98=E5=8C=96=E6=BF=80?= =?UTF-8?q?=E5=85=89=E7=9D=80=E8=89=B2=E5=99=A8=E4=BB=A3=E7=A0=81=E5=B9=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BD=AF=E8=BE=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除冗余注释并简化着色器代码逻辑,提高可读性 调整激光软边参数从0.2改为0.3以改善视觉效果 --- components/Bullets/Common/LaserSummoner.tscn | 2 +- shaders/BigLaser1.gdshader | 25 ++------------------ 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/components/Bullets/Common/LaserSummoner.tscn b/components/Bullets/Common/LaserSummoner.tscn index 0be27f2..6420b8e 100644 --- a/components/Bullets/Common/LaserSummoner.tscn +++ b/components/Bullets/Common/LaserSummoner.tscn @@ -11,7 +11,7 @@ shader = ExtResource("3_ow2gn") shader_parameter/laser_color = Color(1, 0, 0, 1) shader_parameter/width = 1.0 -shader_parameter/softness = 0.2 +shader_parameter/softness = 0.3 shader_parameter/wave_speed = 3.0 shader_parameter/wave_frequency = 13.154 shader_parameter/wave_amplitude = 1.151 diff --git a/shaders/BigLaser1.gdshader b/shaders/BigLaser1.gdshader index ea9110a..1fae183 100644 --- a/shaders/BigLaser1.gdshader +++ b/shaders/BigLaser1.gdshader @@ -1,6 +1,5 @@ shader_type canvas_item; render_mode blend_add; - uniform vec4 laser_color : source_color = vec4(1.0, 0.0, 0.0, 1.0); // 边缘颜色 uniform float width : hint_range(0.01, 1.0) = 0.1; // 激光宽度 uniform float softness : hint_range(0.01, 1.0) = 0.2; // 边缘柔和度 @@ -8,38 +7,18 @@ uniform float wave_speed : hint_range(-10.0, 10.0) = 2.0; // 波传播速度 uniform float wave_frequency : hint_range(1.0, 20.0) = 8.0; // 波频率 uniform float wave_amplitude : hint_range(0.1, 2.0) = 0.5; // 波幅度 uniform float wave_width : hint_range(0.01, 0.5) = 0.1; // 波宽度 - void fragment() { - // 将UV坐标转换为以激光中心为原点的坐标 vec2 uv = UV - vec2(0.5, 0.0); - - // 计算激光基础强度(中心白色,边缘渐变到laser_color) float dist = abs(uv.x) / width; float x_dist=abs(UV.x-0.5); float laser_intensity = 1.0 - smoothstep(0.0, softness, dist); - - // 计算波的位置(沿Y轴传播) float wave_pos = mod(TIME * wave_speed, 1.0); - - // 计算当前点到波中心的距离(在Y轴上的距离) float wave_dist = abs(uv.y - wave_pos); - - // 计算波强度(高斯分布) float wave_intensity = exp(-wave_dist * wave_dist / (2.0 * wave_width * wave_width)); - - // 添加波的弧形效果(在X轴上的分布) wave_intensity *= exp(-uv.x * uv.x / (2.0 * (width * 0.5) * (width * 0.5))); - - // 应用波频率和幅度 wave_intensity *= sin(wave_dist * wave_frequency * 3.14159) * wave_amplitude; - - // 组合激光和波效果 float total_intensity = laser_intensity + wave_intensity; - - // 颜色混合:中心白色,边缘渐变到laser_color vec3 base_color = mix(vec3(1.0), laser_color.rgb, 1.0 - laser_intensity); vec3 color = base_color + vec3(wave_intensity); - - // 设置最终颜色(加法混合模式会忽略alpha) - COLOR = vec4(color, (0.5-x_dist)*2.0); -} + COLOR = vec4(color, (0.5-x_dist)/0.5); +} \ No newline at end of file