diff --git a/design/lavalamp.blend b/design/lavalamp.blend new file mode 100644 index 0000000..f14ed9a Binary files /dev/null and b/design/lavalamp.blend differ diff --git a/src/base-environments/youth_room/import/lava-lamp.glb b/src/base-environments/youth_room/import/lava-lamp.glb new file mode 100644 index 0000000..107ddd4 Binary files /dev/null and b/src/base-environments/youth_room/import/lava-lamp.glb differ diff --git a/src/base-environments/youth_room/import/lava-lamp.glb.import b/src/base-environments/youth_room/import/lava-lamp.glb.import new file mode 100644 index 0000000..5dc7492 --- /dev/null +++ b/src/base-environments/youth_room/import/lava-lamp.glb.import @@ -0,0 +1,55 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://igrbso3lobka" +path="res://.godot/imported/lava-lamp.glb-30e055f82546d82b1a4b6e6043031488.scn" + +[deps] + +source_file="res://base-environments/youth_room/import/lava-lamp.glb" +dest_files=["res://.godot/imported/lava-lamp.glb-30e055f82546d82b1a4b6e6043031488.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={ +"meshes": { +"lava-lamp_Mesh": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://base-environments/youth_room/shaders/raising-lava.res" +}, +"lava-lamp_Mesh2": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://base-environments/youth_room/shaders/falling-lava.res" +} +} +} +gltf/embedded_image_handling=1 diff --git a/src/base-environments/youth_room/shaders/falling-lava.res b/src/base-environments/youth_room/shaders/falling-lava.res new file mode 100644 index 0000000..fbae9d3 Binary files /dev/null and b/src/base-environments/youth_room/shaders/falling-lava.res differ diff --git a/src/base-environments/youth_room/shaders/lavalamp.tres b/src/base-environments/youth_room/shaders/lavalamp.tres new file mode 100644 index 0000000..7737a15 --- /dev/null +++ b/src/base-environments/youth_room/shaders/lavalamp.tres @@ -0,0 +1,56 @@ +[gd_resource type="VisualShader" load_steps=6 format=3 uid="uid://diua81fqg1ygg"] + +[sub_resource type="VisualShaderNodeVec2Parameter" id="VisualShaderNodeVec2Parameter_2yjsa"] +parameter_name = "ball_1_origin" + +[sub_resource type="VisualShaderNodeVec2Parameter" id="VisualShaderNodeVec2Parameter_2y23m"] +parameter_name = "ball_2_origin" + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_j8wbi"] +input_name = "uv" + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_u7n81"] + +[sub_resource type="VisualShaderNodeCompare" id="VisualShaderNodeCompare_3v1ps"] +default_input_values = [0, 0.0, 1, 1.0, 2, 1e-05] +function = 2 + +[resource] +code = "shader_type spatial; +render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx, unshaded; + + + + +void fragment() { +// FloatOp:7 + float n_in7p0 = 0.00000; + float n_in7p1 = 0.00000; + float n_out7p0 = n_in7p0 + n_in7p1; + + +// Compare:8 + float n_in8p1 = 1.00000; + bool n_out8p0 = n_out7p0 > n_in8p1; + + +// Output:0 + ALBEDO = vec3(n_out8p0 ? 1.0 : 0.0); + + +} +" +graph_offset = Vector2(-907.416, -156.666) +flags/unshaded = true +nodes/fragment/0/position = Vector2(720, 100) +nodes/fragment/2/node = SubResource("VisualShaderNodeVec2Parameter_2yjsa") +nodes/fragment/2/position = Vector2(-660, 100) +nodes/fragment/3/node = SubResource("VisualShaderNodeVec2Parameter_2y23m") +nodes/fragment/3/position = Vector2(-460, 280) +nodes/fragment/4/node = SubResource("VisualShaderNodeInput_j8wbi") +nodes/fragment/4/position = Vector2(-700, -40) +nodes/fragment/7/node = SubResource("VisualShaderNodeFloatOp_u7n81") +nodes/fragment/7/position = Vector2(180, 100) +nodes/fragment/8/node = SubResource("VisualShaderNodeCompare_3v1ps") +nodes/fragment/8/position = Vector2(400, 100) +nodes/fragment/connections = PackedInt32Array(7, 0, 8, 0, 8, 0, 0, 0) diff --git a/src/base-environments/youth_room/shaders/raising-lava.res b/src/base-environments/youth_room/shaders/raising-lava.res new file mode 100644 index 0000000..3875816 Binary files /dev/null and b/src/base-environments/youth_room/shaders/raising-lava.res differ diff --git a/src/dev-util/testing.tscn b/src/dev-util/testing.tscn index 2ead5fd..1ddee39 100644 --- a/src/dev-util/testing.tscn +++ b/src/dev-util/testing.tscn @@ -1,5 +1,212 @@ -[gd_scene format=3 uid="uid://bigr0lnen1xdh"] +[gd_scene load_steps=16 format=3 uid="uid://bigr0lnen1xdh"] + +[ext_resource type="ArrayMesh" uid="uid://cbbreijekdjel" path="res://base-environments/youth_room/shaders/raising-lava.res" id="1_kkx3t"] +[ext_resource type="ArrayMesh" uid="uid://7bpgy7uud2ai" path="res://base-environments/youth_room/shaders/falling-lava.res" id="2_tokpx"] + +[sub_resource type="QuadMesh" id="QuadMesh_sj0jk"] + +[sub_resource type="Shader" id="Shader_kfdmq"] +code = "shader_type spatial; +render_mode blend_mix, depth_draw_opaque, diffuse_lambert, specular_schlick_ggx, unshaded; + +uniform sampler2D gradient; +uniform float drop_size; +uniform float stretch_compensatioon; +uniform float fill; +uniform float speed; + +void fragment() { + + float fresnel = 1.0/(1.0-abs(NORMAL.x)); + + float dist = 1.0 / distance(vec2(NORMAL.x/stretch_compensatioon, UV.y), vec2(0.0, mod(-TIME*speed*UV.x, 1.0))); + dist += 1.0 / distance(vec2(NORMAL.x/stretch_compensatioon, UV.y), vec2(0.0, mod(-TIME*speed*UV.x+0.2, 1.0))); + dist += 1.0 / distance(vec2(NORMAL.x/stretch_compensatioon, UV.y), vec2(0.0, mod(-TIME*speed*UV.x+0.6, 1.0))); + //dist = 0.0; + dist += 1.3 / distance(vec2(NORMAL.x/stretch_compensatioon, UV.y), vec2(0.0, fill)); + + ALBEDO = texture(gradient, UV2).xyz; + ALPHA = float(int(dist > 1.0/drop_size))+0.2; + +} +" + +[sub_resource type="Gradient" id="Gradient_r18tr"] +colors = PackedColorArray(0.929412, 5.69804, 0.211765, 1, 0.0901961, 1, 0, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_42bqf"] +gradient = SubResource("Gradient_r18tr") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_31q3g"] +render_priority = 0 +shader = SubResource("Shader_kfdmq") +shader_parameter/drop_size = 0.015 +shader_parameter/stretch_compensatioon = 35.0 +shader_parameter/fill = 0.663 +shader_parameter/speed = 0.01 +shader_parameter/gradient = SubResource("GradientTexture2D_42bqf") + +[sub_resource type="Animation" id="Animation_ovxyq"] +resource_name = "lavalamp" +length = 60.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 60), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 6.28319, 0), Vector3(0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../falling:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 60), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 6.28319, 0), Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_0ijgr"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../falling:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_88lyq"] +_data = { +"RESET": SubResource("Animation_0ijgr"), +"lavalamp": SubResource("Animation_ovxyq") +} + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_3yn7w"] +sky_top_color = Color(0, 0, 1, 1) +sky_horizon_color = Color(0.858824, 0.541176, 0.4, 1) +sky_curve = 0.54075 + +[sub_resource type="Sky" id="Sky_lumfb"] +sky_material = SubResource("ProceduralSkyMaterial_3yn7w") + +[sub_resource type="Environment" id="Environment_f0flp"] +background_mode = 2 +background_energy_multiplier = 0.2 +sky = SubResource("Sky_lumfb") +sky_rotation = Vector3(0, 0.352557, 0) +ambient_light_source = 3 +ambient_light_color = Color(1, 1, 1, 1) +reflected_light_source = 1 +tonemap_mode = 2 +ssr_enabled = true +ssr_max_steps = 512 +ssr_depth_tolerance = 0.01 +ssao_enabled = true +ssao_radius = 1.24 +ssao_intensity = 3.09 +ssao_power = 1.91184 +ssao_detail = 3.0 +ssil_intensity = 0.72 +ssil_normal_rejection = 0.56 +sdfgi_enabled = true +sdfgi_use_occlusion = true +glow_enabled = true +glow_levels/2 = 0.3 +glow_levels/7 = 2.0 +glow_intensity = 0.4 +glow_strength = 0.7 +glow_bloom = 0.13 +glow_blend_mode = 1 +glow_hdr_threshold = 0.46 +fog_enabled = true +fog_light_color = Color(0.141176, 0.133333, 0.301961, 1) +fog_sky_affect = 0.0 +fog_height = 1.0 +fog_height_density = 0.1 +adjustment_enabled = true + +[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_2qx32"] +auto_exposure_enabled = true +auto_exposure_scale = 0.2 +dof_blur_far_enabled = true +dof_blur_far_distance = 0.4 +dof_blur_far_transition = 0.2 +dof_blur_near_distance = 0.79 +dof_blur_amount = 0.0 +auto_exposure_min_sensitivity = 100.0 + +[sub_resource type="GDScript" id="GDScript_uqlwy"] +script/source = "extends WorldEnvironment + +func _ready(): + focus_env() + +func focus_env(): + var dof_strength_tween: Tween = create_tween() + dof_strength_tween.tween_property(camera_attributes, \"dof_blur_amount\", 0, 1) + +func focus_object(): + var dof_strength_tween: Tween = create_tween() + dof_strength_tween.tween_property(camera_attributes, \"dof_blur_amount\", 0.6, 1) +" [node name="Node3D" type="Node3D"] [node name="Node3D" type="Node3D" parent="."] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.29184, 0, 0) +mesh = SubResource("QuadMesh_sj0jk") +surface_material_override/0 = SubResource("ShaderMaterial_31q3g") + +[node name="falling" type="MeshInstance3D" parent="."] +visible = false +mesh = ExtResource("1_kkx3t") +skeleton = NodePath("../Node3D/MeshInstance3D") +surface_material_override/0 = SubResource("ShaderMaterial_31q3g") + +[node name="raising" type="MeshInstance3D" parent="."] +mesh = ExtResource("2_tokpx") +skeleton = NodePath("../Node3D/MeshInstance3D") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../raising") +libraries = { +"": SubResource("AnimationLibrary_88lyq") +} + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_f0flp") +camera_attributes = SubResource("CameraAttributesPractical_2qx32") +script = SubResource("GDScript_uqlwy") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.987688, -0.156434, 0, 0.156434, 0.987688, 0, -0.058, 0.77) +fov = 18.0