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.);
|
||||
}
|
||||
1
common/vfx/materials/shaders/screen_clouds.gdshader.uid
Normal file
1
common/vfx/materials/shaders/screen_clouds.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://doceegdvj0pp3
|
||||
@@ -4,21 +4,16 @@
|
||||
[ext_resource type="Shader" uid="uid://cfj18vc04cgkg" path="res://common/vfx/materials/shaders/blur_vignette.gdshader" id="2_ktnx3"]
|
||||
[ext_resource type="PackedScene" uid="uid://yk78ubpu5ghq" path="res://gui/game/pass_day/pass_day.tscn" id="3_ktnx3"]
|
||||
[ext_resource type="Shader" uid="uid://btgk5l0a6ii44" path="res://common/vfx/materials/shaders/screen_fog.gdshader" id="3_qdnee"]
|
||||
[ext_resource type="Script" uid="uid://bi8fo6yp25su7" path="res://stages/terrain/region/scripts/camera_fog.gd" id="4_ovqi1"]
|
||||
[ext_resource type="Script" uid="uid://bi8fo6yp25su7" path="res://stages/terrain/region/scripts/screen_post_process.gd" id="4_ovqi1"]
|
||||
[ext_resource type="PackedScene" uid="uid://12nak7amd1uq" path="res://gui/game/game_gui.tscn" id="4_qdnee"]
|
||||
[ext_resource type="Shader" uid="uid://doceegdvj0pp3" path="res://common/vfx/materials/shaders/screen_clouds.gdshader" id="5_2w03p"]
|
||||
[ext_resource type="Script" uid="uid://b366do6jdx87h" path="res://stages/terrain/region/scripts/post_process/clouds.gd" id="5_6d8m3"]
|
||||
[ext_resource type="PackedScene" uid="uid://bgvbgeq46wee2" path="res://entities/player/player.tscn" id="5_ovqi1"]
|
||||
[ext_resource type="PackedScene" uid="uid://d324mlmgls4fs" path="res://entities/interactables/truck/recharge/truck_recharge.tscn" id="7_6d8m3"]
|
||||
[ext_resource type="PackedScene" uid="uid://dj7gp3crtg2yt" path="res://entities/camera/camera.tscn" id="8_fwgig"]
|
||||
[ext_resource type="PackedScene" uid="uid://fnv0qhkh40mv" path="res://gui/game/announce/announce.tscn" id="8_mlppq"]
|
||||
[ext_resource type="Texture2D" uid="uid://rdrhi3r11ey6" path="res://common/icons/square-rounded.svg" id="10_ktnx3"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdnee"]
|
||||
shader = ExtResource("2_ktnx3")
|
||||
shader_parameter/blur_radius = 0.0630000029925
|
||||
shader_parameter/blur_amount = 1.0000000475
|
||||
shader_parameter/blur_inner = 0.4950000235125
|
||||
shader_parameter/blur_outer = 0.7810000370975
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ovqi1"]
|
||||
noise_type = 2
|
||||
|
||||
@@ -47,7 +42,37 @@ shader_parameter/noise_speed_2 = 0.010000000475
|
||||
shader_parameter/noise_dir_1 = Vector2(1, 1)
|
||||
shader_parameter/noise_dir_2 = Vector2(1, -1)
|
||||
shader_parameter/smoke_color = Color(1, 1, 1, 1)
|
||||
shader_parameter/density = 0.010000000475
|
||||
shader_parameter/density = 0.070000003325
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_2w03p"]
|
||||
noise_type = 2
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_6d8m3"]
|
||||
noise = SubResource("FastNoiseLite_2w03p")
|
||||
seamless = true
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_6d8m3"]
|
||||
shader = ExtResource("5_2w03p")
|
||||
shader_parameter/camera_position = Vector2(0, 0)
|
||||
shader_parameter/camera_zoom = Vector2(1, 1)
|
||||
shader_parameter/viewport_size = Vector2(1920, 1080)
|
||||
shader_parameter/noise_texture = SubResource("NoiseTexture2D_6d8m3")
|
||||
shader_parameter/cloud_speed = 0.10000000475
|
||||
shader_parameter/cloud_delay = 1.0
|
||||
shader_parameter/noise_dir = Vector2(1, 1)
|
||||
shader_parameter/cloud_color = Color(0.59428054, 0.8206175, 0.899937, 1)
|
||||
shader_parameter/cloud_alpha = 1.0
|
||||
shader_parameter/cloud_size = 87.48400410799
|
||||
shader_parameter/cloud_distorsion_speed = 0.10000000475
|
||||
shader_parameter/density = 0.3610000171475
|
||||
shader_parameter/blur_amount = 0.0400000019
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdnee"]
|
||||
shader = ExtResource("2_ktnx3")
|
||||
shader_parameter/blur_radius = 0.0630000029925
|
||||
shader_parameter/blur_amount = 1.0000000475
|
||||
shader_parameter/blur_inner = 0.4950000235125
|
||||
shader_parameter/blur_outer = 0.7810000370975
|
||||
|
||||
[sub_resource type="Curve" id="Curve_qdnee"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.4883721, 1), 0.037164874, 0.037164874, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
@@ -88,17 +113,10 @@ script = ExtResource("1_441sk")
|
||||
entity_container = NodePath("Entities")
|
||||
|
||||
[node name="PostProcess" type="CanvasLayer" parent="." unique_id=729471745]
|
||||
|
||||
[node name="Vignette" type="ColorRect" parent="PostProcess" unique_id=2057271511]
|
||||
material = SubResource("ShaderMaterial_qdnee")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
layer = 0
|
||||
|
||||
[node name="Fog" type="ColorRect" parent="PostProcess" unique_id=1487713892 node_paths=PackedStringArray("camera")]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_mlppq")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -109,8 +127,30 @@ mouse_filter = 2
|
||||
script = ExtResource("4_ovqi1")
|
||||
camera = NodePath("../../Camera")
|
||||
|
||||
[node name="Clouds" type="ColorRect" parent="PostProcess" unique_id=1053740484 node_paths=PackedStringArray("camera", "region")]
|
||||
material = SubResource("ShaderMaterial_6d8m3")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("5_6d8m3")
|
||||
camera = NodePath("../../Camera")
|
||||
region = NodePath("../..")
|
||||
|
||||
[node name="Vignette" type="ColorRect" parent="PostProcess" unique_id=2057271511]
|
||||
material = SubResource("ShaderMaterial_qdnee")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="PassDay" parent="." unique_id=1144772570 instance=ExtResource("3_ktnx3")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="RegionGui" type="CanvasLayer" parent="." unique_id=2024485651]
|
||||
layer = 2
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
extends ColorRect
|
||||
|
||||
@export var camera : Camera
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if is_node_ready():
|
||||
if visible:
|
||||
if camera:
|
||||
material.set_shader_parameter( "camera_position", camera.global_position )
|
||||
# material.set_shader_parameter( "camera_offset", camera.offset )
|
||||
52
stages/terrain/region/scripts/post_process/clouds.gd
Normal file
52
stages/terrain/region/scripts/post_process/clouds.gd
Normal file
@@ -0,0 +1,52 @@
|
||||
extends ColorRect
|
||||
|
||||
@export var camera : Camera
|
||||
@export var region : Region
|
||||
|
||||
const PASSING_DAY_CLOUD_SPEED = 5
|
||||
const CLOUD_DELAY_ACC_LERP = 0.2
|
||||
|
||||
var in_passing_day := false
|
||||
var cloud_delay := 0.
|
||||
var cloud_delay_acc = 0.
|
||||
|
||||
func _ready():
|
||||
if region:
|
||||
update_noise()
|
||||
|
||||
region.data.pass_day_proceeded.connect(
|
||||
func(_d):
|
||||
update_noise()
|
||||
cloud_delay = 0
|
||||
|
||||
)
|
||||
else:
|
||||
printerr("No region selected for clouds")
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if is_node_ready():
|
||||
if region and region.data.in_passing_day_animation:
|
||||
cloud_delay_acc = lerp(cloud_delay_acc,1.,CLOUD_DELAY_ACC_LERP)
|
||||
else:
|
||||
cloud_delay_acc = lerp(cloud_delay_acc,0.,CLOUD_DELAY_ACC_LERP)
|
||||
|
||||
cloud_delay += cloud_delay_acc * PASSING_DAY_CLOUD_SPEED
|
||||
|
||||
if visible:
|
||||
if camera:
|
||||
material.set_shader_parameter("camera_zoom", camera.zoom )
|
||||
material.set_shader_parameter("camera_position", camera.global_position )
|
||||
material.set_shader_parameter("viewport_size", get_viewport().get_visible_rect().size)
|
||||
material.set_shader_parameter("cloud_delay", cloud_delay)
|
||||
|
||||
func update_noise() -> void:
|
||||
var texture := NoiseTexture2D.new()
|
||||
texture.seamless = true
|
||||
|
||||
var noise := FastNoiseLite.new()
|
||||
noise.noise_type = FastNoiseLite.TYPE_CELLULAR
|
||||
noise.seed = region.data.region_name.hash() + region.data.charges
|
||||
|
||||
texture.noise = noise
|
||||
|
||||
material.set_shader_parameter("noise_texture", texture)
|
||||
1
stages/terrain/region/scripts/post_process/clouds.gd.uid
Normal file
1
stages/terrain/region/scripts/post_process/clouds.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b366do6jdx87h
|
||||
14
stages/terrain/region/scripts/screen_post_process.gd
Normal file
14
stages/terrain/region/scripts/screen_post_process.gd
Normal file
@@ -0,0 +1,14 @@
|
||||
extends ColorRect
|
||||
|
||||
@export var camera : Camera
|
||||
|
||||
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if is_node_ready():
|
||||
if visible:
|
||||
if camera:
|
||||
material.set_shader_parameter("camera_zoom", camera.zoom )
|
||||
material.set_shader_parameter("camera_position", camera.global_position )
|
||||
material.set_shader_parameter( "viewport_size", get_viewport().get_visible_rect().size)
|
||||
Reference in New Issue
Block a user