basic twitch integration working well, many bugs
This commit is contained in:
parent
4b4702c90a
commit
cdd8cdea3a
31 changed files with 1254 additions and 6 deletions
9
addons/water_shader/World.gd
Normal file
9
addons/water_shader/World.gd
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
extends Node3D
|
||||
|
||||
@onready var CurrentFPS = $CurrentFPS
|
||||
|
||||
func _ready():
|
||||
Engine.max_fps = 60
|
||||
|
||||
func _process(delta):
|
||||
CurrentFPS.text = str(Engine.get_frames_per_second()) + "/" + str(Engine.max_fps)
|
||||
240
addons/water_shader/World.tscn
Normal file
240
addons/water_shader/World.tscn
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
[gd_scene load_steps=35 format=3 uid="uid://ck1h771dply0g"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/water_shader/scripts/Camera3D.gd" id="1_oowxb"]
|
||||
[ext_resource type="Script" path="res://addons/water_shader/World.gd" id="1_rau4y"]
|
||||
[ext_resource type="Shader" path="res://addons/water_shader/shaders/water.gdshader" id="2_6nog1"]
|
||||
[ext_resource type="Material" uid="uid://w0521xyotujb" path="res://addons/water_shader/standard_shaders/pink.tres" id="4_3d1xh"]
|
||||
[ext_resource type="Material" uid="uid://due1qpgfoidud" path="res://addons/water_shader/standard_shaders/green.tres" id="5_731fp"]
|
||||
[ext_resource type="Shader" path="res://addons/water_shader/shaders/bottom.gdshader" id="6_dtw72"]
|
||||
[ext_resource type="Material" uid="uid://khxhx4mnugb1" path="res://addons/water_shader/standard_shaders/yellow.tres" id="6_u1h6e"]
|
||||
[ext_resource type="PackedScene" uid="uid://durvbjhil7ec1" path="res://addons/water_shader/scenes/Pier.tscn" id="7_bj37i"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmnmahdmhsq4h" path="res://addons/water_shader/assets/checker.png" id="8_56h6h"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_14kcx"]
|
||||
sky_top_color = Color(0.298039, 0.756863, 0.984314, 1)
|
||||
sky_horizon_color = Color(0.521569, 0.682353, 0.752941, 1)
|
||||
sky_curve = 0.261165
|
||||
ground_bottom_color = Color(0.156863, 0.356863, 0.717647, 1)
|
||||
ground_horizon_color = Color(0.109804, 0.411765, 0.556863, 1)
|
||||
sun_angle_max = 344.09
|
||||
sun_curve = 0.0137258
|
||||
|
||||
[sub_resource type="Sky" id="Sky_m3s1f"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_14kcx")
|
||||
process_mode = 1
|
||||
|
||||
[sub_resource type="Environment" id="Environment_nbsfo"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_m3s1f")
|
||||
ambient_light_source = 3
|
||||
ambient_light_color = Color(1, 1, 1, 1)
|
||||
fog_light_color = Color(0.0588235, 0.552941, 0.976471, 1)
|
||||
fog_light_energy = 0.51
|
||||
fog_density = 0.0
|
||||
fog_sky_affect = 0.0
|
||||
volumetric_fog_density = 0.0038
|
||||
volumetric_fog_albedo = Color(0.556863, 0.854902, 1, 1)
|
||||
volumetric_fog_anisotropy = 0.29
|
||||
volumetric_fog_length = 494.61
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_hnmyy"]
|
||||
size = Vector2(320, 320)
|
||||
subdivide_width = 1000
|
||||
subdivide_depth = 1000
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_8fje7"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_oh63k"]
|
||||
seamless = true
|
||||
as_normal_map = true
|
||||
noise = SubResource("FastNoiseLite_8fje7")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_6i3b2"]
|
||||
noise_type = 0
|
||||
seed = 1
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_sr7nv"]
|
||||
seamless = true
|
||||
as_normal_map = true
|
||||
noise = SubResource("FastNoiseLite_6i3b2")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_5edmb"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_dd0by"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_5edmb")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_vq7qh"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_xiypc"]
|
||||
seamless = true
|
||||
bump_strength = 28.3
|
||||
noise = SubResource("FastNoiseLite_vq7qh")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jsv1i"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_6nog1")
|
||||
shader_parameter/albedo = Color(0.02, 0.45, 0.8, 1)
|
||||
shader_parameter/transparency = 0.4
|
||||
shader_parameter/metallic = 0.0
|
||||
shader_parameter/roughness = 0.5
|
||||
shader_parameter/surface_normals_move_direction_a = Vector2(-1, 0)
|
||||
shader_parameter/surface_normals_move_direction_b = Vector2(0, 1)
|
||||
shader_parameter/surface_texture_roughness = 0.6
|
||||
shader_parameter/surface_texture_scale = 0.3
|
||||
shader_parameter/surface_texture_time_scale = 0.06
|
||||
shader_parameter/ssr_resolution = 2.0
|
||||
shader_parameter/ssr_max_travel = 30.0
|
||||
shader_parameter/ssr_max_diff = 4.0
|
||||
shader_parameter/ssr_mix_strength = 0.7
|
||||
shader_parameter/wave_noise_scale = 15.0
|
||||
shader_parameter/wave_height_scale = 0.25
|
||||
shader_parameter/wave_time_scale = 0.025
|
||||
shader_parameter/wave_normal_flatness = 30.0
|
||||
shader_parameter/border_color = Color(1, 1, 1, 1)
|
||||
shader_parameter/border_scale = 2.0
|
||||
shader_parameter/border_near = 0.5
|
||||
shader_parameter/border_far = 300.0
|
||||
shader_parameter/refraction_intensity = 0.4
|
||||
shader_parameter/max_visible_depth = 10.0
|
||||
shader_parameter/color_deep = Color(0, 0.1, 0.4, 1)
|
||||
shader_parameter/wave_a = SubResource("NoiseTexture2D_dd0by")
|
||||
shader_parameter/wave_b = SubResource("NoiseTexture2D_xiypc")
|
||||
shader_parameter/surface_normals_a = SubResource("NoiseTexture2D_oh63k")
|
||||
shader_parameter/surface_normals_b = SubResource("NoiseTexture2D_sr7nv")
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_x3ff0"]
|
||||
size = Vector3(18, 0.1, 40)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rx107"]
|
||||
albedo_texture = ExtResource("8_56h6h")
|
||||
uv1_scale = Vector3(1.5, 3, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_21ju6"]
|
||||
size = Vector3(50, 1, 2)
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_0b3qk"]
|
||||
radius = 8.0
|
||||
height = 16.0
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_37lja"]
|
||||
radius = 5.0
|
||||
height = 10.0
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_un52x"]
|
||||
radius = 2.0
|
||||
height = 4.0
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_x888m"]
|
||||
size = Vector2(320, 320)
|
||||
subdivide_width = 200
|
||||
subdivide_depth = 200
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_8j0ft"]
|
||||
frequency = 0.0056
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lawpj"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_8j0ft")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_65ep2"]
|
||||
noise_type = 4
|
||||
frequency = 0.5041
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_ko5xt"]
|
||||
width = 1024
|
||||
height = 1024
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_65ep2")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_y71r8"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("6_dtw72")
|
||||
shader_parameter/height_scale = 70.0
|
||||
shader_parameter/uv_scale = 400.0
|
||||
shader_parameter/texture_scale = 20.0
|
||||
shader_parameter/stone_texture = SubResource("NoiseTexture2D_ko5xt")
|
||||
shader_parameter/bottom = SubResource("NoiseTexture2D_lawpj")
|
||||
|
||||
[node name="World" type="Node3D"]
|
||||
script = ExtResource("1_rau4y")
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_nbsfo")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(-0.864275, 0.42705, -0.265815, 0, 0.528438, 0.848972, 0.50302, 0.733745, -0.456716, -103.155, 28.088, -116.302)
|
||||
light_color = Color(1, 0.956863, 0.905882, 1)
|
||||
light_energy = 1.08
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(-0.745476, 0.21039, -0.632457, 0, 0.948876, 0.315649, 0.666533, 0.235309, -0.707364, -129.747, 14.606, -113.29)
|
||||
script = ExtResource("1_oowxb")
|
||||
|
||||
[node name="WaterSurface" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0266228, 0.112858, -0.0368958)
|
||||
mesh = SubResource("PlaneMesh_hnmyy")
|
||||
surface_material_override/0 = SubResource("ShaderMaterial_jsv1i")
|
||||
|
||||
[node name="scenery" type="Node3D" parent="."]
|
||||
|
||||
[node name="Chessboard" type="MeshInstance3D" parent="scenery"]
|
||||
transform = Transform3D(0.741616, -0.139773, 0.656101, -0.16291, 0.911247, 0.378272, -0.650742, -0.387418, 0.653025, -68.4752, -4.30671, -56.5773)
|
||||
mesh = SubResource("BoxMesh_x3ff0")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_rx107")
|
||||
|
||||
[node name="Pier" parent="scenery" instance=ExtResource("7_bj37i")]
|
||||
transform = Transform3D(-1.99631, 0, 0.121435, 0, 2, 0, -0.121435, 0, -1.99631, -42.0222, 4.60747, -76.6392)
|
||||
|
||||
[node name="boxes" type="Node3D" parent="scenery"]
|
||||
|
||||
[node name="Box1" type="MeshInstance3D" parent="scenery/boxes"]
|
||||
transform = Transform3D(0.57211, -0.456602, -0.681325, 0.636205, 0.771326, 0.0173053, 0.517622, -0.443363, 0.731776, -134.206, 4.05422, -77.1431)
|
||||
mesh = SubResource("BoxMesh_21ju6")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("4_3d1xh")
|
||||
|
||||
[node name="Box2" type="MeshInstance3D" parent="scenery/boxes"]
|
||||
transform = Transform3D(-0.735081, 0.599193, 0.317212, 0.636205, 0.771326, 0.0173053, -0.234305, 0.214533, -0.948197, -116.454, 4.05422, -77.1431)
|
||||
mesh = SubResource("BoxMesh_21ju6")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("5_731fp")
|
||||
|
||||
[node name="Box3" type="MeshInstance3D" parent="scenery/boxes"]
|
||||
transform = Transform3D(-0.434076, 0.376398, -0.818476, 0.636205, 0.771326, 0.0173053, 0.637825, -0.513207, -0.574281, -99.6248, 4.05422, -77.1431)
|
||||
mesh = SubResource("BoxMesh_21ju6")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("6_u1h6e")
|
||||
|
||||
[node name="spheres" type="Node3D" parent="scenery"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.0822, 0, 0)
|
||||
|
||||
[node name="Sphere1" type="MeshInstance3D" parent="scenery/spheres"]
|
||||
transform = Transform3D(1, -5.96046e-08, -3.57628e-07, -1.49012e-08, 1, 1.04308e-07, 1.19209e-07, -5.96046e-08, 1, -134.465, 18.4207, -48.0399)
|
||||
mesh = SubResource("SphereMesh_0b3qk")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("4_3d1xh")
|
||||
|
||||
[node name="Sphere2" type="MeshInstance3D" parent="scenery/spheres"]
|
||||
transform = Transform3D(1, -5.96046e-08, -3.57628e-07, -1.49012e-08, 1, 1.04308e-07, 1.19209e-07, -5.96046e-08, 1, -116.925, 8.32512, -48.0399)
|
||||
mesh = SubResource("SphereMesh_37lja")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("5_731fp")
|
||||
|
||||
[node name="Sphere3" type="MeshInstance3D" parent="scenery/spheres"]
|
||||
transform = Transform3D(1, -5.96046e-08, -3.57628e-07, -1.49012e-08, 1, 1.04308e-07, 1.19209e-07, -5.96046e-08, 1, -103.868, 0.811209, -48.0399)
|
||||
mesh = SubResource("SphereMesh_un52x")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("6_u1h6e")
|
||||
|
||||
[node name="Bottom" type="MeshInstance3D" parent="scenery"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.4921, -31.6516, 0)
|
||||
mesh = SubResource("PlaneMesh_x888m")
|
||||
skeleton = NodePath("")
|
||||
surface_material_override/0 = SubResource("ShaderMaterial_y71r8")
|
||||
|
||||
[node name="CurrentFPS" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 23.0
|
||||
BIN
addons/water_shader/assets/checker.png
Normal file
BIN
addons/water_shader/assets/checker.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
35
addons/water_shader/assets/checker.png.import
Normal file
35
addons/water_shader/assets/checker.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmnmahdmhsq4h"
|
||||
path.s3tc="res://.godot/imported/checker.png-dfadcbd934045345a664e1765c07315f.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/water_shader/assets/checker.png"
|
||||
dest_files=["res://.godot/imported/checker.png-dfadcbd934045345a664e1765c07315f.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
158
addons/water_shader/scenes/Pier.tscn
Normal file
158
addons/water_shader/scenes/Pier.tscn
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://durvbjhil7ec1"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://d4kuxhbpjjs3s" path="res://addons/water_shader/standard_shaders/simple_wood.tres" id="1_qq51a"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_rf2q6"]
|
||||
|
||||
[node name="Pier" type="Node3D"]
|
||||
|
||||
[node name="Board" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(20, 0, 0, 0, 0.2, 0, 0, 0, 2, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="columns" type="Node3D" parent="."]
|
||||
|
||||
[node name="Column1" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 2.319, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column2" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 2.319, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column3" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 0.0185528, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column4" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 0.0185528, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column5" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -1.68823, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column6" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -1.68823, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column7" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 9.68414, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column8" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 9.68414, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column9" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 7.38369, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column10" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 7.38369, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column11" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 5.67691, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column12" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 5.67691, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column13" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 5.08325, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column14" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 5.08325, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column15" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 2.7828, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column16" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 2.7828, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column17" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 1.07602, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column18" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, 1.07602, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column19" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -1.81878, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column20" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -1.81878, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column21" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -4.11923, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column22" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -4.11923, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column23" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -5.82601, -9.75468, 0.834839)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
|
||||
[node name="Column24" type="MeshInstance3D" parent="columns"]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 20, 0, 0, 0, 0.2, -5.82601, -9.75468, -0.797735)
|
||||
mesh = SubResource("BoxMesh_rf2q6")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("1_qq51a")
|
||||
BIN
addons/water_shader/screenshot.png
Normal file
BIN
addons/water_shader/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 963 KiB |
34
addons/water_shader/screenshot.png.import
Normal file
34
addons/water_shader/screenshot.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://veppxde6vbmj"
|
||||
path="res://.godot/imported/screenshot.png-eb5441e2a330131fa77d1b127416a799.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/water_shader/screenshot.png"
|
||||
dest_files=["res://.godot/imported/screenshot.png-eb5441e2a330131fa77d1b127416a799.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
56
addons/water_shader/scripts/Camera3D.gd
Normal file
56
addons/water_shader/scripts/Camera3D.gd
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#Copyright © 2022 Marc Nahr: https://github.com/MarcPhi/godot-free-look-camera
|
||||
extends Camera3D
|
||||
|
||||
@export_range(0, 10, 0.01) var sensitivity : float = 3
|
||||
@export_range(0, 1000, 0.1) var default_velocity : float = 5
|
||||
@export_range(0, 10, 0.01) var speed_scale : float = 1.17
|
||||
@export_range(1, 100, 0.1) var boost_speed_multiplier : float = 3.0
|
||||
@export var max_speed : float = 1000
|
||||
@export var min_speed : float = 0.2
|
||||
|
||||
@onready var _velocity = default_velocity
|
||||
|
||||
func _input(event):
|
||||
if not current:
|
||||
return
|
||||
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
if event is InputEventMouseMotion:
|
||||
rotation.y -= event.relative.x / 1000 * sensitivity
|
||||
rotation.x -= event.relative.y / 1000 * sensitivity
|
||||
rotation.x = clamp(rotation.x, PI/-2, PI/2)
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_RIGHT:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if event.pressed else Input.MOUSE_MODE_VISIBLE)
|
||||
MOUSE_BUTTON_WHEEL_UP: # increase fly velocity
|
||||
_velocity = clamp(_velocity * speed_scale, min_speed, max_speed)
|
||||
MOUSE_BUTTON_WHEEL_DOWN: # decrease fly velocity
|
||||
_velocity = clamp(_velocity / speed_scale, min_speed, max_speed)
|
||||
|
||||
func _process(delta):
|
||||
if not current:
|
||||
return
|
||||
|
||||
var direction = Vector3(
|
||||
float(Input.is_action_pressed("right")) - float(Input.is_action_pressed("left")),
|
||||
float(Input.is_action_pressed("down")) - float(Input.is_action_pressed("up")),
|
||||
float(Input.is_action_pressed("backward")) - float(Input.is_action_pressed("forward"))
|
||||
).normalized()
|
||||
|
||||
if Input.is_action_pressed("boost"):
|
||||
translate(direction * _velocity * delta * boost_speed_multiplier)
|
||||
else:
|
||||
translate(direction * _velocity * delta)
|
||||
|
||||
var rotation_input = Vector2(
|
||||
float(Input.is_action_pressed("rotate_down")) - float(Input.is_action_pressed("rotate_up")),
|
||||
float(Input.is_action_pressed("rotate_right")) - float(Input.is_action_pressed("rotate_left"))
|
||||
).normalized()
|
||||
|
||||
if (rotation_input.length() > 0.0):
|
||||
rotation.y -= rotation_input.y / 300 * sensitivity
|
||||
rotation.x -= rotation_input.x / 300 * sensitivity
|
||||
rotation.x = clamp(rotation.x, PI/-2, PI/2)
|
||||
|
||||
39
addons/water_shader/shaders/bottom.gdshader
Normal file
39
addons/water_shader/shaders/bottom.gdshader
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
shader_type spatial;
|
||||
|
||||
uniform float height_scale = 50.0;
|
||||
uniform float uv_scale = 400.0;
|
||||
uniform float texture_scale = 20.0;
|
||||
|
||||
uniform sampler2D stone_texture;
|
||||
uniform sampler2D bottom;
|
||||
|
||||
varying vec2 uv;
|
||||
varying float height;
|
||||
|
||||
void vertex()
|
||||
{
|
||||
uv = VERTEX.xz / uv_scale;
|
||||
height = texture(bottom, uv).x * height_scale;
|
||||
VERTEX.y += height;
|
||||
|
||||
vec2 e = vec2(0.01, 0.0);
|
||||
vec3 normal = normalize(vec3(
|
||||
texture(bottom, uv - e).x * height_scale - texture(bottom, uv + e).x * height_scale,
|
||||
2.0 * e.x,
|
||||
texture(bottom, uv - e.yx).x * height_scale - texture(bottom, uv + e.yx).x * height_scale
|
||||
));
|
||||
NORMAL = normal;
|
||||
}
|
||||
|
||||
float normalize_float(float value, float min_v, float max_v) {
|
||||
float clamped_value = clamp(value, min_v, max_v);
|
||||
return (clamped_value - min_v) / (max_v - min_v);
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
float greens = normalize_float(height, 30.0, 60.0);
|
||||
ALBEDO.rgb = texture(stone_texture, uv * texture_scale).rgb * vec3(0.2, greens, 0.0);
|
||||
|
||||
METALLIC = .5;
|
||||
ROUGHNESS = .7;
|
||||
}
|
||||
162
addons/water_shader/shaders/water.gdshader
Normal file
162
addons/water_shader/shaders/water.gdshader
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
shader_type spatial;
|
||||
|
||||
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_nearest;
|
||||
uniform sampler2D DEPTH_TEXTURE : hint_depth_texture, filter_nearest;
|
||||
|
||||
uniform vec3 albedo : source_color = vec3(0.02, 0.45, 0.8);
|
||||
uniform float transparency : hint_range(0.0, 1.0, 0.01) = 0.4;
|
||||
uniform float metallic : hint_range(0.0, 1.0, 0.01) = 0;
|
||||
uniform float roughness : hint_range(0.0, 1.0, 0.01) = 0.5;
|
||||
|
||||
uniform vec2 surface_normals_move_direction_a = vec2(-1.0, 0.0);
|
||||
uniform vec2 surface_normals_move_direction_b = vec2(0.0, 1.0);
|
||||
uniform float surface_texture_roughness : hint_range(0.0, 1.0, 0.01) = 0.6;
|
||||
uniform float surface_texture_scale : hint_range(0.001, 2.0, 0.001) = 0.3;
|
||||
uniform float surface_texture_time_scale : hint_range(0.001, 2.0, 0.001) = 0.06;
|
||||
|
||||
uniform float ssr_resolution : hint_range(0.0, 10.0, 0.1) = 2.0;
|
||||
uniform float ssr_max_travel : hint_range(0.0, 200.0, 0.1) = 30.0;
|
||||
uniform float ssr_max_diff : hint_range(0.1, 10.0, 0.1) = 4.0;
|
||||
uniform float ssr_mix_strength : hint_range(0.0, 1.0, 0.01) = 0.7;
|
||||
|
||||
uniform float wave_noise_scale = 15.0;
|
||||
uniform float wave_height_scale = 0.25;
|
||||
uniform float wave_time_scale = 0.025;
|
||||
uniform float wave_normal_flatness : hint_range(0.1, 100.0, 0.1) = 30.0;
|
||||
|
||||
uniform vec3 border_color : source_color = vec3(1.0);
|
||||
uniform float border_scale : hint_range(0.0, 5.0, 0.01) = 2.0;
|
||||
uniform float border_near = 0.5;
|
||||
uniform float border_far = 300.0;
|
||||
|
||||
uniform float refraction_intensity : hint_range(0.0, 1.0, 0.01) = 0.4;
|
||||
|
||||
uniform float max_visible_depth : hint_range(0.0, 100.0, 0.1) = 10.0;
|
||||
uniform vec3 color_deep : source_color = vec3(0.0, 0.1, 0.4);
|
||||
|
||||
uniform sampler2D wave_a;
|
||||
uniform sampler2D wave_b;
|
||||
|
||||
uniform sampler2D surface_normals_a;
|
||||
uniform sampler2D surface_normals_b;
|
||||
|
||||
varying vec2 vertex_uv;
|
||||
|
||||
float get_wave_height(vec2 uv)
|
||||
{
|
||||
float height1 = texture(wave_a, uv).r;
|
||||
float height2 = texture(wave_b, -uv * vec2(-1.0, -1.0)).r;
|
||||
return (height1 + height2 * 2.0) / 2.0;
|
||||
}
|
||||
|
||||
void vertex()
|
||||
{
|
||||
vertex_uv = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xz;
|
||||
vec2 uv = vertex_uv / wave_noise_scale + TIME * wave_time_scale;
|
||||
VERTEX.y += get_wave_height(uv) * wave_height_scale;
|
||||
|
||||
float normal_height_scale = wave_height_scale / wave_normal_flatness;
|
||||
vec2 e = vec2(0.01, 0.0);
|
||||
vec3 normal = normalize(vec3(
|
||||
get_wave_height(uv - e) * normal_height_scale - get_wave_height(uv + e) * normal_height_scale,
|
||||
2.0 * e.x,
|
||||
get_wave_height(uv - e.yx) * normal_height_scale - get_wave_height(uv + e.yx) * normal_height_scale
|
||||
));
|
||||
NORMAL = normal;
|
||||
}
|
||||
|
||||
bool is_within_screen_boundaries(vec2 position) {
|
||||
return position.x > 0.0 && position.x < 1.0 && position.y > 0.0 && position.y < 1.0;
|
||||
}
|
||||
|
||||
vec2 get_uv_from_view_position(vec3 position_view_space, mat4 proj_m)
|
||||
{
|
||||
vec4 position_clip_space = proj_m * vec4(position_view_space.xyz, 1.0);
|
||||
vec2 position_ndc = position_clip_space.xy / position_clip_space.w;
|
||||
return position_ndc.xy * 0.5 + 0.5;
|
||||
}
|
||||
|
||||
vec3 get_view_position_from_uv(vec2 uv, float depth, mat4 inv_proj_m)
|
||||
{
|
||||
vec4 position_ndc = vec4((uv * 2.0) - 1.0, depth, 1.0);
|
||||
vec4 view_position = inv_proj_m * position_ndc;
|
||||
return view_position.xyz /= view_position.w;
|
||||
}
|
||||
|
||||
vec3 get_ssr_color(vec3 surface_view_position, vec3 normal_view_space, vec3 view_view_space, mat4 proj_m, mat4 inv_proj_m)
|
||||
{
|
||||
vec3 current_position_view_space = surface_view_position;
|
||||
vec3 view_direction_view_space = view_view_space * -1.0;
|
||||
vec3 reflect_vector_view_space = normalize(reflect(view_direction_view_space.xyz, normal_view_space.xyz));
|
||||
|
||||
vec2 current_screen_position = vec2(0.0);
|
||||
|
||||
vec3 resulting_color = vec3(-1.0);
|
||||
for(float travel=0.0; resulting_color.x < 0.0 && travel < ssr_max_travel; travel = travel + ssr_resolution)
|
||||
{
|
||||
current_position_view_space += reflect_vector_view_space * ssr_resolution;
|
||||
current_screen_position = get_uv_from_view_position(current_position_view_space, proj_m);
|
||||
|
||||
float depth_texture_probe_raw = texture(DEPTH_TEXTURE, current_screen_position).x;
|
||||
vec3 depth_texture_probe_view_position = get_view_position_from_uv(current_screen_position, depth_texture_probe_raw, inv_proj_m);
|
||||
|
||||
float depth_diff = depth_texture_probe_view_position.z - current_position_view_space.z;
|
||||
|
||||
resulting_color = (is_within_screen_boundaries(current_screen_position) && depth_diff >= 0.0 && depth_diff < ssr_max_diff) ? texture(SCREEN_TEXTURE, current_screen_position.xy).rgb : vec3(-1.0);
|
||||
}
|
||||
return resulting_color;
|
||||
}
|
||||
|
||||
float border(float cur_depth)
|
||||
{
|
||||
return border_near * border_far / (border_far + (2.0 * cur_depth - 1.0) * (border_near - border_far));
|
||||
}
|
||||
|
||||
float normalize_float(float min_v, float max_v, float value) {
|
||||
float clamped_value = clamp(value, min_v, max_v);
|
||||
return (clamped_value - min_v) / (max_v - min_v);
|
||||
}
|
||||
|
||||
vec2 get_refracted_uv(vec2 raw_screen_uv, float screen_depth_raw, vec3 view, vec3 normal, mat4 proj_m, mat4 inv_proj_m)
|
||||
{
|
||||
vec3 screen_view_position_original = get_view_position_from_uv(raw_screen_uv, screen_depth_raw, inv_proj_m);
|
||||
float screen_center_distance = clamp(abs(length(raw_screen_uv - vec2(0.5, 0.5))) * 2.0, 0.0, 1.0);
|
||||
float refraction_intensity_deglitched = mix(1.0 - refraction_intensity, 1.0, screen_center_distance);
|
||||
vec3 refraction_position_view_space = screen_view_position_original + normalize(refract(view, -normal, refraction_intensity_deglitched));
|
||||
vec2 refraction_uv = get_uv_from_view_position(refraction_position_view_space, proj_m);
|
||||
return refraction_uv;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
float screen_depth_raw = texture(DEPTH_TEXTURE, SCREEN_UV).x;
|
||||
|
||||
vec2 refraction_uv = refraction_intensity > 0.0 ? get_refracted_uv(SCREEN_UV, screen_depth_raw, VIEW, NORMAL, PROJECTION_MATRIX, INV_PROJECTION_MATRIX) : SCREEN_UV;
|
||||
|
||||
float screen_depth = texture(DEPTH_TEXTURE, refraction_uv).x;
|
||||
float surface_depth = FRAGCOORD.z;
|
||||
|
||||
float border_diff = border(screen_depth_raw) - border(surface_depth);
|
||||
|
||||
vec2 time_vector = (TIME * surface_normals_move_direction_a) * surface_texture_time_scale;
|
||||
vec2 time_vector2 = (TIME * surface_normals_move_direction_b) * surface_texture_time_scale;
|
||||
|
||||
vec3 normal_texture_blend = mix(texture(surface_normals_a, vertex_uv * surface_texture_scale + time_vector).xyz, texture(surface_normals_b, vertex_uv * surface_texture_scale + time_vector2).xyz, 0.5);
|
||||
vec3 normal_blend = mix(NORMAL, normal_texture_blend, surface_texture_roughness);
|
||||
|
||||
vec3 screen_view_position = get_view_position_from_uv(refraction_uv, screen_depth, INV_PROJECTION_MATRIX);
|
||||
vec3 surface_view_position = get_view_position_from_uv(refraction_uv, surface_depth, INV_PROJECTION_MATRIX);
|
||||
float depth_opacity = 1.0 - normalize_float(0.0, max_visible_depth, length(surface_view_position - screen_view_position));
|
||||
|
||||
vec3 screen_color = texture(SCREEN_TEXTURE, refraction_uv).rgb;
|
||||
vec3 surface_color = albedo;
|
||||
vec3 ssr_color = get_ssr_color(surface_view_position, NORMAL, VIEW, PROJECTION_MATRIX, INV_PROJECTION_MATRIX);
|
||||
vec3 color_with_transparency = mix(surface_color, screen_color, transparency);
|
||||
vec3 depth_color = mix(color_deep.rgb, color_with_transparency, depth_opacity);
|
||||
vec3 water_color = (ssr_color.x > 0.0) ? mix(depth_color, ssr_color, ssr_mix_strength) : depth_color;
|
||||
vec3 final_color = mix(border_color, water_color, step(border_scale, border_diff));
|
||||
|
||||
ALBEDO.rgb = final_color;
|
||||
METALLIC = metallic;
|
||||
ROUGHNESS = roughness;
|
||||
NORMAL_MAP = normal_blend;
|
||||
}
|
||||
4
addons/water_shader/standard_shaders/green.tres
Normal file
4
addons/water_shader/standard_shaders/green.tres
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://due1qpgfoidud"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0, 0.752941, 0.196078, 1)
|
||||
4
addons/water_shader/standard_shaders/pink.tres
Normal file
4
addons/water_shader/standard_shaders/pink.tres
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://w0521xyotujb"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(1, 0, 1, 1)
|
||||
14
addons/water_shader/standard_shaders/simple_wood.tres
Normal file
14
addons/water_shader/standard_shaders/simple_wood.tres
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://d4kuxhbpjjs3s"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_4rnsn"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_dv33a"]
|
||||
as_normal_map = true
|
||||
noise = SubResource("FastNoiseLite_4rnsn")
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.25098, 0.2, 0.0431373, 1)
|
||||
metallic_specular = 0.0
|
||||
roughness = 0.0
|
||||
normal_enabled = true
|
||||
normal_texture = SubResource("NoiseTexture2D_dv33a")
|
||||
4
addons/water_shader/standard_shaders/yellow.tres
Normal file
4
addons/water_shader/standard_shaders/yellow.tres
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://khxhx4mnugb1"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(1, 1, 0, 1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue