HDR prototyping

This commit is contained in:
betalars 2025-09-25 15:55:00 +02:00
parent 8a5f05cd77
commit 6ba9a4d71f
31 changed files with 2937 additions and 130 deletions

BIN
design/subway/subway.blend (Stored with Git LFS)

Binary file not shown.

BIN
src/base-environments/transition/first_platform.exr (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,30 @@
[remap]
importer="2d_array_texture"
type="CompressedTexture2DArray"
uid="uid://c10f1lvpdwof1"
path.bptc="res://.godot/imported/first_platform.exr-bf0aee728bd8ca619cebb9a324548516.bptc.ctexarray"
path.astc="res://.godot/imported/first_platform.exr-bf0aee728bd8ca619cebb9a324548516.astc.ctexarray"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://base-environments/transition/first_platform.exr"
dest_files=["res://.godot/imported/first_platform.exr-bf0aee728bd8ca619cebb9a324548516.bptc.ctexarray", "res://.godot/imported/first_platform.exr-bf0aee728bd8ca619cebb9a324548516.astc.ctexarray"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/channel_pack=1
mipmaps/generate=false
mipmaps/limit=-1
slices/horizontal=1
slices/vertical=3

Binary file not shown.

View File

@ -0,0 +1,777 @@
[gd_scene load_steps=48 format=3 uid="uid://dgxujvk66rka6"]
[ext_resource type="PackedScene" uid="uid://cb4m4oe32guqi" path="res://base-environments/transition/import/first_station.glb" id="1_yerc2"]
[ext_resource type="Shader" uid="uid://sxauef61xfpx" path="res://base-environments/transition/time_sparks.gdshader" id="2_4y17u"]
[ext_resource type="PackedScene" uid="uid://bk1l1a7eae838" path="res://base-environments/transition/misc/subway_map.tscn" id="2_5npvd"]
[ext_resource type="Texture2D" uid="uid://cxsne8gg5fmca" path="res://base-environments/transition/shaders/time_spark.png" id="3_cbtb8"]
[ext_resource type="VoxelGIData" uid="uid://bxv4p0cx0u1vu" path="res://base-environments/transition/test_gi.res" id="4_nmgvo"]
[ext_resource type="Material" uid="uid://dmmkkclq8xlvu" path="res://base-environments/transition/shaders/platform_foam.tres" id="5_32vcv"]
[ext_resource type="Texture2D" uid="uid://c7ks4lvp3aw64" path="res://base-environments/transition/misc/annalena_graffiti_albedo.png" id="7_tid2w"]
[ext_resource type="Texture2D" uid="uid://byovh27jwtbhh" path="res://base-environments/transition/misc/annalena_graffiti_orm.png" id="8_xh1hp"]
[ext_resource type="Texture2D" uid="uid://jtr7v163pfy7" path="res://base-environments/transition/misc/blender_graffiti_albedo.png" id="9_bvylv"]
[ext_resource type="Texture2D" uid="uid://cwjr0xq64hdsw" path="res://base-environments/transition/misc/blender_graffiti_orm.png" id="10_xrnct"]
[ext_resource type="Material" uid="uid://d3rfe7mryshj1" path="res://base-environments/transition/import/next_room_peak.tres" id="11_sy31e"]
[ext_resource type="PackedScene" uid="uid://dotekvpr6rytk" path="res://base-environments/transition/import/subway_train.glb" id="12_dgbje"]
[ext_resource type="VoxelGIData" uid="uid://fjy2ca233sp4" path="res://base-environments/transition/subway_car_gi.res" id="13_f5y2f"]
[ext_resource type="AudioStream" uid="uid://cr77al1x73vyb" path="res://base-environments/transition/vfx/harbour waves calm 01.mp3" id="14_awhi4"]
[ext_resource type="AudioStream" uid="uid://xn5qegs2ckea" path="res://base-environments/transition/vfx/SUBWAY_02.ogg" id="15_iyklq"]
[sub_resource type="ViewportTexture" id="ViewportTexture_sjsoq"]
viewport_path = NodePath("first_station/MeshInstance3D/SubViewport")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cb8p6"]
resource_local_to_scene = true
albedo_texture = SubResource("ViewportTexture_sjsoq")
[sub_resource type="QuadMesh" id="QuadMesh_d1dx0"]
size = Vector2(1.505, 1)
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_nspcl"]
sky_top_color = Color(0.138464, 0.0447571, 0.169373, 1)
sky_horizon_color = Color(4.62055e-06, 0.722684, 0.905603, 1)
ground_bottom_color = Color(0.578219, 0.40697, 0.222187, 1)
ground_horizon_color = Color(0.138283, 0.487665, 0.674041, 1)
ground_curve = 0.165643
ground_energy_multiplier = 0.2
[sub_resource type="Sky" id="Sky_5ahgt"]
sky_material = SubResource("ProceduralSkyMaterial_nspcl")
[sub_resource type="Environment" id="Environment_hovki"]
background_mode = 2
sky = SubResource("Sky_5ahgt")
reflected_light_source = 2
tonemap_mode = 2
tonemap_exposure = 1.5
sdfgi_energy = 0.2
glow_enabled = true
glow_levels/2 = 0.2
glow_levels/3 = 0.5
glow_levels/4 = 0.5
glow_levels/6 = 1.0
glow_levels/7 = 0.3
glow_strength = 0.7
glow_mix = 1.0
glow_bloom = 0.5
glow_blend_mode = 1
glow_hdr_threshold = 1.74
glow_hdr_luminance_cap = 66.78
fog_light_color = Color(0.0449019, 0.147257, 0.213563, 1)
fog_height = 0.25
fog_height_density = 0.5
volumetric_fog_enabled = true
volumetric_fog_albedo = Color(0.3792, 0.60514, 0.79, 1)
adjustment_enabled = true
adjustment_contrast = 1.02
[sub_resource type="ShaderMaterial" id="ShaderMaterial_4tj6b"]
render_priority = 0
shader = ExtResource("2_4y17u")
shader_parameter/spark_texture = ExtResource("3_cbtb8")
[sub_resource type="Gradient" id="Gradient_hrj0e"]
offsets = PackedFloat32Array(0.0322581, 0.285714, 0.617512, 0.746544, 0.903226)
colors = PackedColorArray(0, 0.38, 0.240667, 0.0431373, 0.34, 0.12, 1, 0.258824, 0.76, 0.486147, 0.4104, 0.368627, 0.94, 0.82156, 0.5452, 0.717647, 0.83, 0, 0.2075, 0.827451)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_7joox"]
gradient = SubResource("Gradient_hrj0e")
[sub_resource type="Gradient" id="Gradient_08fxi"]
offsets = PackedFloat32Array(0, 0.617512, 1)
colors = PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_0or17"]
gradient = SubResource("Gradient_08fxi")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_hvcdc"]
lifetime_randomness = 0.5
particle_flag_align_y = true
emission_shape_scale = Vector3(1, 1.5, 1.5)
emission_shape = 1
emission_sphere_radius = 2.0
direction = Vector3(0, 0, 1)
spread = 0.0
initial_velocity_max = 1.0
gravity = Vector3(0, 0, 0)
scale_min = 0.3
scale_max = 2.0
color_ramp = SubResource("GradientTexture1D_0or17")
color_initial_ramp = SubResource("GradientTexture1D_7joox")
[sub_resource type="QuadMesh" id="QuadMesh_oo2l3"]
size = Vector2(1, 150)
orientation = 0
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_f5y2f"]
exposure_multiplier = 0.8
[sub_resource type="Gradient" id="Gradient_weiut"]
offsets = PackedFloat32Array(0, 0.99726)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_7odmj"]
gradient = SubResource("Gradient_weiut")
[sub_resource type="Curve" id="Curve_txpdm"]
_data = [Vector2(0, 0.598214), 0.0, 0.123397, 0, 0, Vector2(0.986395, 0.991072), 1.47656, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_2imtd"]
curve = SubResource("Curve_txpdm")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gayoc"]
emission_shape_offset = Vector3(1.74, 0, 0)
emission_shape_scale = Vector3(0.3, 0.3, 40)
emission_shape = 3
emission_box_extents = Vector3(1, 1, 1)
angle_min = -180.0
angle_max = 180.0
direction = Vector3(0, 10, 1)
spread = 0.0
initial_velocity_min = 6.0
initial_velocity_max = 10.0
gravity = Vector3(-10, -9.8, 5)
damping_min = 4.0
damping_max = 8.0
scale_min = 0.3
scale_max = 1.75
scale_curve = SubResource("CurveTexture_2imtd")
color_initial_ramp = SubResource("GradientTexture1D_7odmj")
turbulence_enabled = true
turbulence_noise_strength = 0.1
turbulence_influence_min = 0.01
turbulence_influence_max = 0.05
[sub_resource type="PlaneMesh" id="PlaneMesh_8c2us"]
orientation = 2
[sub_resource type="Animation" id="Animation_dgbje"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.785, 2.75, -0.535)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.671952, 0, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../MeshInstance3D:material_override:emission_energy_multiplier")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [3.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../MeshInstance3D:material_override:emission")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.0748178, 0.134808, 0.168364, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Control/Sprite2D:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../GPUParticles3D:emitting")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../AudioStreamPlayer2:volume_db")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../AudioStreamPlayer:volume_db")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_irpux"]
resource_name = "trailer"
length = 15.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.633329, 2.42333, 4.86666, 10.4333, 14.6999),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(0.785, 2.75, -0.535), Vector3(0.89, 1.895, -1.695), Vector3(0.82, 1.245, -2.975), Vector3(0.82, 1.11, -5.74), Vector3(1.525, 1.12, -8.26)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.913329, 3.53333, 4.55333, 5.63333, 7.13666, 9.83333, 12.1705, 14.8928),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(-1.0472, 0, 0), Vector3(-0.671952, 0, 0), Vector3(-0.593412, 0, 0), Vector3(-0.125664, -0.701622, 0.0785398), Vector3(-0.125664, 0.235619, -0.0523599), Vector3(0, -0.235619, 0), Vector3(0, -2.26718, -0.127409), Vector3(0, -0.235619, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../MeshInstance3D:material_override:emission_energy_multiplier")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(4.69333, 10.6133),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [1.0, 3.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../MeshInstance3D:material_override:emission")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(8.2, 10.6333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0.0748178, 0.134808, 0.168364, 1), Color(1, 1, 1, 1)]
}
tracks/4/type = "audio"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../AudioStreamPlayer")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("14_awhi4")
}],
"times": PackedFloat32Array(0.0666667)
}
tracks/4/use_blend = true
tracks/5/type = "audio"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../AudioStreamPlayer2")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.664513,
"stream": ExtResource("15_iyklq")
}],
"times": PackedFloat32Array(0.076102)
}
tracks/5/use_blend = true
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../Control/Sprite2D:self_modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.533333, 3.7, 13.3494, 14.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../GPUParticles3D:emitting")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.3, 7.26164),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../AudioStreamPlayer2:volume_db")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(13.8333, 15),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, -80.0]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../AudioStreamPlayer:volume_db")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(13.8667, 15),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, -80.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_sy31e"]
_data = {
&"RESET": SubResource("Animation_dgbje"),
&"trailer": SubResource("Animation_irpux")
}
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_dgbje"]
exposure_multiplier = 2.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f5y2f"]
emission_enabled = true
emission = Color(0.250458, 0.274236, 0.577358, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_awhi4"]
[sub_resource type="Shader" id="Shader_iyklq"]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_always, cull_back;
uniform sampler2D DEPTH_TEXTURE: hint_depth_texture;
uniform vec3 fog_color: source_color = vec3(0);
uniform float density: hint_range(0.0, 0.2) = .05;
void fragment() {
float depth = texture(DEPTH_TEXTURE, SCREEN_UV).r;
depth = PROJECTION_MATRIX[3][2] / (depth + PROJECTION_MATRIX[2][2]);
depth += VERTEX.z;
depth = clamp(depth * density, 0.0, 1.0);
ALBEDO = fog_color;
ALPHA = pow(depth, 0.5);
}
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_tpaj8"]
render_priority = 1
shader = SubResource("Shader_iyklq")
shader_parameter/fog_color = Color(0.0392674, 0.120682, 0.141248, 1)
shader_parameter/density = 0.05
[sub_resource type="PlaneMesh" id="PlaneMesh_bjefl"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dgbje"]
emission_enabled = true
emission = Color(1, 0, 0, 1)
emission_energy_multiplier = 10.0
[sub_resource type="Gradient" id="Gradient_ckmi5"]
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_iyklq"]
gradient = SubResource("Gradient_ckmi5")
width = 100
height = 100
[node name="Node3D" type="Node3D"]
[node name="first_station" parent="." instance=ExtResource("1_yerc2")]
[node name="MeshInstance3D" type="MeshInstance3D" parent="first_station"]
transform = Transform3D(0, 0, 1.46175, 0, 1.46175, 0, -1.46175, 0, 0, 0.124229, 1.13951, -12.668)
visible = false
material_override = SubResource("StandardMaterial3D_cb8p6")
mesh = SubResource("QuadMesh_d1dx0")
[node name="SubViewport" type="SubViewport" parent="first_station/MeshInstance3D"]
size = Vector2i(2896, 2048)
[node name="SubwayMap" parent="first_station/MeshInstance3D/SubViewport" instance=ExtResource("2_5npvd")]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_hovki")
[node name="OmniLight3D" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -10.1989)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D13" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -0.5, 0.866025, 0, -0.866025, -0.5, -0.252596, 2.54413, -5.1989)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D2" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -15.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D3" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -20.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D4" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -25.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D5" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -30.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D6" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -35.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D7" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -40.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D8" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -45.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D9" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -50.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D10" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -55.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D11" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -60.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D12" type="SpotLight3D" parent="WorldEnvironment"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.252596, 2.54413, -65.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_blur = 6.0
spot_range = 7.0
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.8785, 1.08384, -32.4645)
sorting_offset = 100.0
material_override = SubResource("ShaderMaterial_4tj6b")
emitting = false
amount = 10
lifetime = 10.0
explosiveness = 0.5
randomness = 0.55
visibility_aabb = AABB(-4, -4, -30, 8, 8, 60)
draw_order = 3
process_material = SubResource("ParticleProcessMaterial_hvcdc")
draw_pass_1 = SubResource("QuadMesh_oo2l3")
[node name="GPUParticles3D2" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.65518, 1.08384, -32.4645)
visible = false
sorting_offset = 100.0
material_override = SubResource("ShaderMaterial_4tj6b")
amount = 5
lifetime = 10.0
explosiveness = 0.5
randomness = 0.55
visibility_aabb = AABB(-4, -4, -30, 8, 8, 60)
draw_order = 3
process_material = SubResource("ParticleProcessMaterial_hvcdc")
draw_pass_1 = SubResource("QuadMesh_oo2l3")
[node name="VoxelGI" type="VoxelGI" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.53159, -32.7307)
subdiv = 2
size = Vector3(20, 7.1879, 99.7711)
camera_attributes = SubResource("CameraAttributesPractical_f5y2f")
data = ExtResource("4_nmgvo")
[node name="GPUParticles3D3" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.18283, 0.258846, -32.3954)
visible = false
material_override = ExtResource("5_32vcv")
amount = 1000
lifetime = 1.5
speed_scale = 0.2
explosiveness = 0.4
randomness = 1.0
visibility_aabb = AABB(-4, -4, -30, 8, 8, 60)
local_coords = true
draw_order = 3
process_material = SubResource("ParticleProcessMaterial_gayoc")
draw_pass_1 = SubResource("PlaneMesh_8c2us")
[node name="GPUParticles3D4" type="GPUParticles3D" parent="."]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -6.80088, 0.258846, -32.3954)
visible = false
material_override = ExtResource("5_32vcv")
gi_mode = 2
visibility_range_begin_margin = 1.0
amount = 1000
lifetime = 1.5
speed_scale = 0.22
explosiveness = 0.4
randomness = 1.0
visibility_aabb = AABB(-4, -4, -30, 8, 8, 60)
local_coords = true
draw_order = 3
process_material = SubResource("ParticleProcessMaterial_gayoc")
draw_pass_1 = SubResource("PlaneMesh_8c2us")
[node name="Decal" type="Decal" parent="."]
transform = Transform3D(1.29235, 0, -5.64905e-08, -5.64905e-08, 2.46928e-15, -1.29235, 0, 1.29235, 2.46928e-15, 0.0490856, 1.34774, -66.1623)
visible = false
size = Vector3(4, 2, 2)
texture_albedo = ExtResource("7_tid2w")
texture_orm = ExtResource("8_xh1hp")
[node name="Decal2" type="Decal" parent="."]
transform = Transform3D(1.59383, 0, -6.96684e-08, -6.96684e-08, 3.0453e-15, -1.59383, 0, 1.59383, 3.0453e-15, 0.0490856, 1.16765, -65.1685)
size = Vector3(4, 2, 2)
texture_albedo = ExtResource("9_bvylv")
texture_orm = ExtResource("10_xrnct")
albedo_mix = 0.92
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.782608, 0.622515, 0, -0.622515, 0.782608, 0.785, 2.75, -0.535)
fov = 45.0
[node name="AnimationPlayer" type="AnimationPlayer" parent="Camera3D"]
libraries = {
&"": SubResource("AnimationLibrary_sy31e")
}
autoplay = "trailer"
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
material_override = ExtResource("11_sy31e")
[node name="subway_train" parent="." instance=ExtResource("12_dgbje")]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -6.44337, -0.125, -8.52174)
visible = false
[node name="VoxelGI" type="VoxelGI" parent="subway_train"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25.5427, 1.26147, 5.72205e-06)
subdiv = 3
size = Vector3(31.2329, 4.60791, 4.26172)
camera_attributes = SubResource("CameraAttributesPractical_dgbje")
data = ExtResource("13_f5y2f")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(-1.09, 0, 3.35223e-06, 0, 1.514, 0, -9.52908e-08, 0, -38.345, -6.62142, -0.527946, -27.073)
visible = false
material_override = SubResource("StandardMaterial3D_f5y2f")
mesh = SubResource("PlaneMesh_awhi4")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(3.52244, 0, 0, 0, -1.2314e-07, 2.81712, 0, -2.81712, -1.2314e-07, -6.37235, 1.22511, 0.165661)
material_override = SubResource("ShaderMaterial_tpaj8")
gi_mode = 0
mesh = SubResource("PlaneMesh_bjefl")
skeleton = NodePath("../MeshInstance3D2")
[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
transform = Transform3D(3.52244, 0, 0, 0, -1.2314e-07, 2.81712, 0, -2.81712, -1.2314e-07, 6.372, 1.225, 0.166)
material_override = SubResource("ShaderMaterial_tpaj8")
gi_mode = 0
mesh = SubResource("PlaneMesh_bjefl")
skeleton = NodePath("../MeshInstance3D2")
[node name="MeshInstance3D6" type="MeshInstance3D" parent="."]
transform = Transform3D(-3.52244, -2.4628e-07, -1.07652e-14, 0, -1.2314e-07, 2.81712, -3.07942e-07, 2.81712, 1.2314e-07, 6.372, 1.22511, -66.2916)
material_override = SubResource("ShaderMaterial_tpaj8")
gi_mode = 0
mesh = SubResource("PlaneMesh_bjefl")
skeleton = NodePath("../MeshInstance3D2")
[node name="MeshInstance3D7" type="MeshInstance3D" parent="."]
transform = Transform3D(-3.52244, -2.4628e-07, -1.07652e-14, 0, -1.2314e-07, 2.81712, -3.07942e-07, 2.81712, 1.2314e-07, -6.37235, 1.225, -66.292)
material_override = SubResource("ShaderMaterial_tpaj8")
gi_mode = 0
mesh = SubResource("PlaneMesh_bjefl")
skeleton = NodePath("../MeshInstance3D2")
[node name="MeshInstance3D5" type="MeshInstance3D" parent="."]
transform = Transform3D(3.52244, 0, 0, 0, -2.21081, 1.74599, 0, -1.74599, -2.21081, 0, 4.91844, 1.52058)
material_override = SubResource("ShaderMaterial_tpaj8")
gi_mode = 0
mesh = SubResource("PlaneMesh_bjefl")
skeleton = NodePath("../MeshInstance3D2")
[node name="CSGBox3D" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.66292, -0.4523, -24.7506)
visible = false
material_override = SubResource("StandardMaterial3D_dgbje")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
autoplay = true
mix_target = 1
bus = &"waves"
[node name="AudioStreamPlayer2" type="AudioStreamPlayer3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.91435, 0, -13.0111)
autoplay = true
panning_strength = 0.9
bus = &"waves"
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Sprite2D" type="Sprite2D" parent="Control"]
scale = Vector2(100, 100)
texture = SubResource("GradientTexture2D_iyklq")

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -15,9 +15,11 @@ dest_files=["res://.godot/imported/first_station.glb-6a12519729615267f30d0bbe877
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
@ -32,19 +34,25 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={
"materials": {
"Banco": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/Banco.tres"
"use_external/fallback_path": "res://base-environments/transition/import/Banco.tres",
"use_external/path": "uid://424btrdxx1jn"
},
"FluorescenteLuz": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/FluorescenteLuz.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/FluorescenteLuz.tres",
"use_external/path": "uid://b6t2jc424d33h"
},
"LuzTunelLarga": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/LuzTunelLarga.tres"
"use_external/fallback_path": "res://base-environments/transition/import/LuzTunelLarga.tres",
"use_external/path": "uid://ioeejfu3wmam"
},
"Material.003": {
"use_external/enabled": true,
@ -52,7 +60,8 @@ _subresources={
},
"ParedTunel": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/ParedTunel.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/ParedTunel.tres",
"use_external/path": "uid://bcim2jku0oi5s"
},
"beam_metal": {
"use_external/enabled": true,
@ -64,19 +73,23 @@ _subresources={
},
"escalator_paneling": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/escalator_paneling.tres"
"use_external/fallback_path": "res://base-environments/transition/import/escalator_paneling.tres",
"use_external/path": "uid://cbw2wfs45olip"
},
"escalator_rim": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/escalator_rim.tres"
"use_external/fallback_path": "res://base-environments/transition/import/escalator_rim.tres",
"use_external/path": "uid://ldo63jlqd5td"
},
"escalator_steps": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/escalator_steps.tres"
"use_external/fallback_path": "res://base-environments/transition/import/escalator_steps.tres",
"use_external/path": "uid://bhvlmumjhbj2u"
},
"green_pillar": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/green_pillar.tres"
"use_external/fallback_path": "res://base-environments/transition/import/green_pillar.tres",
"use_external/path": "uid://b5dojscygn3go"
},
"metal": {
"use_external/enabled": true,
@ -88,55 +101,68 @@ _subresources={
},
"pipeage": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/pipeage.tres"
"use_external/fallback_path": "res://base-environments/transition/import/pipeage.tres",
"use_external/path": "uid://idiy0k4l0pck"
},
"pipeage.001": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/pipeage.001.tres"
"use_external/fallback_path": "res://base-environments/transition/import/pipeage.001.tres",
"use_external/path": "uid://dm44x4w5rxejw"
},
"rails": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/rails.tres"
"use_external/fallback_path": "res://base-environments/transition/import/rails.tres",
"use_external/path": "uid://br7xd223mip1g"
},
"river_of_time": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/river_of_time.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/river_of_time.tres",
"use_external/path": "uid://cf2sgjrkn6kor"
},
"signal_lights": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/signal_lights.tres"
"use_external/fallback_path": "res://base-environments/transition/import/signal_lights.tres",
"use_external/path": "uid://c2ybk0gr3jbv3"
},
"sink": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/sink.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/sink.tres",
"use_external/path": "uid://ymsxij54stua"
},
"speakers": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/speakers.tres"
"use_external/fallback_path": "res://base-environments/transition/import/speakers.tres",
"use_external/path": "uid://b18iocnscjdie"
},
"station_ceiling": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/station_ceiling.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/station_ceiling.tres",
"use_external/path": "uid://c7ueklebq08f7"
},
"station_floor": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/station_floor.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/station_floor.tres",
"use_external/path": "uid://duhe1nn0uwulo"
},
"station_metal": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/station_metal.tres"
"use_external/fallback_path": "res://base-environments/transition/import/station_metal.tres",
"use_external/path": "uid://ywkkddtxjrxj"
},
"station_tiles": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/textures/station_tiles.tres"
"use_external/fallback_path": "res://base-environments/transition/import/textures/station_tiles.tres",
"use_external/path": "uid://b3wybjajg4dr3"
},
"tactile_paving": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/tactile_paving.tres"
"use_external/fallback_path": "res://base-environments/transition/import/tactile_paving.tres",
"use_external/path": "uid://ciml57ca083bi"
},
"unlit_station_tiles": {
"use_external/enabled": true,
"use_external/path": "res://base-environments/transition/import/unlit_station_tiles.tres"
"use_external/fallback_path": "res://base-environments/transition/import/unlit_station_tiles.tres",
"use_external/path": "uid://b6tr83kldm1ty"
}
},
"meshes": {
@ -146,6 +172,7 @@ _subresources={
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": false,
"save_to_file/fallback_path": "",
"save_to_file/path": ""
},
"first_station_escalator_stairs": {
@ -162,6 +189,7 @@ _subresources={
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": false,
"save_to_file/fallback_path": "",
"save_to_file/path": ""
},
"first_station_raised_ceiling": {
@ -170,6 +198,7 @@ _subresources={
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": false,
"save_to_file/fallback_path": "",
"save_to_file/path": ""
},
"first_station_station_ceiling": {
@ -178,6 +207,7 @@ _subresources={
"generate/shadow_meshes": 0,
"lods/normal_merge_angle": 60.0,
"save_to_file/enabled": false,
"save_to_file/fallback_path": "",
"save_to_file/path": ""
},
"first_station_water": {

View File

@ -6,5 +6,5 @@ cull_mode = 2
albedo_color = Color(0, 0, 0, 1)
metallic = 1.0
emission_enabled = true
emission = Color(1, 1, 1, 1)
emission = Color(0.0748178, 0.134808, 0.168364, 1)
emission_energy_multiplier = 3.0

Binary file not shown.

View File

@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dgron8fjelbc5"
path.s3tc="res://.godot/imported/ceiling_lightmap.png-5293cb6a05e7ed5940e01829ee43515d.s3tc.ctex"
path.etc2="res://.godot/imported/ceiling_lightmap.png-5293cb6a05e7ed5940e01829ee43515d.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://base-environments/transition/import/textures/ceiling_lightmap.png"
dest_files=["res://.godot/imported/ceiling_lightmap.png-5293cb6a05e7ed5940e01829ee43515d.s3tc.ctex", "res://.godot/imported/ceiling_lightmap.png-5293cb6a05e7ed5940e01829ee43515d.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@ -1,7 +1,8 @@
[gd_resource type="StandardMaterial3D" load_steps=4 format=3 uid="uid://c7ueklebq08f7"]
[gd_resource type="StandardMaterial3D" load_steps=5 format=3 uid="uid://c7ueklebq08f7"]
[ext_resource type="Texture2D" uid="uid://kgh07207gjeb" path="res://base-environments/transition/import/textures/StationCeiling_baseColor.jpeg" id="1_ouhv1"]
[ext_resource type="Texture2D" uid="uid://bsr2wsb2o2yqn" path="res://base-environments/transition/import/textures/StationCeiling_metallicRoughness.png" id="2_vf24e"]
[ext_resource type="Texture2D" uid="uid://dgron8fjelbc5" path="res://base-environments/transition/import/textures/ceiling_lightmap.png" id="2_yuvg6"]
[ext_resource type="Texture2D" uid="uid://twlm701hfhk5" path="res://base-environments/transition/import/textures/StationCeiling_normal.png" id="3_k7xpx"]
[resource]
@ -12,5 +13,8 @@ metallic_texture = ExtResource("2_vf24e")
metallic_texture_channel = 1
roughness_texture = ExtResource("2_vf24e")
roughness_texture_channel = 1
emission_enabled = true
emission_on_uv2 = true
emission_texture = ExtResource("2_yuvg6")
normal_enabled = true
normal_texture = ExtResource("3_k7xpx")

View File

@ -1,7 +1,7 @@
// NOTE: Shader automatically converted from Godot Engine 4.3.stable's StandardMaterial3D.
shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
render_mode blend_add, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
uniform sampler2D spray_texture;
uniform sampler2D lifetime_gradient;
@ -66,7 +66,7 @@ void fragment() {
float mask = max(0, pow((1.3 - length(0.5-UV)*2.5), 2.0-passtrough.y));
//ALPHA = min(1.0, max(0, texture(spray_texture, UV*0.7 - TIME*0.5 - COLOR.xy).x * sin(pow(passtrough.y, 4.0)*PI) + texture(spray_texture, uv).y -0.5) * 2.0 * sin(pow(passtrough.y, 0.3)*PI) * max(0, pow((1.3 - length(0.5-UV) * 2.0), 1.0+passtrough.y)));
ALPHA = min(1.0, max(0.0, (foam + mist) * mask)) * min(-VERTEX.z/3.0, 1.0);
ALBEDO = texture(lifetime_gradient, vec2(passtrough.y, 0.5)).xyz * .7;
ALBEDO = texture(lifetime_gradient, vec2(passtrough.y, 0.5)).xyz * .2;
BACKLIGHT = ALBEDO;
//EMISSION = COLOR.xyz * max(0, (1.5-pow(passtrough.y, 0.3)*2.0));

View File

@ -8,6 +8,7 @@
[ext_resource type="ArrayMesh" uid="uid://bsxcltpxwi5c2" path="res://base-environments/youth_room/shaders/lava-metal.res" id="5_4c8kc"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7uei1"]
cull_mode = 2
albedo_color = Color(0.933333, 0.933333, 0.933333, 1)
metallic = 1.0
roughness = 0.4
@ -19,20 +20,23 @@ shader_parameter/glass_tint = Color(0.631373, 0.584314, 0.376471, 1)
shader_parameter/lightcolor = Color(1.5, 2, 0.76, 1)
[sub_resource type="Gradient" id="Gradient_r18tr"]
colors = PackedColorArray(0.705882, 6.36471, 0.211765, 1, 0.279697, 0.985193, 0.315141, 1)
interpolation_mode = 2
offsets = PackedFloat32Array(0, 0.28945625, 1)
colors = PackedColorArray(1.5942307, 4.415934, 0.81375957, 1, 0.3708496, 1.8247963, 0.11428163, 1, 0.24156003, 0.99, 0.15840003, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_42bqf"]
gradient = SubResource("Gradient_r18tr")
use_hdr = true
[sub_resource type="ShaderMaterial" id="ShaderMaterial_31q3g"]
render_priority = 0
shader = ExtResource("4_y2lnx")
shader_parameter/gradient = SubResource("GradientTexture2D_42bqf")
shader_parameter/drop_size = 0.015
shader_parameter/stretch_compensatioon = 35.0
shader_parameter/fill = 0.655
shader_parameter/speed = 0.01
shader_parameter/brightness = 1.0
shader_parameter/stretch_compensatioon = 40.0
shader_parameter/fill = 0.65
shader_parameter/speed = 0.015
shader_parameter/brightness = 2.0
[sub_resource type="Animation" id="Animation_0ijgr"]
length = 0.001
@ -115,7 +119,7 @@ skeleton = NodePath("")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../raising")
libraries = {
"": SubResource("AnimationLibrary_88lyq")
&"": SubResource("AnimationLibrary_88lyq")
}
autoplay = "lavalamp"

View File

@ -0,0 +1,31 @@
[gd_scene load_steps=10 format=3 uid="uid://bcdye1g10mnhq"]
[ext_resource type="AudioStream" uid="uid://bvoiq2iplmdly" path="res://base-environments/volunteer_room/sounds/roomTheme_Fmaj_105bpm.ogg" id="1_voojx"]
[ext_resource type="Script" uid="uid://bso71xkb3xqnb" path="res://dev-util/audio-track.gd" id="2_llw42"]
[ext_resource type="Script" uid="uid://qgitde4nibng" path="res://dev-util/filler-track.gd" id="4_u5yqc"]
[ext_resource type="Script" uid="uid://cmp8dth4cvo28" path="res://dev-util/music_mix_helper.gd" id="5_q6wlk"]
[ext_resource type="Script" uid="uid://7v24sdisnbia" path="res://dev-util/bpm_timer.gd" id="6_cv4e8"]
[ext_resource type="Script" uid="uid://c05ftj6kxhpil" path="res://dev-util/music_mixer.gd" id="10_cqqvs"]
[sub_resource type="AudioStreamPolyphonic" id="AudioStreamPolyphonic_cv4e8"]
[sub_resource type="Resource" id="Resource_cv4e8"]
script = ExtResource("2_llw42")
audio = ExtResource("1_voojx")
metadata/_custom_type_script = "uid://bso71xkb3xqnb"
[sub_resource type="AudioStream" id="AudioStream_cn15y"]
script = ExtResource("10_cqqvs")
tracks = Array[ExtResource("2_llw42")]([SubResource("Resource_cv4e8")])
metadata/_custom_type_script = "uid://c05ftj6kxhpil"
[node name="MixedAudioHelper" type="AudioStreamPlayer"]
stream = SubResource("AudioStreamPolyphonic_cv4e8")
bus = &"music"
script = ExtResource("5_q6wlk")
actual_stream = SubResource("AudioStream_cn15y")
metadata/_custom_type_script = "uid://cmp8dth4cvo28"
[node name="Timer" type="Timer" parent="."]
wait_time = 0.5
script = ExtResource("6_cv4e8")

View File

@ -72,27 +72,27 @@ var noise: Noise = FastNoiseLite.new()
@export var void_active: bool = true
func _ready():
reduce_motion_changed(State.reduce_motion)
reduce_motion_changed(State.reduce_motion)
func _process(delta):
if void_active and not State.reduce_motion:
noise_position += delta * noise_speed
if void_active and not State.reduce_motion:
noise_position += delta * noise_speed
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
random_position = random_position.normalized() * pow(random_position.length()*2, noise_power) * 10
random_position = random_position.normalized() * pow(random_position.length()*2, noise_power) * 10
position = initial_position - random_position
position = initial_position - random_position
rotation = noise.get_noise_1d(noise_position*7) * random_position.length() * 0.01
rotation = noise.get_noise_1d(noise_position*7) * random_position.length() * 0.01
particles.position = random_position
particles.position = random_position
else: position = initial_position
else: position = initial_position
func reduce_motion_changed(value:bool):
$GPUParticles2D.visible = !value
$Sprite2D.visible = value
$GPUParticles2D.visible = !value
$Sprite2D.visible = value
"
[sub_resource type="Gradient" id="Gradient_nyks3"]
@ -821,8 +821,6 @@ offset_right = -424.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_aby4n")
story_array = PackedStringArray("Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it.", "I mean I did enjoy it while it lasted. Being able to properly hit people was great.", "It gave me the confidence to intimidate students, that were begging to get folded and - as I only once actually got to do that - it also was a great vent for anger. ", "I mean my tits just about killed me during warmup and the changing room really didn\'t need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.", "He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion.", "Also: my math grades pretty much leaped for my final year in high school thanks to him.", "He also helped me so much with jiu jitsu, as he properly floored me when I slipped up. ", "So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out.", "We also had my first proper kiss. I thought I loved him. But now?", "He was weird that evening. Even more huggy and hyperactive than usual.", "We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs.", "We had a play fight on my mattress. I\'ve never seen him fight like this.", "His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win", "… with this smirk on his face.", "I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat.", "He started undoing his shirt.", "Do you have condoms?", "Yes, of course everybody has Why did he ask that?", "I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.", "My body didn\'t move. It didn\'t say a word when the butterflies tried to escape from its stomach as he kissed it.", "I … observed him from afar. He … didn\'t seem to notice, that I had left.", "That I didn\'t return to kiss him goodbye. That I didn\'t hug him when he went home.", "My hands knocked on my brothers door. He let me lie on his carpet.", "I slowly returned.", "\"How did it go?, Fabian asked.", "\"It was moist”, I said.", "“That usually helps.”", "He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried.", "It took him a while to say something. “I … you … it\'s fine Lisa. I know it hurts the first time.”", "He gently stroked the back I was curling towards him.", "That was good. He was a sweet angel. Why must he be so bad at comforting?")
paragraph_lengths = PackedInt32Array(3, 6, 8, 9, 10, 12, 15, 16, 17, 18, 20, 22, 24, 25, 26, 27, 28, 29, 31, 32, 33, 32, 31, 30)
progress = 17.0
[node name="PanelContainer" type="PanelContainer" parent="."]
@ -915,6 +913,7 @@ frame = 2
script = SubResource("GDScript_80sa6")
noise_speed = 2.79007
noise_power = 4.56721
void_active = null
[node name="GPUParticles2D" type="GPUParticles2D" parent="PanelContainer/card/BackgroundSprite"]
emitting = false

View File

@ -27,7 +27,7 @@ operator = 8
[resource]
code = "shader_type spatial;
render_mode blend_add, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx;
render_mode blend_add, depth_draw_opaque, depth_test_default, cull_back, diffuse_lambert, specular_schlick_ggx;
uniform vec4 glass_tint : source_color;
uniform vec4 lightcolor : source_color;

View File

@ -1,12 +1,12 @@
shader_type spatial;
render_mode blend_mix, depth_draw_opaque, diffuse_lambert, specular_schlick_ggx, unshaded;
render_mode blend_mix, depth_draw_opaque, diffuse_lambert, specular_schlick_ggx;
uniform sampler2D gradient;
uniform float drop_size;
uniform float stretch_compensatioon;
uniform float fill;
uniform float speed;
uniform float brightness;
uniform sampler2D gradient: repeat_disable;
uniform float drop_size = 0.015;
uniform float stretch_compensatioon = 40;
uniform float fill = 0.65;
uniform float speed = 0.015;
uniform float brightness = 2;
void fragment() {
@ -18,7 +18,8 @@ void fragment() {
dist += 1.5 / distance(vec2(NORMAL.x/stretch_compensatioon, UV.y), vec2(0.0, fill));
dist += 1.5 / distance(vec2(NORMAL.x/stretch_compensatioon, UV2.x), vec2(0.0, 1.1));
ALBEDO = texture(gradient, UV2).xyz*brightness;
ALBEDO = texture(gradient, UV2).xyz * .3;
//ALBEDO = vec3(0.0);
ALPHA = float(int(dist > 1.0/drop_size));
EMISSION = texture(gradient, UV2).xyz * brightness;
}

View File

@ -22,8 +22,9 @@ vec2 rotateUV(vec2 uv, vec2 pivot, float rotation)
//clamp(, .0, 1.0
void fragment() {
//ALBEDO = vec3(0.);
ALBEDO = vec3(.0,
texture(starlight_textures,UV*1.5).x * 2.0*pow(max(sin(TIME + 10.0 * texture(starlight_textures,UV).y), .0), 5.0),
max(.0, texture(starlight_textures,UV*1.5).x - .1) * 10.0*pow(max(sin(TIME + 20.0 * texture(starlight_textures,UV).y), .1), 5.0),
texture(starlight_textures,
clamp(
UV / nebula_scale + drift_compensation + 1.0 *

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=117 format=4 uid="uid://b3b0gyvklqn50"]
[gd_scene load_steps=120 format=4 uid="uid://b3b0gyvklqn50"]
[ext_resource type="Script" uid="uid://belkrno67sft0" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"]
[ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"]
@ -32,6 +32,7 @@
[ext_resource type="PackedScene" uid="uid://bpjympn3ps3wo" path="res://logic-scenes/luna/luna_imported.tscn" id="27_pb1jl"]
[ext_resource type="Material" uid="uid://ct7uc5i5yp5qf" path="res://base-environments/youth_room/import/materials/wall.tres" id="28_oiweb"]
[ext_resource type="PackedScene" uid="uid://bwc2wp7tckm7t" path="res://base-environments/youth_room/outside.tscn" id="32_2vgep"]
[ext_resource type="Script" uid="uid://br1w2nt4pj8lt" path="res://vfx/post_processing/post_process_shader_template.gd" id="32_corra"]
[ext_resource type="Shader" uid="uid://d324neibxpomg" path="res://base-environments/intro_scene/shaders/stars.gdshader" id="32_k5rvd"]
[ext_resource type="ArrayMesh" uid="uid://jjrvf8px2ut3" path="res://base-environments/youth_room/shaders/winfow_frames.res" id="32_w6oa5"]
[ext_resource type="Texture2D" uid="uid://dabnlcnuticww" path="res://base-environments/intro_scene/textures/sky_textures_2.png" id="33_mvrs2"]
@ -1452,7 +1453,9 @@ 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
tonemap_mode = 1
tonemap_exposure = 0.7
tonemap_white = 3.0
ssr_max_steps = 512
ssr_depth_tolerance = 0.01
ssao_enabled = true
@ -1466,9 +1469,7 @@ ssil_intensity = 0.5
ssil_normal_rejection = 0.8
sdfgi_use_occlusion = true
sdfgi_read_sky_light = false
sdfgi_min_cell_size = 0.00976562
sdfgi_cascade0_distance = 0.625
sdfgi_max_distance = 10.0
sdfgi_min_cell_size = 0.009765625
glow_enabled = true
glow_levels/2 = 0.3
glow_levels/7 = 2.0
@ -1484,6 +1485,7 @@ fog_height = 1.0
fog_height_density = 0.1
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_26mp0"]
exposure_multiplier = 2.5
auto_exposure_enabled = true
auto_exposure_scale = 0.2
dof_blur_far_distance = 0.4
@ -1493,6 +1495,23 @@ dof_blur_near_transition = 2.0
dof_blur_amount = 0.0
auto_exposure_min_sensitivity = 100.0
[sub_resource type="CompositorEffect" id="CompositorEffect_ea6x8"]
resource_local_to_scene = false
resource_name = ""
enabled = true
effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("32_corra")
shader_code = "//color.rgb = pow(color.rgb, vec3(1.3));
color.rgb = max(vec3(0), pow(color.rgb, vec3(1.1, 1.2, 1.2)) * vec3(1.2, 1.1, 1.2) + vec3(-0.003, -0.001, 0.004));
// float gray = color.r * 0.2125 + color.g * 0.7154 + color.b * 0.0721;
// color.rgb = vec3(gray);"
metadata/_custom_type_script = "uid://br1w2nt4pj8lt"
[sub_resource type="Compositor" id="Compositor_bgk6f"]
compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_ea6x8")])
[sub_resource type="GDScript" id="GDScript_wb8kg"]
script/source = "extends WorldEnvironment
@ -1834,6 +1853,8 @@ volume_db = -80.0
bus = &"music"
[node name="childhood" parent="logic/ScenePlayer" instance=ExtResource("12_viwxf")]
story_array = PackedStringArray()
paragraph_lengths = PackedInt32Array(1)
[node name="VoiceTraining" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
stream = ExtResource("10_wwwdq")
@ -1841,13 +1862,19 @@ volume_db = -80.0
bus = &"music"
[node name="JuiJutsu" parent="logic/ScenePlayer" instance=ExtResource("12_x3dlb")]
story_array = PackedStringArray()
paragraph_lengths = PackedInt32Array(1)
[node name="voice_training" parent="logic/ScenePlayer" instance=ExtResource("13_v3447")]
story_array = PackedStringArray()
paragraph_lengths = PackedInt32Array(1)
[node name="Jui_Jutsu" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
bus = &"music"
[node name="draven" parent="logic/ScenePlayer" instance=ExtResource("19_d3c7p")]
story_array = PackedStringArray()
paragraph_lengths = PackedInt32Array(1)
[node name="starlight_mesh" type="MeshInstance3D" parent="logic/ScenePlayer"]
transform = Transform3D(0.999, 0, 0, 0, 0.999, 0, 0, 0, 0.999, 0, 0, 0)
@ -1893,7 +1920,7 @@ light_size = 1.0
light_cull_mask = 4294967293
[node name="Luna_frame-of-mind" parent="logic/ScenePlayer" instance=ExtResource("27_pb1jl")]
transform = Transform3D(0.958898, 0, 0.283747, 0, 1, 0, -0.283747, 0, 0.958898, -10.1552, 14.9384, -16.2182)
transform = Transform3D(0.95889795, 0, 0.28374717, 0, 1, 0, -0.28374717, 0, 0.95889795, -10.1552, 14.9384, -16.2182)
visible = false
[node name="OmniLight3D" type="OmniLight3D" parent="logic/ScenePlayer/Luna_frame-of-mind"]
@ -2228,7 +2255,7 @@ light_specular = 0.2
shadow_enabled = true
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="visuals"]
transform = Transform3D(0.821674, 0.447187, -0.353377, -0.413796, 0.894413, 0.169693, 0.39195, 0.00679388, 0.919961, 0.866179, 2.88055, 4.51936)
transform = Transform3D(0.82167387, 0.4471866, -0.3533773, -0.41379577, 0.8944132, 0.1696928, 0.3919504, 0.0067938757, 0.9199609, 0.866179, 2.88055, 4.51936)
visible = false
light_color = Color(0.81982, 0.935491, 0.980381, 1)
light_energy = 20.0
@ -2358,21 +2385,20 @@ skeleton = NodePath("")
[node name="ReflectionProbe" type="ReflectionProbe" parent="visuals/vfx/lava-lamp"]
transform = Transform3D(0.866853, 0, -0.498563, 0, 1, 0, 0.498563, 0, 0.866853, -0.0356357, 0.0416123, 0.020328)
visible = false
max_distance = 7.0
size = Vector3(2, 2, 2)
[node name="OmniLight3D" type="SpotLight3D" parent="visuals/vfx/lava-lamp"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0.0113046, 0.199004, -0.00212491)
light_color = Color(0.282353, 0.45098, 0.258824, 1)
transform = Transform3D(0.9999999, 0, 0, 0, -4.3711395e-08, -1, 0, 0.9999999, -4.3711385e-08, 0.011304617, 0.187006, -0.0021249056)
light_color = Color(0.21945003, 0.45, 0.189, 1)
light_energy = 1.5
light_size = 0.2
light_specular = 0.1
light_size = 0.05
light_specular = 0.3
light_bake_mode = 1
spot_range = 1.5
spot_attenuation = 1.1487
spot_angle = 126.18
spot_angle_attenuation = 0.68302
spot_attenuation = 1.2
spot_angle = 137.58
spot_angle_attenuation = 1.6358016
script = SubResource("GDScript_yn0pl")
[node name="youth_room" parent="visuals" instance=ExtResource("1_jf3oi")]
@ -2380,6 +2406,7 @@ script = SubResource("GDScript_yn0pl")
[node name="WorldEnvironment" type="WorldEnvironment" parent="." groups=["scene_actors"]]
environment = SubResource("Environment_pllnm")
camera_attributes = SubResource("CameraAttributesPractical_26mp0")
compositor = SubResource("Compositor_bgk6f")
script = SubResource("GDScript_wb8kg")
[node name="window_frames" type="MeshInstance3D" parent="WorldEnvironment"]

View File

@ -0,0 +1,731 @@
[gd_scene load_steps=37 format=3 uid="uid://dxxiyefijv48j"]
[ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="1_61qpo"]
[ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="1_t34p3"]
[ext_resource type="Texture2D" uid="uid://sfo05h6uah7b" path="res://import/interface-elements/USK_12.svg" id="2_ncfee"]
[ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="2_s1yf2"]
[ext_resource type="Texture2D" uid="uid://buo4ntxw1vofu" path="res://addons/input_prompts/icons/keyboard/w.png" id="4_8e30h"]
[ext_resource type="Script" uid="uid://bbs1u7ojno7xo" path="res://addons/input_prompts/action_prompt/action_prompt.gd" id="5_6w5b4"]
[ext_resource type="Texture2D" uid="uid://yakqusko3p3h" path="res://addons/input_prompts/icons/keyboard/a.png" id="7_g425y"]
[ext_resource type="Texture2D" uid="uid://b0kuadlp4jw6j" path="res://addons/input_prompts/icons/keyboard/d.png" id="8_kj67n"]
[ext_resource type="Texture2D" uid="uid://bwhf0tx67yj7a" path="res://addons/input_prompts/icons/keyboard/s.png" id="9_xo70c"]
[ext_resource type="Script" uid="uid://0h0lrkntx0uh" path="res://logic-scenes/main menu/pause_menu.gd" id="10_g425y"]
[ext_resource type="PackedScene" uid="uid://u0bwjr5l6nkh" path="res://logic-scenes/main menu/privacy_settings.tscn" id="10_jirkf"]
[ext_resource type="PackedScene" uid="uid://g2a27jwdapai" path="res://logic-scenes/card_burner/card_burner.tscn" id="10_kj67n"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="11_kj67n"]
[ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://logic-scenes/main menu/acessability_settings.tscn" id="11_kt5p7"]
[ext_resource type="PackedScene" uid="uid://citwb7f4dl3l1" path="res://thank-you.tscn" id="13_xo70c"]
[ext_resource type="AudioStream" uid="uid://cho5neuxkvpyh" path="res://base-environments/youth_room/audio/Voice Loop.wav" id="14_k41g6"]
[sub_resource type="GDScript" id="GDScript_t34p3"]
script/source = "extends Node3D
var has_stage = false
var room = preload(\"res://base-environments/youth_room/youth_room.tscn\")
var loaded_room: RoomTemplate
func _ready() -> void:
State.take_stage(self)
load_room()
State.settings_initialised = true
State.show_content_notes = false
State.text_language = 1
State.speech_language = 1
$Menu/VBoxContainer2/PressStart.grab_focus()
Scenes.sign_up_for_sequence(prepare_transition, Scenes.id.TRANSITION, 0)
Scenes.sign_up_for_sequence(transition, Scenes.id.TRANSITION, 2)
if OS.get_locale_language() == \"de\":
$Menu/VBoxContainer/SpeechButton.select(1)
func prepare_transition(_id):
await get_tree().process_frame
Scenes.continue_sequence(self)
await get_tree().create_timer(5.0).timeout
loaded_room.prepare_transition()
ResourceLoader.load_threaded_request(\"res://base-environments/transition/first_platform.tscn\")
func transition(_id, _repeat):
#$TextureRect.texture = get_tree().root.get_texture()
#$TextureRect.visible = true
loaded_room.unload()
var packed_second_room:PackedScene = ResourceLoader.load_threaded_get(\"res://base-environments/transition/first_platform.tscn\")
loaded_room.queue_free()
%Room.add_child(packed_second_room.instantiate())
await get_tree().create_timer(15.5).timeout
$AudioStreamPlayer/AnimationPlayer.play(\"ending\")
$ending.show()
$ending.mouse_filter = Control.MOUSE_FILTER_STOP
%Room.get_child(0).queue_free()
func load_room():
for child in %Room.get_children():
child.queue_free()
loaded_room = room.instantiate()
%Room.add_child(loaded_room)
var in_game: bool
func _on_start_button_pressed():
in_game = true
var new_save = SaveGame.new()
if DirAccess.dir_exists_absolute( State.user_saves_path ):
var usr_dir = DirAccess.open(State.user_saves_path)
for path in usr_dir.get_files():
if path.ends_with(\".json\"):
var found_save: = SaveGame.new(\"%s/%s\" % [State.user_saves_path, path.get_basename()])
if found_save.is_demo:
new_save = found_save
break
State.active_save_game = new_save
var vis_tween = get_tree().create_tween()
vis_tween.tween_property(%Menu, \"modulate\", Color(1,1,1,0), .3)
await vis_tween.finished
%Menu.visible = false
%Menu.mouse_filter = Control.MouseFilter.MOUSE_FILTER_PASS
loaded_room.start_room()
func _process(delta: float) -> void:
if Input.is_action_just_pressed(\"reset_demo\"):
_on_reset()
func _on_reset():
load_room()
%Menu.modulate = Color.WHITE
%Menu.mouse_filter = Control.MouseFilter.MOUSE_FILTER_STOP
%Menu.visible = true
func _on_cn_box_toggled(toggled_on: bool) -> void:
State.show_content_notes = toggled_on
func _on_motion_box_toggled(toggled_on: bool) -> void:
State.reduce_motion = toggled_on
func _on_text_button_item_selected(index: int) -> void:
match index:
0:
State.text_language = 1
1:
State.text_language = 2
func _on_speech_button_item_selected(index: int) -> void:
State.speech_language = index + 1
%TextButton.select(1)
func _unhandled_input(event: InputEvent) -> void:
if event is InputEvent and in_game:
if event.is_action_pressed(\"ui_menu\") and not %Accessibility.is_active:
toggle_pause_menu()
func show_accessibility_settings():
%AccessibilityContainer.show()
%Accessibility.is_active = true
await %Accessibility.leave_stage
%AccessibilityContainer.hide()
func toggle_pause_menu():
if not get_tree().paused:
get_tree().paused = true
%PauseContainer.show()
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
get_tree().paused = false
%PauseContainer.hide()
if State.stage_list[0] is Player:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
"
[sub_resource type="Shader" id="Shader_jirkf"]
code = "shader_type canvas_item;
render_mode blend_premul_alpha;
uniform float nebula_brightness = 4;
uniform vec2 nebula_scale = vec2(1.5);
uniform sampler2D starlight_noise: repeat_enable;
uniform sampler2D starlight_textures;
uniform float rotation_speed = 0.02;
uniform vec2 rotation_pivot = vec2(.8);
uniform vec2 drift_compensation = vec2(0.1, -0.2);
uniform float noise_strength = 0.2;
// https://gist.github.com/ayamflow/c06bc0c8a64f985dd431bd0ac5b557cd
vec2 rotateUV(vec2 uv, vec2 pivot, float rotation)
{
return vec2(
cos(rotation) * (uv.x - pivot.x) + sin(rotation) * (uv.y - pivot.y) + pivot.x,
cos(rotation) * (uv.y - pivot.y) - sin(rotation) * (uv.x - pivot.x) + pivot.y
);
}
//clamp(, .0, 1.0
void fragment() {
COLOR *= vec4(.0,
texture(starlight_textures,fract(UV*2.0)).x * 2.0*pow(max(sin(TIME + 10.0 * texture(starlight_textures,UV).y), .0), 5.0),
texture(starlight_textures,
clamp(
UV / nebula_scale + drift_compensation + 1.0 *
texture(starlight_noise, rotateUV(
UV / nebula_scale + noise_strength * texture(starlight_noise, rotateUV(UV, -rotation_pivot, TIME*rotation_speed)).yz,
rotation_pivot, TIME*rotation_speed)
).xz,
.0, 1.0))
.z * nebula_brightness,
clamp(pow(COLOR.x * 2.5 - (texture(starlight_noise, UV*2.0+TIME*.02).x + 0.8), 1.5), .0, 1.0)
) * COLOR.w;
}
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_k41g6"]
shader = SubResource("Shader_jirkf")
shader_parameter/nebula_brightness = 2.4
shader_parameter/nebula_scale = Vector2(1.3, 1.6)
shader_parameter/starlight_noise = ExtResource("1_t34p3")
shader_parameter/starlight_textures = ExtResource("2_s1yf2")
shader_parameter/rotation_speed = 0.02
shader_parameter/rotation_pivot = Vector2(0.8, 0.8)
shader_parameter/drift_compensation = Vector2(0.1, -0.2)
shader_parameter/noise_strength = 0.2
[sub_resource type="Gradient" id="Gradient_kt5p7"]
interpolation_color_space = 2
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_jirkf"]
gradient = SubResource("Gradient_kt5p7")
width = 2048
height = 1536
fill = 1
fill_from = Vector2(0.538462, 0.491453)
fill_to = Vector2(1.3, -0.3)
[sub_resource type="InputEventKey" id="InputEventKey_kt5p7"]
device = -1
physical_keycode = 87
unicode = 119
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_mivr6"]
device = -1
axis = 1
axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_52c3j"]
device = -1
physical_keycode = 65
unicode = 97
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_b7q2n"]
device = -1
axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_qhf78"]
device = -1
physical_keycode = 68
unicode = 100
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_gatj6"]
device = -1
axis_value = 1.0
[sub_resource type="InputEventKey" id="InputEventKey_ol51q"]
device = -1
physical_keycode = 83
unicode = 115
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_2rqk2"]
device = -1
axis = 1
axis_value = 1.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kt5p7"]
bg_color = Color(0.0288289, 0.0448641, 0.121276, 1)
border_width_left = 10
border_width_top = 10
border_width_right = 10
border_width_bottom = 10
border_color = Color(0.0288289, 0.0448641, 0.121276, 1)
corner_radius_top_left = 20
corner_radius_top_right = 20
corner_radius_bottom_right = 20
corner_radius_bottom_left = 20
expand_margin_left = 20.0
expand_margin_right = 20.0
[sub_resource type="Shader" id="Shader_gatj6"]
code = "shader_type canvas_item;
render_mode blend_premul_alpha;
uniform float nebula_brightness = 4;
uniform vec2 nebula_scale = vec2(1.5);
uniform sampler2D starlight_noise: repeat_enable;
uniform sampler2D starlight_textures;
uniform float rotation_speed = 0.02;
uniform vec2 rotation_pivot = vec2(.8);
uniform vec2 drift_compensation = vec2(0.1, -0.2);
uniform float noise_strength = 0.2;
// https://gist.github.com/ayamflow/c06bc0c8a64f985dd431bd0ac5b557cd
vec2 rotateUV(vec2 uv, vec2 pivot, float rotation)
{
return vec2(
cos(rotation) * (uv.x - pivot.x) + sin(rotation) * (uv.y - pivot.y) + pivot.x,
cos(rotation) * (uv.y - pivot.y) - sin(rotation) * (uv.x - pivot.x) + pivot.y
);
}
//clamp(, .0, 1.0
void fragment() {
COLOR *= vec4(.0,
texture(starlight_textures,fract(UV*2.0)).x * 2.0*pow(max(sin(TIME + 10.0 * texture(starlight_textures,UV).y), .0), 5.0),
texture(starlight_textures,
clamp(
UV / nebula_scale + drift_compensation + 1.0 *
texture(starlight_noise, rotateUV(
UV / nebula_scale + noise_strength * texture(starlight_noise, rotateUV(UV, -rotation_pivot, TIME*rotation_speed)).yz,
rotation_pivot, TIME*rotation_speed)
).xz,
.0, 1.0))
.z * nebula_brightness,
clamp(pow(COLOR.x * 2.5 - (texture(starlight_noise, UV*2.0+TIME*.02).x + 0.8), 1.5), .0, 1.0)
) * COLOR.w;
}
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ol51q"]
shader = SubResource("Shader_gatj6")
shader_parameter/nebula_brightness = 2.4
shader_parameter/nebula_scale = Vector2(1.3, 1.6)
shader_parameter/starlight_noise = ExtResource("1_t34p3")
shader_parameter/starlight_textures = ExtResource("2_s1yf2")
shader_parameter/rotation_speed = 0.02
shader_parameter/rotation_pivot = Vector2(0.8, 0.8)
shader_parameter/drift_compensation = Vector2(0.1, -0.2)
shader_parameter/noise_strength = 0.2
[sub_resource type="Gradient" id="Gradient_2rqk2"]
interpolation_color_space = 2
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_w8m28"]
gradient = SubResource("Gradient_2rqk2")
width = 2048
height = 1536
fill = 1
fill_from = Vector2(0.538462, 0.491453)
fill_to = Vector2(1.3, -0.3)
[sub_resource type="Animation" id="Animation_kt5p7"]
resource_name = "ending"
length = 120.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 8.34472,
"stream": ExtResource("14_k41g6")
}],
"times": PackedFloat32Array(0.517639)
}
tracks/0/use_blend = true
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mivr6"]
_data = {
&"ending": SubResource("Animation_kt5p7")
}
[node name="DemoMain" type="Node3D"]
process_mode = 3
script = SubResource("GDScript_t34p3")
[node name="Room" type="Node3D" parent="."]
unique_name_in_owner = true
[node name="Menu" type="Control" parent="."]
unique_name_in_owner = true
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Panel" type="Panel" parent="Menu"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect3" type="TextureRect" parent="Menu/Panel"]
material = SubResource("ShaderMaterial_k41g6")
layout_mode = 0
offset_left = 2073.0
offset_top = 1497.0
offset_right = 4353.0
offset_bottom = 3530.0
rotation = -3.14159
texture = SubResource("GradientTexture2D_jirkf")
[node name="TextureRect2" type="TextureRect" parent="Menu/Panel"]
visible = false
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -395.0
offset_top = -447.0
offset_right = 1011.0
offset_bottom = 959.0
grow_horizontal = 0
grow_vertical = 0
scale = Vector2(0.2, 0.2)
texture = ExtResource("2_ncfee")
[node name="Label" type="Label" parent="Menu/Panel/TextureRect2"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -988.0
offset_top = 99.0002
offset_right = -590.0
offset_bottom = 187.0
grow_horizontal = 2
grow_vertical = 0
scale = Vector2(5, 5)
text = "*Als Messe-Demo geprüft. Entspricht angestrebtem finalen Rating."
horizontal_alignment = 1
autowrap_mode = 2
[node name="VBoxContainer2" type="VBoxContainer" parent="Menu"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -256.0
offset_top = -281.5
offset_right = 256.0
offset_bottom = 281.5
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect" type="TextureRect" parent="Menu/VBoxContainer2"]
custom_minimum_size = Vector2(512, 512)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("1_61qpo")
expand_mode = 2
[node name="PressStart" type="Button" parent="Menu/VBoxContainer2"]
layout_mode = 2
theme_override_font_sizes/font_size = 45
text = "Start the Demo!"
[node name="VBoxContainer" type="VBoxContainer" parent="Menu"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -392.0
offset_top = -310.0
offset_right = -78.0
offset_bottom = -92.0
grow_horizontal = 0
grow_vertical = 0
[node name="Label" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Accessibility"
[node name="CNBox" type="CheckBox" parent="Menu/VBoxContainer"]
layout_mode = 2
text = "show Content Notes"
[node name="MotionBox" type="CheckBox" parent="Menu/VBoxContainer"]
layout_mode = 2
text = "reduce motion and flickering"
[node name="A11Y" type="Button" parent="Menu/VBoxContainer"]
layout_mode = 2
text = "More Options"
[node name="Label3" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Spoken Text"
[node name="SpeechButton" type="OptionButton" parent="Menu/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 0
item_count = 2
popup/item_0/text = "englisch"
popup/item_0/id = 0
popup/item_1/text = "deutsch"
popup/item_1/id = 1
[node name="Label2" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Written Text"
[node name="TextButton" type="OptionButton" parent="Menu/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 0
item_count = 2
popup/item_0/text = "englisch"
popup/item_0/id = 1
popup/item_1/text = "deutsch"
popup/item_1/id = 2
[node name="Button" type="Button" parent="Menu/VBoxContainer"]
layout_mode = 2
text = "Privacy Info"
[node name="Control" type="Control" parent="Menu"]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_top = -40.0
offset_right = 40.0
grow_vertical = 0
[node name="ActionPrompt" type="TextureRect" parent="Menu/Control"]
texture_filter = 1
layout_mode = 0
offset_left = 134.0
offset_top = -282.0
offset_right = 234.0
offset_bottom = -182.0
texture = ExtResource("4_8e30h")
stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_forwards"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_kt5p7"), SubResource("InputEventJoypadMotion_mivr6")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt2" type="TextureRect" parent="Menu/Control"]
texture_filter = 1
layout_mode = 0
offset_left = 70.0
offset_top = -187.0
offset_right = 170.0
offset_bottom = -87.0
texture = ExtResource("7_g425y")
stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_left"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_52c3j"), SubResource("InputEventJoypadMotion_b7q2n")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt4" type="TextureRect" parent="Menu/Control"]
texture_filter = 1
layout_mode = 0
offset_left = 247.0
offset_top = -187.0
offset_right = 347.0
offset_bottom = -87.0
texture = ExtResource("8_kj67n")
stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_right"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_qhf78"), SubResource("InputEventJoypadMotion_gatj6")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt3" type="TextureRect" parent="Menu/Control"]
texture_filter = 1
layout_mode = 0
offset_left = 158.0
offset_top = -187.0
offset_right = 258.0
offset_bottom = -87.0
texture = ExtResource("9_xo70c")
stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_backwards"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_ol51q"), SubResource("InputEventJoypadMotion_2rqk2")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="Label" type="Label" parent="Menu/Control"]
layout_mode = 0
offset_left = 72.0
offset_top = -89.0
offset_right = 374.0
offset_bottom = -40.0
theme_type_variation = &"HeaderMedium"
text = "Move trough the room"
[node name="PrivacyPanel" type="PanelContainer" parent="Menu"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -701.5
offset_top = -464.5
offset_right = 701.5
offset_bottom = 464.5
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_kt5p7")
[node name="PrivacyAndDataProtection" parent="Menu/PrivacyPanel" instance=ExtResource("10_jirkf")]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="CardBurner" parent="." instance=ExtResource("10_kj67n")]
visible = false
[node name="PauseContainer" type="CenterContainer" parent="."]
unique_name_in_owner = true
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect" type="TextureRect" parent="PauseContainer"]
material = SubResource("ShaderMaterial_ol51q")
layout_mode = 2
texture = SubResource("GradientTexture2D_w8m28")
[node name="PauseMenu" type="PanelContainer" parent="PauseContainer"]
unique_name_in_owner = true
layout_mode = 2
script = ExtResource("10_g425y")
[node name="VBoxContainer" type="VBoxContainer" parent="PauseContainer/PauseMenu"]
layout_mode = 2
[node name="Label" type="Label" parent="PauseContainer/PauseMenu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Game Paused"
[node name="ResumeButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Resume"
[node name="A11Y" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
layout_mode = 2
text = "Accessibility"
[node name="BugButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
layout_mode = 2
script = ExtResource("11_kj67n")
metadata/_custom_type_script = "uid://sa15wakvpj2e"
[node name="ToMenuButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
text = "Return to Menu"
[node name="ToSettingsButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
text = "Open Settings"
[node name="ToDesktopButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Quit to Desktop"
[node name="HSeparator" type="HSeparator" parent="PauseContainer/PauseMenu/VBoxContainer"]
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
[node name="FindHelplineButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Find Help-Lines"
[node name="Label2" type="Label" parent="PauseContainer/PauseMenu/VBoxContainer"]
layout_mode = 2
text = "opens findahelpline.com"
horizontal_alignment = 1
[node name="SkipStoryButton" type="Button" parent="PauseContainer/PauseMenu/VBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
text = "Skip this Story"
[node name="ending" parent="." instance=ExtResource("13_xo70c")]
visible = false
mouse_filter = 2
[node name="AccessibilityContainer" type="CenterContainer" parent="."]
unique_name_in_owner = true
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="AccessibilityPanel" type="PanelContainer" parent="AccessibilityContainer"]
unique_name_in_owner = true
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_kt5p7")
[node name="Accessibility" parent="AccessibilityContainer/AccessibilityPanel" instance=ExtResource("11_kt5p7")]
unique_name_in_owner = true
layout_mode = 2
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="AudioStreamPlayer"]
libraries = {
&"": SubResource("AnimationLibrary_mivr6")
}
[connection signal="pressed" from="Menu/VBoxContainer2/PressStart" to="." method="_on_start_button_pressed"]
[connection signal="toggled" from="Menu/VBoxContainer/CNBox" to="." method="_on_cn_box_toggled"]
[connection signal="toggled" from="Menu/VBoxContainer/MotionBox" to="." method="_on_motion_box_toggled"]
[connection signal="pressed" from="Menu/VBoxContainer/A11Y" to="." method="show_accessibility_settings"]
[connection signal="item_selected" from="Menu/VBoxContainer/SpeechButton" to="." method="_on_speech_button_item_selected"]
[connection signal="item_selected" from="Menu/VBoxContainer/TextButton" to="." method="_on_text_button_item_selected"]
[connection signal="pressed" from="Menu/VBoxContainer/Button" to="Menu/PrivacyPanel" method="show"]
[connection signal="leave_stage" from="Menu/PrivacyPanel/PrivacyAndDataProtection" to="Menu/PrivacyPanel" method="hide"]
[connection signal="pressed" from="PauseContainer/PauseMenu/VBoxContainer/A11Y" to="." method="show_accessibility_settings"]

View File

@ -0,0 +1 @@
extends WorldEnvironment

View File

@ -0,0 +1 @@
uid://mgertkn5ub0g

13
src/dev-util/steam.gd Normal file
View File

@ -0,0 +1,13 @@
extends Node
func steamInitEx() -> Dictionary: return {"status": -1}
func steamShutdown(): pass
func setAchievement(_ach_name: String): pass
func storeStats(): pass
func isSteamRunningOnSteamDeck() -> bool: return false
func resetAllStats(_flag: bool): pass

View File

@ -0,0 +1 @@
uid://ddw2bjoy7dka

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@ config_version=5
config/name="Frame of Mind"
run/main_scene="uid://cd63barv73rfx"
config/use_custom_user_dir=true
config/features=PackedStringArray("4.4", "Forward Plus")
config/features=PackedStringArray("4.5", "Forward Plus")
boot_splash/bg_color=Color(0.0313726, 0.0117647, 0.129412, 1)
boot_splash/fullsize=false
boot_splash/image="res://splash.png"
@ -25,6 +25,7 @@ State="*res://singletons/global_state.gd"
Scenes="*res://singletons/scene_reference.gd"
Steamworks="*res://dev-util/steamworks.gd"
PromptManager="*res://addons/input_prompts/input_prompt_manager.gd"
Steam="*res://dev-util/steam.gd"
[debug]
@ -37,8 +38,11 @@ gdscript/warnings/native_method_override=0
window/size/viewport_width=1920
window/size/viewport_height=1080
window/size/mode=3
window/hdr/enabled=true
window/hdr/prefer_high_precision=true
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
display_server/driver.linuxbsd="wayland"
mouse_cursor/custom_image="res://import/interface-elements/cursor.png"
[editor]

View File

@ -0,0 +1,147 @@
@tool
extends CompositorEffect
class_name PostProcessShader
const template_shader: String = """
#version 450
// Invocations in the (x, y, z) dimension
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
// Our push constant
layout(push_constant, std430) uniform Params {
vec2 raster_size;
vec2 reserved;
} params;
// The code we want to execute in each invocation
void main() {
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
ivec2 size = ivec2(params.raster_size);
if (uv.x >= size.x || uv.y >= size.y) {
return;
}
vec4 color = imageLoad(color_image, uv);
#COMPUTE_CODE
imageStore(color_image, uv, color);
}
"""
@export_multiline var shader_code: String = "":
set(value):
mutex.lock()
shader_code = value
shader_is_dirty = true
mutex.unlock()
var rd: RenderingDevice
var shader: RID
var pipeline: RID
var mutex: Mutex = Mutex.new()
var shader_is_dirty: bool = true
func _init():
effect_callback_type = EFFECT_CALLBACK_TYPE_POST_TRANSPARENT
rd = RenderingServer.get_rendering_device()
func _notification(what):
if what == NOTIFICATION_PREDELETE:
if shader.is_valid():
# Freeing our shader will also free any dependents such as the pipeline!
rd.free_rid(shader)
func _check_shader() -> bool:
if not rd:
return false
var new_shader_code: String = ""
# Check if our shader is dirty.
mutex.lock()
if shader_is_dirty:
new_shader_code = shader_code
shader_is_dirty = false
mutex.unlock()
# We don't have a (new) shader?
if new_shader_code.is_empty():
return pipeline.is_valid()
# Apply template.
new_shader_code = template_shader.replace("#COMPUTE_CODE", new_shader_code);
# Out with the old.
if shader.is_valid():
rd.free_rid(shader)
shader = RID()
pipeline = RID()
# In with the new.
var shader_source: RDShaderSource = RDShaderSource.new()
shader_source.language = RenderingDevice.SHADER_LANGUAGE_GLSL
shader_source.source_compute = new_shader_code
var shader_spirv: RDShaderSPIRV = rd.shader_compile_spirv_from_source(shader_source)
if shader_spirv.compile_error_compute != "":
push_error(shader_spirv.compile_error_compute)
push_error("In: " + new_shader_code)
return false
shader = rd.shader_create_from_spirv(shader_spirv)
if not shader.is_valid():
return false
pipeline = rd.compute_pipeline_create(shader)
return pipeline.is_valid()
func _render_callback(p_effect_callback_type, p_render_data):
if rd and p_effect_callback_type == EFFECT_CALLBACK_TYPE_POST_TRANSPARENT and _check_shader():
# Get our render scene buffers object, this gives us access to our render buffers.
# Note that implementation differs per renderer hence the need for the cast.
var render_scene_buffers: RenderSceneBuffersRD = p_render_data.get_render_scene_buffers()
if render_scene_buffers:
# Get our render size, this is the 3D render resolution!
var size = render_scene_buffers.get_internal_size()
if size.x == 0 and size.y == 0:
return
# We can use a compute shader here.
var x_groups = (size.x - 1) / 8 + 1
var y_groups = (size.y - 1) / 8 + 1
var z_groups = 1
# Push constant.
var push_constant: PackedFloat32Array = PackedFloat32Array()
push_constant.push_back(size.x)
push_constant.push_back(size.y)
push_constant.push_back(0.0)
push_constant.push_back(0.0)
# Loop through views just in case we're doing stereo rendering. No extra cost if this is mono.
var view_count = render_scene_buffers.get_view_count()
for view in range(view_count):
# Get the RID for our color image, we will be reading from and writing to it.
var input_image = render_scene_buffers.get_color_layer(view)
# Create a uniform set.
# This will be cached; the cache will be cleared if our viewport's configuration is changed.
var uniform: RDUniform = RDUniform.new()
uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
uniform.binding = 0
uniform.add_id(input_image)
var uniform_set = UniformSetCacheRD.get_cache(shader, 0, [ uniform ])
# Run our compute shader.
var compute_list:= rd.compute_list_begin()
rd.compute_list_bind_compute_pipeline(compute_list, pipeline)
rd.compute_list_bind_uniform_set(compute_list, uniform_set, 0)
rd.compute_list_set_push_constant(compute_list, push_constant.to_byte_array(), push_constant.size() * 4)
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
rd.compute_list_end()

View File

@ -0,0 +1 @@
uid://br1w2nt4pj8lt