2025-02-05 12:34:38 +00:00
|
|
|
shader_type canvas_item;
|
|
|
|
|
2025-06-13 08:03:19 +00:00
|
|
|
uniform float time_scale : hint_range(0.1, 5.0) = 1.0;
|
|
|
|
uniform float fog_intensity : hint_range(0.0, 1.0) = 0.8;
|
|
|
|
|
|
|
|
// 噪声函数
|
|
|
|
float noise(vec2 uv) {
|
|
|
|
return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453);
|
2025-02-05 12:34:38 +00:00
|
|
|
}
|
|
|
|
|
2025-06-13 08:03:19 +00:00
|
|
|
float fbm(vec2 uv) {
|
|
|
|
float value = 0.0;
|
|
|
|
float amplitude = 0.5;
|
|
|
|
float frequency = 1.0;
|
|
|
|
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
|
|
value += amplitude * noise(uv * frequency);
|
|
|
|
amplitude *= 0.5;
|
|
|
|
frequency *= 2.0;
|
|
|
|
}
|
|
|
|
return value;
|
2025-02-05 12:34:38 +00:00
|
|
|
}
|
2025-06-13 08:03:19 +00:00
|
|
|
|
|
|
|
void fragment() {
|
|
|
|
vec2 uv = UV;
|
|
|
|
float time = TIME * time_scale;
|
|
|
|
float sin_time_x = sin(time * 2.1) * 0.15 + 2.0;
|
|
|
|
float sin_time_y = sin(time * 3.5) * 0.15 + 2.0;
|
|
|
|
|
|
|
|
// 基础轮廓
|
|
|
|
vec2 center = vec2(0.5, 0.5); // 重心稍微偏上
|
|
|
|
float body_shape = 1.0 - length((uv - center) * vec2(sin_time_x, sin_time_y));
|
|
|
|
float base_shape = smoothstep(0.0, 0.8, body_shape);
|
|
|
|
|
|
|
|
// 飘动的雾气效果
|
|
|
|
float fog_noise = fbm(uv * 5.0 + vec2(time * 0.3, time * 0.2));
|
|
|
|
fog_noise = mix(fog_noise, fbm(uv * 9.0 - vec2(time * 0.4, 0.0)), 0.5);
|
|
|
|
|
|
|
|
// 组合形状和噪声
|
|
|
|
float final_alpha = base_shape * fog_noise * fog_intensity;
|
|
|
|
|
|
|
|
//// 添加边缘发光效果
|
|
|
|
//float edge_glow = 0.6 - smoothstep(0.0, 0.4, abs(base_shape - 0.3));
|
|
|
|
//final_alpha += edge_glow * 0.02;
|
|
|
|
|
|
|
|
// 最终颜色
|
|
|
|
COLOR.rgb = vec3(0.0);
|
|
|
|
COLOR.a = final_alpha * 2.5;
|
|
|
|
}
|