Files
seeding-planets/common/vfx/materials/shaders/screen_clouds.gdshader
Zacharie Guet 6430609c37 Ajout des nuages
* ajout d'un effet de post processing de nuage qui réagit à la recharge
2026-04-29 23:15:37 +02:00

48 lines
1.8 KiB
Plaintext

// Based on https://godotshaders.com/shader/screen-smoke-fog/
shader_type canvas_item;
render_mode blend_mul;
// Stuff related to camera position and offsets
uniform vec2 camera_position;
uniform vec2 camera_zoom = vec2(1.0);
uniform vec2 viewport_size = vec2(1920.0, 1080.0);
// Uniforms for customization
uniform sampler2D noise_texture : repeat_enable;
uniform float cloud_speed : hint_range(0.0, 1.0) = 1.0;
uniform float cloud_delay : hint_range(0.0, 100.0) = 1.0;
uniform vec2 noise_dir = vec2(1.0,+1.0);
uniform vec3 cloud_color : source_color = vec3(0.8);
uniform float cloud_alpha : hint_range(0.0, 1.0) = 1.0;
uniform float cloud_size : hint_range(1.0, 100.0) = 10.0;
uniform float cloud_distorsion_speed : hint_range(0.0, 1.) = 0.05;
uniform float density : hint_range(0.0, 1.0) = 1.0;
uniform float blur_amount : hint_range(0.0, 1.0) = 1.0;
void fragment() {
vec2 world_pos = (UV - 0.5) * (viewport_size) / camera_zoom + camera_position;
//COLOR=texture(noise_texture, world_pos * (1./(cloud_size*100.)));
float time = TIME+cloud_delay;
vec2 time_offset = time * noise_dir * cloud_speed * 0.01;
vec2 distorsion_time_offset = time * noise_dir * (cloud_speed + vec2(cloud_distorsion_speed,cloud_distorsion_speed)) * 0.01;
vec2 cloud_uv = world_pos * (1./(cloud_size*100.)) + time_offset;
vec2 distorsion_cloud_uv = world_pos * (1./(cloud_size*100.)) + distorsion_time_offset;
float final_noise = (
texture(noise_texture, cloud_uv) * 0.5 +
texture(noise_texture, distorsion_cloud_uv) * 0.5
).r;
float edge = smoothstep(density - blur_amount * 0.5, density + blur_amount * 0.5, final_noise);
COLOR = vec4(mix(cloud_color, vec3(1.0), edge), 1.0);
//if (final_noise < density) {
//COLOR = vec4(cloud_color.r,cloud_color.g,cloud_color.b,1.);
//} else
//COLOR = vec4(1.,1.,1.,1.);
}