diff --git a/common/vfx/materials/shaders/caustics.gdshader b/common/vfx/materials/shaders/caustics.gdshader new file mode 100644 index 0000000..121b5b4 --- /dev/null +++ b/common/vfx/materials/shaders/caustics.gdshader @@ -0,0 +1,49 @@ +shader_type spatial; + +uniform float scale : hint_range(0.1, 2.0, 0.1) = 1.0; +uniform float speed : hint_range(0.1, 2.0, 0.1) = 0.2; +uniform float strenght : hint_range(10., 500., 10.) = 100.; +uniform sampler2D color_ramp; +varying vec3 world_position; + +vec2 random(vec2 uv) { + return vec2(fract(sin(dot(uv.xy, + vec2(12.9898,78.233))) * 43758.5453123)); +} + +float worley(vec2 uv, float columns, float rows) { + + vec2 index_uv = floor(vec2(uv.x * columns, uv.y * rows)); + vec2 fract_uv = fract(vec2(uv.x * columns, uv.y * rows)); + + float minimum_dist = 1.0; + + for (int y= -1; y <= 1; y++) { + for (int x= -1; x <= 1; x++) { + vec2 neighbor = vec2(float(x),float(y)); + vec2 point = random(index_uv + neighbor); + + vec2 diff = neighbor + point - fract_uv; + float dist = length(diff); + minimum_dist = min(minimum_dist, dist); + } + } + + return minimum_dist; +} + +void vertex(){ + world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz; +} + +void fragment(){ + float worley_value = worley(world_position.xz * scale + TIME * speed, 3.0, 3.0); + float worley_value_2 = worley(world_position.xz * scale * 2. - TIME * speed, 3.0, 3.0); + + float color = texture(color_ramp, vec2(worley_value*worley_value_2)).r; + color = min(0.99, color); + color = log(0.999)/log(color); + color *= strenght; + ALPHA = color; + EMISSION = vec3(color); +} diff --git a/common/vfx/materials/shaders/caustics.gdshader.uid b/common/vfx/materials/shaders/caustics.gdshader.uid new file mode 100644 index 0000000..e9172a5 --- /dev/null +++ b/common/vfx/materials/shaders/caustics.gdshader.uid @@ -0,0 +1 @@ +uid://740mg4jlufyc diff --git a/stages/3d_scenes/aqua_base/AquaBase.tscn b/stages/3d_scenes/aqua_base/AquaBase.tscn index 34a5473..be717eb 100644 --- a/stages/3d_scenes/aqua_base/AquaBase.tscn +++ b/stages/3d_scenes/aqua_base/AquaBase.tscn @@ -5,6 +5,8 @@ [ext_resource type="PackedScene" uid="uid://ci5vs3qhiuf0x" path="res://stages/3d_scenes/common/assets/3d/hub.blend" id="3_mr0dk"] [ext_resource type="Shader" uid="uid://n4s2kr10ivgb" path="res://common/vfx/materials/shaders/underwater.gdshader" id="4_dltk4"] [ext_resource type="PackedScene" uid="uid://da7a74dg30q1l" path="res://entities/player_3d/player_3D.tscn" id="4_k4ak1"] +[ext_resource type="PackedScene" uid="uid://c2unmkf4ec4gf" path="res://entities/interactable_3d/ai_receptacle/ai_receptacle.tscn" id="4_m5l0g"] +[ext_resource type="Material" uid="uid://ba5cnhu0o1yf5" path="res://stages/3d_scenes/aqua_base/resources/materials/caustic_default_3d.tres" id="4_nydtf"] [sub_resource type="Environment" id="Environment_m5l0g"] background_mode = 2 @@ -38,13 +40,16 @@ shading_mode = 0 albedo_color = Color(0.5882353, 0.7019608, 0.85882354, 1) albedo_texture = ExtResource("2_mr0dk") +[sub_resource type="ViewportTexture" id="ViewportTexture_nydtf"] +viewport_path = NodePath("Screen/SubViewport") + [sub_resource type="QuadMesh" id="QuadMesh_m5l0g"] size = Vector2(3, 3) [sub_resource type="ShaderMaterial" id="ShaderMaterial_nydtf"] render_priority = 0 shader = ExtResource("4_dltk4") -shader_parameter/tint = Color(0.13725491, 0.39215687, 0.6666667, 0.69411767) +shader_parameter/tint = Color(0.14069998, 0.39652818, 0.67, 0.29411766) shader_parameter/wave_speed = 3.0 shader_parameter/wave_freq = 10.0 shader_parameter/wave_width = 1.0 @@ -106,7 +111,47 @@ mesh = SubResource("SphereMesh_nydtf") surface_material_override/0 = SubResource("StandardMaterial3D_u74oo") [node name="hub" parent="." unique_id=1785379104 instance=ExtResource("3_mr0dk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.06477356, 2.558891, -0.17544556) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.06701422, 2.5714142, -0.17472172) + +[node name="hub" parent="hub" index="11" unique_id=1764872435] +surface_material_override/0 = ExtResource("4_nydtf") +surface_material_override/1 = ExtResource("4_nydtf") + +[node name="AiReceptacle" parent="." unique_id=1082354698 instance=ExtResource("4_m5l0g")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.9, -0.34409285) +screen_text = "DOWNLOAD_DATA" +broken = true + +[node name="Model" parent="AiReceptacle" index="0" unique_id=154868613] +visible = false + +[node name="ModelBroken" parent="AiReceptacle" index="1" unique_id=1633938801] +visible = true + +[node name="Support" parent="AiReceptacle/ModelBroken" index="5" unique_id=1098621972] +surface_material_override/0 = ExtResource("4_nydtf") + +[node name="Receptacle" parent="AiReceptacle/ModelBroken" index="6" unique_id=956575790] +surface_material_override/0 = ExtResource("4_nydtf") + +[node name="Screen" parent="AiReceptacle" index="3" unique_id=1396407912] +texture = SubResource("ViewportTexture_nydtf") + +[node name="ScreenTitle" parent="AiReceptacle/Screen/SubViewport/ScreenContent/VBoxContainer" parent_id_path=PackedInt32Array(1082354698, 1893636910) index="1" unique_id=443526476] +text = "DOWNLOAD_DATA" + +[node name="SpotLight3D" type="SpotLight3D" parent="AiReceptacle" unique_id=1906884086] +transform = Transform3D(1, 0, 0, 0, -0.67415154, -0.73859304, 0, 0.73859304, -0.67415154, 0, 0.66735864, 3.2564082) +light_color = Color(0.972549, 0.007843138, 0.3764706, 1) +light_energy = 9.821 +light_volumetric_fog_energy = 16.0 +spot_range = 11.312 +spot_angle = 48.61 + +[node name="OmniLight3D" type="OmniLight3D" parent="AiReceptacle" unique_id=1726681139] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.90115404, 3.440281) +light_energy = 0.282 +omni_range = 0.90236074 [node name="Player3D" parent="." unique_id=549819967 instance=ExtResource("4_k4ak1")] transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 32.225853, -2.260468, 9.559124) @@ -141,4 +186,7 @@ light_volumetric_fog_energy = 2.507 shadow_enabled = true shadow_blur = 10.0 +[editable path="hub"] +[editable path="AiReceptacle"] +[editable path="AiReceptacle/ModelBroken"] [editable path="Player3D"] diff --git a/stages/3d_scenes/aqua_base/resources/materials/caustic_default_3d.tres b/stages/3d_scenes/aqua_base/resources/materials/caustic_default_3d.tres new file mode 100644 index 0000000..ca9282e --- /dev/null +++ b/stages/3d_scenes/aqua_base/resources/materials/caustic_default_3d.tres @@ -0,0 +1,29 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://ba5cnhu0o1yf5"] + +[ext_resource type="Texture2D" uid="uid://dlsx1mofjccib" path="res://common/assets/textures/3d_texture.png" id="1_htbkf"] +[ext_resource type="Shader" uid="uid://740mg4jlufyc" path="res://common/vfx/materials/shaders/caustics.gdshader" id="2_w81pb"] + +[sub_resource type="Gradient" id="Gradient_0bekw"] + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_s2rwh"] +gradient = SubResource("Gradient_0bekw") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bblss"] +render_priority = 0 +shader = ExtResource("2_w81pb") +shader_parameter/scale = 0.60000000894072 +shader_parameter/speed = 0.10000000149012 +shader_parameter/strenght = 100.0 +shader_parameter/color_ramp = SubResource("GradientTexture1D_s2rwh") + +[resource] +next_pass = SubResource("ShaderMaterial_bblss") +diffuse_mode = 3 +specular_mode = 2 +albedo_texture = ExtResource("1_htbkf") +metallic_specular = 0.0 +roughness = 0.0 +rim_tint = 0.48 +stencil_flags = 2 +stencil_reference = 5 +stencil_outline_thickness = 0.626