Ajout des nuages
* ajout d'un effet de post processing de nuage qui réagit à la recharge
This commit is contained in:
48
common/vfx/materials/shaders/screen_clouds.gdshader
Normal file
48
common/vfx/materials/shaders/screen_clouds.gdshader
Normal file
@@ -0,0 +1,48 @@
|
||||
// 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.);
|
||||
}
|
||||
Reference in New Issue
Block a user