Bläddra i källkod

Improve the 3D graphics settings demo

- New graphics settings:
  - Field of view.
  - Volumetric fog.
- Use Godot's built-in 3D viewport facilities instead of using a SubViewport.
  - This also allows for choosing AMD FidelityFX Super Resolution
    for resolution scaling, but it's not working yet due to a Godot bug.
  - Nearest-neighbor scaling is no longer available. It can be
    reimplemented in Godot core and then exposed in the future.
- Separate MSAA from FXAA settings, as both can be used at the same time.
- Add more quality settings for various effect settings.
- Rename sections and setting names to be more "player-oriented"
  (even if this results in the actual Godot terminology not being
  presented).
- Add performance hints to setting values.
- Add FPS counter and viewport resolution display
  (taking the resolution scale into account).
- Add more objects to the test scene and tweak environment settings.
  - ACES tonemapping is now used.
  - Debanding is now enabled, as this scene requires it to avoid visible
    banding.
  - Make the emissive box less bright to prevent MSAA and FXAA from
    being ineffective on it (due to Godot not supporting correct
    HDR antialiasing).
  - Remove unnecessary DirectionalLight3D, VoxelGI and ReflectionProbe.
Hugo Locurcio 3 år sedan
förälder
incheckning
48d2ec90fc

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 10
3d/graphics_settings/3d_scene.tscn


+ 22 - 15
3d/graphics_settings/README.md

@@ -1,21 +1,28 @@
-# 3D Settings Menu (Graphical Settings)
+# 3D Graphics Settings
+
+A demo showing an example of a graphics settings menu.
 
-A demo showing an example of a settings menu.
 Included settings are:
-	- UI Scaling;
-	- Render Quality;
-	- Filter;
-	- Vsync;
-	- Anti-Aliasing;
-	- Fullscreen;
-	- Screen-Space Reflections;
-	- Ambient Occlusion;
-	- Indirect lightning;
-	- Glow;
-	- Brightness;
-	- Contrast;
-	- Saturation.
 
+**Video settings:**
+
+- UI scale.
+- Resolution scale.
+- Display filter (bilinear or AMD FidelityFX Super Resolution 1.0).
+- Fullscreen.
+- V-Sync (traditional and adaptive).
+- Anti-aliasing (MSAA and FXAA).
+- Camera field of view.
+
+**Effect settings:**
+
+- Signed distance field global illumination (SDFGI).
+- Bloom (glow).
+- Screen-space ambient occlusion (SSAO).
+- Screen-Space reflections (SSR).
+- Screen-space indirect lighting (SSIL).
+- Volumetric fog.
+- Screen adjustments: brightness, contrast, saturation.
 
 Language: GDScript
 

+ 290 - 188
3d/graphics_settings/control.tscn

@@ -5,6 +5,20 @@
 [ext_resource type="Texture2D" uid="uid://c5ujmv8i0y1pn" path="res://icon.png" id="3_xpykm"]
 
 [sub_resource type="Environment" id="Environment_1f0b2"]
+background_mode = 1
+background_color = Color(0.6, 0.6, 0.6, 1)
+tonemap_mode = 3
+tonemap_white = 6.0
+sdfgi_cascades = 2
+sdfgi_min_cell_size = 0.1
+sdfgi_cascade0_distance = 6.4
+sdfgi_max_distance = 25.6
+sdfgi_y_scale = 0
+glow_intensity = 1.0
+glow_hdr_threshold = 0.5
+glow_hdr_scale = 0.2
+volumetric_fog_density = 0.0
+volumetric_fog_temporal_reprojection_amount = 0.95
 adjustment_enabled = true
 
 [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w3j8l"]
@@ -22,22 +36,11 @@ script = ExtResource( "1_gm54x" )
 [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
 environment = SubResource( "Environment_1f0b2" )
 
-[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-stretch = true
-
-[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
-handle_input_locally = false
-size = Vector2i(1024, 600)
-render_target_update_mode = 4
-
-[node name="Node3D" parent="SubViewportContainer/SubViewport" instance=ExtResource( "2_hsbu5" )]
+[node name="Node3D" parent="." instance=ExtResource( "2_hsbu5" )]
 
 [node name="SettingsMenu" type="PanelContainer" parent="."]
 anchor_bottom = 1.0
-offset_right = 372.0
-grow_horizontal = 2
+offset_right = 429.0
 grow_vertical = 2
 theme_override_styles/panel = SubResource( "StyleBoxFlat_w3j8l" )
 
@@ -45,25 +48,26 @@ theme_override_styles/panel = SubResource( "StyleBoxFlat_w3j8l" )
 clip_contents = false
 offset_left = 20.0
 offset_top = 50.0
-offset_right = 352.0
+offset_right = 409.0
 offset_bottom = 590.0
 
 [node name="VBoxContainer" type="VBoxContainer" parent="SettingsMenu/ScrollContainer"]
-offset_right = 324.0
-offset_bottom = 613.0
+offset_right = 358.0
+offset_bottom = 710.0
 size_flags_horizontal = 3
 size_flags_vertical = 3
 theme_override_constants/separation = 10
 
 [node name="UISection" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
-offset_right = 324.0
+offset_right = 381.0
 offset_bottom = 26.0
-text = "UI Section"
+theme_override_colors/font_color = Color(0.683425, 0.916893, 1, 1)
+text = "User Interface Settings"
 horizontal_alignment = 1
 
 [node name="GridContainer" type="GridContainer" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
 offset_top = 36.0
-offset_right = 324.0
+offset_right = 381.0
 offset_bottom = 69.0
 size_flags_horizontal = 3
 size_flags_vertical = 3
@@ -72,7 +76,7 @@ columns = 2
 
 [node name="UIScaleLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer"]
 offset_top = 3.0
-offset_right = 160.0
+offset_right = 188.0
 offset_bottom = 29.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
@@ -80,106 +84,120 @@ text = "UI Scale:"
 
 [node name="UIScaleOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_right = 324.0
+offset_left = 192.0
+offset_right = 380.0
 offset_bottom = 33.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 item_count = 5
 selected = 2
-popup/item_0/text = "Extra Small"
+popup/item_0/text = "Smaller (66%)"
 popup/item_0/id = 0
-popup/item_1/text = "Small"
+popup/item_1/text = "Small (80%)"
 popup/item_1/id = 1
-popup/item_2/text = "Normal"
+popup/item_2/text = "Medium (100%)"
 popup/item_2/id = 2
-popup/item_3/text = "Big"
+popup/item_3/text = "Large (133%)"
 popup/item_3/id = 3
-popup/item_4/text = "Extra Big"
+popup/item_4/text = "Larger (200%)"
 popup/item_4/id = 4
 
 [node name="ViewportSection" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
 offset_top = 79.0
-offset_right = 324.0
+offset_right = 381.0
 offset_bottom = 105.0
-text = "Quality Section"
+theme_override_colors/font_color = Color(0.683425, 0.916893, 1, 1)
+text = "Video Settings"
 horizontal_alignment = 1
 
 [node name="GridContainer2" type="GridContainer" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
 offset_top = 115.0
-offset_right = 324.0
-offset_bottom = 296.0
+offset_right = 381.0
+offset_bottom = 356.0
 columns = 2
 
 [node name="QualityLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
-offset_top = 3.0
-offset_right = 160.0
-offset_bottom = 29.0
+offset_right = 188.0
+offset_bottom = 26.0
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 16
+text = "Resolution Scale:"
+
+[node name="QualitySlider" type="HSlider" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_left = 192.0
+offset_right = 380.0
+offset_bottom = 26.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+min_value = 0.25
+max_value = 2.0
+step = 0.05
+value = 1.0
+
+[node name="FilterLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_top = 33.0
+offset_right = 188.0
+offset_bottom = 59.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Quality:"
+text = "Display Filter:"
 
-[node name="QualityOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+[node name="FilterOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_right = 324.0
-offset_bottom = 33.0
+offset_left = 192.0
+offset_top = 30.0
+offset_right = 380.0
+offset_bottom = 63.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 5
-selected = 2
-popup/item_0/text = "Extra Low"
+item_count = 2
+selected = 0
+popup/item_0/text = "Bilinear (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Low"
+popup/item_1/text = "FSR 1.0 (Fast)"
 popup/item_1/id = 1
-popup/item_2/text = "Medium"
-popup/item_2/id = 2
-popup/item_3/text = "High"
-popup/item_3/id = 3
-popup/item_4/text = "Extra High"
-popup/item_4/id = 4
 
-[node name="FilterLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
-offset_top = 40.0
-offset_right = 160.0
-offset_bottom = 66.0
+[node name="FullscreenLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_top = 70.0
+offset_right = 188.0
+offset_bottom = 96.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Filter:"
+text = "Fullscreen:"
 
-[node name="FilterOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+[node name="FullscreenOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_top = 37.0
-offset_right = 324.0
-offset_bottom = 70.0
+offset_left = 192.0
+offset_top = 67.0
+offset_right = 380.0
+offset_bottom = 100.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 item_count = 2
-selected = 1
+selected = 0
 popup/item_0/text = "Disabled"
 popup/item_0/id = 0
 popup/item_1/text = "Enabled"
 popup/item_1/id = 1
 
 [node name="VsyncLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
-offset_top = 77.0
-offset_right = 160.0
-offset_bottom = 103.0
+offset_top = 107.0
+offset_right = 188.0
+offset_bottom = 133.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Vsync:"
+text = "V-Sync:"
 
 [node name="VsyncOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_top = 74.0
-offset_right = 324.0
-offset_bottom = 107.0
+offset_left = 192.0
+offset_top = 104.0
+offset_right = 380.0
+offset_bottom = 137.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 item_count = 3
-selected = 2
+selected = 0
 popup/item_0/text = "Disabled"
 popup/item_0/id = 0
 popup/item_1/text = "Adaptive"
@@ -188,252 +206,313 @@ popup/item_2/text = "Enabled"
 popup/item_2/id = 2
 
 [node name="AALabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
-offset_top = 114.0
-offset_right = 160.0
-offset_bottom = 140.0
+offset_top = 144.0
+offset_right = 188.0
+offset_bottom = 170.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Anti-Aliasing:"
+text = "Anti-Aliasing (MSAA):"
 
 [node name="AAOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_top = 111.0
-offset_right = 324.0
-offset_bottom = 144.0
+offset_left = 192.0
+offset_top = 141.0
+offset_right = 380.0
+offset_bottom = 174.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 5
+item_count = 4
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "FXAA"
+popup/item_1/text = "2× (Average)"
 popup/item_1/id = 1
-popup/item_2/text = "2x"
+popup/item_2/text = "4× (Slow)"
 popup/item_2/id = 2
-popup/item_3/text = "4x"
+popup/item_3/text = "8× (Slower)"
 popup/item_3/id = 3
-popup/item_4/text = "8x"
-popup/item_4/id = 4
 
-[node name="FullscreenLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
-offset_top = 151.0
-offset_right = 160.0
-offset_bottom = 177.0
+[node name="FXAALabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_top = 181.0
+offset_right = 188.0
+offset_bottom = 207.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Fullscreen:"
+text = "Anti-Aliasing (FXAA):"
 
-[node name="FullscreenOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+[node name="FXAAOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_top = 148.0
-offset_right = 324.0
-offset_bottom = 181.0
+offset_left = 192.0
+offset_top = 178.0
+offset_right = 380.0
+offset_bottom = 211.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 item_count = 2
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Enabled"
+popup/item_1/text = "FXAA (Fast)"
 popup/item_1/id = 1
 
+[node name="FOVLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_top = 215.0
+offset_right = 188.0
+offset_bottom = 241.0
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 16
+text = "Field of View:"
+
+[node name="FOVSlider" type="HSlider" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+offset_left = 192.0
+offset_top = 215.0
+offset_right = 380.0
+offset_bottom = 241.0
+size_flags_horizontal = 3
+size_flags_vertical = 1
+min_value = 50.0
+step = 0.1
+value = 75.0
+
 [node name="EnvironmentSection" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
-offset_top = 306.0
-offset_right = 324.0
-offset_bottom = 332.0
-text = "Environment Section"
+offset_top = 366.0
+offset_right = 381.0
+offset_bottom = 392.0
+theme_override_colors/font_color = Color(0.683425, 0.916893, 1, 1)
+text = "Effect Settings"
 horizontal_alignment = 1
 
 [node name="GridContainer3" type="GridContainer" parent="SettingsMenu/ScrollContainer/VBoxContainer"]
-offset_top = 342.0
-offset_right = 324.0
-offset_bottom = 613.0
+offset_top = 402.0
+offset_right = 381.0
+offset_bottom = 710.0
 columns = 2
 
-[node name="SSReflectionsLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SDFGILabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 offset_top = 3.0
-offset_right = 160.0
+offset_right = 188.0
 offset_bottom = 29.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "SS Reflections:"
+text = "Global Illumination:"
 
-[node name="SSReflectionsOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SDFGIOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
-offset_right = 324.0
+offset_left = 192.0
+offset_right = 380.0
 offset_bottom = 33.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 4
+item_count = 3
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Low"
+popup/item_1/text = "Low (Average)"
 popup/item_1/id = 1
-popup/item_2/text = "Medium"
+popup/item_2/text = "High (Slow)"
 popup/item_2/id = 2
-popup/item_3/text = "High"
-popup/item_3/id = 3
 
-[node name="SSAOLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="GlowLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 offset_top = 40.0
-offset_right = 160.0
+offset_right = 188.0
 offset_bottom = 66.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "SSAO:"
+text = "Bloom:"
 
-[node name="SSAOOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="GlowOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
+offset_left = 192.0
 offset_top = 37.0
-offset_right = 324.0
+offset_right = 380.0
 offset_bottom = 70.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 2
+item_count = 3
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Enabled"
+popup/item_1/text = "Low (Fast)"
 popup/item_1/id = 1
+popup/item_2/text = "High (Average)"
+popup/item_2/id = 2
 
-[node name="SSILLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SSAOLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 offset_top = 77.0
-offset_right = 160.0
+offset_right = 188.0
 offset_bottom = 103.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "SSIL:"
+text = "Ambient Occlusion:"
 
-[node name="SSILOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SSAOOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
+offset_left = 192.0
 offset_top = 74.0
-offset_right = 324.0
+offset_right = 380.0
 offset_bottom = 107.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 2
+item_count = 5
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Enabled"
+popup/item_1/text = "Very Low (Fast)"
 popup/item_1/id = 1
+popup/item_2/text = "Low (Fast)"
+popup/item_2/id = 2
+popup/item_3/text = "Medium (Average)"
+popup/item_3/id = 3
+popup/item_4/text = "High (Slow)"
+popup/item_4/id = 4
 
-[node name="SDFGILabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_top = 114.0
-offset_right = 160.0
-offset_bottom = 140.0
+[node name="SSReflectionsLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+offset_top = 116.0
+offset_right = 188.0
+offset_bottom = 139.0
 size_flags_horizontal = 3
-theme_override_font_sizes/font_size = 16
-text = "SDFGI:"
+theme_override_font_sizes/font_size = 14
+text = "Screen-Space Reflections:"
 
-[node name="SDFGIOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SSReflectionsOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
+offset_left = 192.0
 offset_top = 111.0
-offset_right = 324.0
+offset_right = 380.0
 offset_bottom = 144.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 2
+item_count = 4
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Enabled"
+popup/item_1/text = "Low (Average)"
 popup/item_1/id = 1
+popup/item_2/text = "Medium (Slow)"
+popup/item_2/id = 2
+popup/item_3/text = "High (Slower)"
+popup/item_3/id = 3
 
-[node name="GlowLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SSILLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 offset_top = 151.0
-offset_right = 160.0
+offset_right = 188.0
 offset_bottom = 177.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-text = "Glow:"
+text = "Screen-Space Lighting:"
 
-[node name="GlowOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+[node name="SSILOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
 minimum_size = Vector2(100, 33)
-offset_left = 164.0
+offset_left = 192.0
 offset_top = 148.0
-offset_right = 324.0
+offset_right = 380.0
 offset_bottom = 181.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
-item_count = 2
+item_count = 5
 selected = 0
-popup/item_0/text = "Disabled"
+popup/item_0/text = "Disabled (Fastest)"
 popup/item_0/id = 0
-popup/item_1/text = "Enabled"
+popup/item_1/text = "Very Low (Fast)"
+popup/item_1/id = 1
+popup/item_2/text = "Low (Average)"
+popup/item_2/id = 2
+popup/item_3/text = "Medium (Slow)"
+popup/item_3/id = 3
+popup/item_4/text = "High (Slower)"
+popup/item_4/id = 4
+
+[node name="VolumetricFogLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+offset_top = 188.0
+offset_right = 188.0
+offset_bottom = 214.0
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 16
+text = "Volumetric Fog:"
+
+[node name="VolumetricFogOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
+minimum_size = Vector2(100, 33)
+offset_left = 192.0
+offset_top = 185.0
+offset_right = 380.0
+offset_bottom = 218.0
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 16
+item_count = 3
+selected = 0
+popup/item_0/text = "Disabled (Fastest)"
+popup/item_0/id = 0
+popup/item_1/text = "Low (Fast)"
 popup/item_1/id = 1
+popup/item_2/text = "High (Average)"
+popup/item_2/id = 2
 
 [node name="BrightnessLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_top = 185.0
-offset_right = 160.0
-offset_bottom = 211.0
+offset_top = 222.0
+offset_right = 188.0
+offset_bottom = 248.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 text = "Brightness:"
 
 [node name="BrightnessSlider" type="HSlider" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_left = 164.0
-offset_top = 185.0
-offset_right = 324.0
-offset_bottom = 211.0
+offset_left = 192.0
+offset_top = 222.0
+offset_right = 380.0
+offset_bottom = 248.0
 size_flags_horizontal = 3
 size_flags_vertical = 1
 min_value = 0.5
-max_value = 4.0
-step = 0.2
+max_value = 2.0
+step = 0.01
 value = 1.0
 
 [node name="ContrastLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_top = 215.0
-offset_right = 160.0
-offset_bottom = 241.0
+offset_top = 252.0
+offset_right = 188.0
+offset_bottom = 278.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 text = "Contrast:"
 
 [node name="ContrastSlider" type="HSlider" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_left = 164.0
-offset_top = 215.0
-offset_right = 324.0
-offset_bottom = 241.0
+offset_left = 192.0
+offset_top = 252.0
+offset_right = 380.0
+offset_bottom = 278.0
 size_flags_horizontal = 3
 size_flags_vertical = 1
 min_value = 0.5
-max_value = 4.0
-step = 0.2
+max_value = 2.0
+step = 0.01
 value = 1.0
 
 [node name="SaturationLabel" type="Label" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_top = 245.0
-offset_right = 160.0
-offset_bottom = 271.0
+offset_top = 282.0
+offset_right = 188.0
+offset_bottom = 308.0
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
 text = "Saturation:"
 
 [node name="SaturationSlider" type="HSlider" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3"]
-offset_left = 164.0
-offset_top = 245.0
-offset_right = 324.0
-offset_bottom = 271.0
+offset_left = 192.0
+offset_top = 282.0
+offset_right = 380.0
+offset_bottom = 308.0
 size_flags_horizontal = 3
 size_flags_vertical = 1
-min_value = 0.5
-max_value = 10.0
-step = 0.2
+min_value = 0.01
+max_value = 2.0
+step = 0.01
 value = 1.0
 
-[node name="HideShowButton" type="CheckButton" parent="."]
+[node name="HideShowButton" type="Button" parent="."]
 offset_right = 149.0
 offset_bottom = 31.0
+focus_mode = 0
 theme_override_font_sizes/font_size = 16
+toggle_mode = true
 button_pressed = true
 text = "Hide settings"
 
@@ -448,17 +527,40 @@ grow_horizontal = 0
 grow_vertical = 0
 texture = ExtResource( "3_xpykm" )
 
+[node name="FPSLabel" type="Label" parent="."]
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -56.0
+offset_top = 16.0
+offset_right = -16.0
+offset_bottom = 39.0
+grow_horizontal = 0
+horizontal_alignment = 2
+
+[node name="ResolutionLabel" type="Label" parent="."]
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -56.0
+offset_top = 48.0
+offset_right = -16.0
+offset_bottom = 71.0
+grow_horizontal = 0
+horizontal_alignment = 2
+
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer/UIScaleOptionButton" to="." method="_on_ui_scale_option_button_item_selected"]
-[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/QualityOptionButton" to="." method="_on_quality_option_button_item_selected"]
+[connection signal="value_changed" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/QualitySlider" to="." method="_on_quality_slider_value_changed"]
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/FilterOptionButton" to="." method="_on_filter_option_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/FullscreenOptionButton" to="." method="_on_fullscreen_option_button_item_selected"]
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/VsyncOptionButton" to="." method="_on_vsync_option_button_item_selected"]
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/AAOptionButton" to="." method="_on_aa_option_button_item_selected"]
-[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/FullscreenOptionButton" to="." method="_on_fullscreen_option_button_item_selected"]
-[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSReflectionsOptionButton" to="." method="_on_ss_reflections_option_button_item_selected"]
-[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSAOOptionButton" to="." method="_on_ssao_option_button_item_selected"]
-[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSILOptionButton" to="." method="_on_ssil_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/FXAAOptionButton" to="." method="_on_fxaa_option_button_item_selected"]
+[connection signal="value_changed" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2/FOVSlider" to="." method="_on_fov_slider_value_changed"]
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SDFGIOptionButton" to="." method="_on_sdfgi_option_button_item_selected"]
 [connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/GlowOptionButton" to="." method="_on_glow_option_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSAOOptionButton" to="." method="_on_ssao_option_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSReflectionsOptionButton" to="." method="_on_ss_reflections_option_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SSILOptionButton" to="." method="_on_ssil_option_button_item_selected"]
+[connection signal="item_selected" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/VolumetricFogOptionButton" to="." method="_on_volumetric_fog_option_button_item_selected"]
 [connection signal="value_changed" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/BrightnessSlider" to="." method="_on_brightness_slider_value_changed"]
 [connection signal="value_changed" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/ContrastSlider" to="." method="_on_contrast_slider_value_changed"]
 [connection signal="value_changed" from="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer3/SaturationSlider" to="." method="_on_saturation_slider_value_changed"]

+ 5 - 1
3d/graphics_settings/project.godot

@@ -10,7 +10,7 @@ config_version=5
 
 [application]
 
-config/name="3D Graphics Settings Demo"
+config/name="3D Graphics Settings"
 run/main_scene="res://control.tscn"
 config/icon="res://icon.png"
 config/features=PackedStringArray("4.0", "Vulkan Clustered")
@@ -19,3 +19,7 @@ config/features=PackedStringArray("4.0", "Vulkan Clustered")
 
 window/stretch/mode="canvas_items"
 window/stretch/aspect="expand"
+
+[rendering]
+
+anti_aliasing/quality/use_debanding=true

+ 0 - 0
3d/graphics_settings/screenshots/.gdignore


BIN
3d/graphics_settings/screenshots/interface.png


+ 0 - 33
3d/graphics_settings/screenshots/interface.png.import

@@ -1,33 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dv27oyy6q3nuj"
-path="res://.godot/imported/interface.png-d66f41b9831e9844ce0f39a7fbe98037.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://screenshots/interface.png"
-dest_files=["res://.godot/imported/interface.png-d66f41b9831e9844ce0f39a7fbe98037.ctex"]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/bptc_ldr=0
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/size_limit=0
-detect_3d/compress_to=1

+ 122 - 78
3d/graphics_settings/settings.gd

@@ -1,23 +1,39 @@
 extends Control
+
 # Window project settings:
-#  - Viewport size is set to 1920x1080
-#  - Stretch mode is set to "canvas_items" (in godot 3.x known as 2d)
-#  - Stretch aspect is set to "expand"
-@onready var sub_viewport := $SubViewportContainer/SubViewport
-@onready var sub_viewport_container := $SubViewportContainer
+#  - Stretch mode is set to `canvas_items` (`2d` in Godot 3.x)
+#  - Stretch aspect is set to `expand`
 @onready var world_environment := $WorldEnvironment
+@onready var camera := $Node3D/Camera3D
+@onready var fps_label := $FPSLabel
+@onready var resolution_label := $ResolutionLabel
 
-var current_quality := 2 # This is needed for when screen size changes
-var viewport_start_size := Vector2.ZERO
+# When the screen changes size, we need to update the 3D
+# viewport quality setting. If we don't do this, the viewport will take
+# the size from the main viewport.
+var viewport_start_size := Vector2(
+	ProjectSettings.get_setting(&"display/window/size/viewport_width"),
+	ProjectSettings.get_setting(&"display/window/size/viewport_height")
+)
 
 
 func _ready() -> void:
-	# When the screen changes size, we need to update the 3D
-	# viewport quality setting. If we don't do this, the viewport will take
-	# the size from the main viewport.
-	viewport_start_size.x = ProjectSettings.get_setting(&"display/window/size/viewport_width")
-	viewport_start_size.y = ProjectSettings.get_setting(&"display/window/size/viewport_height")
-	sub_viewport.connect(&"size_changed", self._on_quality_option_button_item_selected)
+	get_viewport().connect(&"size_changed", update_resolution_label)
+	update_resolution_label()
+
+	# Disable V-Sync to uncap framerate on supported platforms. This makes performance comparison
+	# easier on high-end machines that easily reach the monitor's refresh rate.
+	DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
+
+
+func _process(delta: float) -> void:
+	fps_label.text = "%d FPS (%.2f mspf)" % [Engine.get_frames_per_second(), 1000.0 / Engine.get_frames_per_second()]
+
+
+func update_resolution_label() -> void:
+	var viewport_render_size = get_viewport().size * get_viewport().scaling_3d_scale
+	resolution_label.text = "3D viewport resolution: %d × %d (%d%%)" \
+			% [viewport_render_size.x, viewport_render_size.y, round(get_viewport().scaling_3d_scale * 100)]
 
 
 func _on_HideShowButton_toggled(show_settings: bool) -> void:
@@ -34,50 +50,40 @@ func _on_HideShowButton_toggled(show_settings: bool) -> void:
 func _on_ui_scale_option_button_item_selected(index: int) -> void:
 	# For changing the UI, we take the viewport size, which we set in the project settings.
 	var new_size := viewport_start_size
-	if index == 0: # Extra small
-		new_size *= 1.50
-	elif index == 1: # Small
+	if index == 0: # Smaller (66%)
+		new_size *= 1.5
+	elif index == 1: # Small (80%)
 		new_size *= 1.25
-	elif index == 2: # Normal
+	elif index == 2: # Medium (100%)
 		new_size *= 1.0
-	elif index == 3: # Big
+	elif index == 3: # Large (133%)
 		new_size *= 0.75
-	elif index == 4: # Extra big
-		new_size *= 0.50
+	elif index == 4: # Larger (200%)
+		new_size *= 0.5
 	get_tree().root.set_content_scale_size(new_size)
 
 
-func _on_quality_option_button_item_selected(index: int = current_quality) -> void:
-	# Setting the overal screen quality can be done by changing
-	# the sub viewport size. When the screen size changed, this function
-	# will get called with the current_quality variable.
-	var new_size : Vector2
-	current_quality = index
-	if index == 0: # Extra low
-		new_size = get_viewport().size * 0.50
-	elif index == 1: # Low
-		new_size = get_viewport().size * 0.75
-	elif index == 2: # Medium
-		new_size = get_viewport().size
-	elif index == 3: # High
-		new_size = get_viewport().size * 1.25
-	elif index == 4: # Extra high
-		new_size = get_viewport().size * 1.50
-	sub_viewport.set_size(new_size)
+func _on_quality_slider_value_changed(value: float) -> void:
+	get_viewport().scaling_3d_scale = value
+	update_resolution_label()
 
 
 func _on_filter_option_button_item_selected(index: int) -> void:
-	# Texture filter setting. This can smooth out hard edges, but can also make
-	# the scene appear more blurry when quality is set to low.
-	if index == 0: # Disabled
-		sub_viewport_container.set_texture_filter(CanvasItem.TEXTURE_FILTER_NEAREST)
-	elif index == 1: # Enabled
-		sub_viewport_container.set_texture_filter(CanvasItem.TEXTURE_FILTER_LINEAR)
+	# Viewport scale mode setting.
+	if index == 0: # Bilinear (Fastest)
+		get_viewport().scaling_3d_mode = Viewport.SCALING_3D_MODE_BILINEAR
+	elif index == 1: # FSR 1.0 (Fast)
+		push_warning("FSR is currently not working. The shader is run, but no visual difference appears on screen.")
+		get_viewport().scaling_3d_mode = Viewport.SCALING_3D_MODE_FSR
 
 
 func _on_vsync_option_button_item_selected(index: int) -> void:
 	# Vsync is enabled by default.
-	# Vertical synchronization locks framerate and makes screen tearing not visible.
+	# Vertical synchronization locks framerate and makes screen tearing not visible at the cost of
+	# higher input latency and stuttering when the framerate target is not met.
+	# Adaptive V-Sync automatically disables V-Sync when the framerate target is not met, and enables
+	# V-Sync otherwise. This prevents suttering and reduces input latency when the framerate target
+	# is not met, at the cost of visible tearing.
 	if index == 0: # Disabled
 		DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
 	elif index == 1: # Adaptive
@@ -87,25 +93,22 @@ func _on_vsync_option_button_item_selected(index: int) -> void:
 
 
 func _on_aa_option_button_item_selected(index: int) -> void:
-	# Because this option is only for the 3D objects, we need to
-	# change this setting on the sub viewport.
-	# MSAA = Better quality at a higher performance cost.
-	# FXAA = Low performance cost but can appear blurry.
+	# Multi-sample anti-aliasing. High quality, but slow. It also does not smooth out the edges of
+	# transparent (alpha scissor) textures.
 	if index == 0: # Disabled
-		sub_viewport.set_msaa(Viewport.MSAA_DISABLED)
-		sub_viewport.set_screen_space_aa(Viewport.SCREEN_SPACE_AA_DISABLED)
-	elif index == 1: # FXAA
-		sub_viewport.set_msaa(Viewport.MSAA_DISABLED)
-		sub_viewport.set_screen_space_aa(Viewport.SCREEN_SPACE_AA_FXAA)
-	elif index == 2: # 2x
-		sub_viewport.set_msaa(Viewport.MSAA_2X)
-		sub_viewport.set_screen_space_aa(Viewport.SCREEN_SPACE_AA_DISABLED)
-	elif index == 3: # 4x
-		sub_viewport.set_msaa(Viewport.MSAA_4X)
-		sub_viewport.set_screen_space_aa(Viewport.SCREEN_SPACE_AA_DISABLED)
-	elif index == 4: # 8x
-		sub_viewport.set_msaa(Viewport.MSAA_8X)
-		sub_viewport.set_screen_space_aa(Viewport.SCREEN_SPACE_AA_DISABLED)
+		get_viewport().msaa = Viewport.MSAA_DISABLED
+	elif index == 1: # 2×
+		get_viewport().msaa = Viewport.MSAA_2X
+	elif index == 2: # 4×
+		get_viewport().msaa = Viewport.MSAA_4X
+	elif index == 3: # 8×
+		get_viewport().msaa = Viewport.MSAA_8X
+
+
+func _on_fxaa_option_button_item_selected(index: int) -> void:
+	# Fast approximate anti-aliasing. Much faster than FXAA (and works on alpha scissor edges),
+	# but blurs the whole scene rendering slightly.
+	get_viewport().screen_space_aa = index == 1
 
 
 func _on_fullscreen_option_button_item_selected(index: int) -> void:
@@ -118,6 +121,10 @@ func _on_fullscreen_option_button_item_selected(index: int) -> void:
 		get_tree().root.set_mode(Window.MODE_FULLSCREEN)
 
 
+func _on_fov_slider_value_changed(value: float) -> void:
+	camera.fov = value
+
+
 func _on_ss_reflections_option_button_item_selected(index: int) -> void:
 	# This is a setting that is attached to the environment.
 	# If your game requires you to change the environment,
@@ -132,19 +139,27 @@ func _on_ss_reflections_option_button_item_selected(index: int) -> void:
 		world_environment.environment.set_ssr_max_steps(32)
 	elif index == 3: # High
 		world_environment.environment.set_ssr_enabled(true)
-		world_environment.environment.set_ssr_max_steps(64)
-	# We set the fade in higher (default is 0.15) so it looks
-	# a better and cleaner.
-	world_environment.environment.set_ssr_fade_in(0.7)
+		world_environment.environment.set_ssr_max_steps(56)
+
 
 func _on_ssao_option_button_item_selected(index: int) -> void:
 	# This is a setting that is attached to the environment.
 	# If your game requires you to change the environment,
 	# then be sure to run this function again to set the settings correct.
 	if index == 0: # Disabled
-		world_environment.environment.set_ssao_enabled(false)
-	elif index == 1: # Enabled
-		world_environment.environment.set_ssao_enabled(true)
+		world_environment.environment.ssao_enabled = false
+	if index == 1: # Very Low
+		world_environment.environment.ssao_enabled = true
+		RenderingServer.environment_set_ssao_quality(RenderingServer.ENV_SSAO_QUALITY_VERY_LOW, true, 0.5, 2, 50, 300)
+	if index == 2: # Low
+		world_environment.environment.ssao_enabled = true
+		RenderingServer.environment_set_ssao_quality(RenderingServer.ENV_SSAO_QUALITY_VERY_LOW, true, 0.5, 2, 50, 300)
+	if index == 3: # Medium
+		world_environment.environment.ssao_enabled = true
+		RenderingServer.environment_set_ssao_quality(RenderingServer.ENV_SSAO_QUALITY_MEDIUM, true, 0.5, 2, 50, 300)
+	if index == 4: # High
+		world_environment.environment.ssao_enabled = true
+		RenderingServer.environment_set_ssao_quality(RenderingServer.ENV_SSAO_QUALITY_HIGH, true, 0.5, 2, 50, 300)
 
 
 func _on_ssil_option_button_item_selected(index: int) -> void:
@@ -152,9 +167,19 @@ func _on_ssil_option_button_item_selected(index: int) -> void:
 	# If your game requires you to change the environment,
 	# then be sure to run this function again to set the settings correct.
 	if index == 0: # Disabled
-		world_environment.environment.set_ssil_enabled(false)
-	elif index == 1: # Enabled
-		world_environment.environment.set_ssil_enabled(true)
+		world_environment.environment.ssil_enabled = false
+	if index == 1: # Very Low
+		world_environment.environment.ssil_enabled = true
+		RenderingServer.environment_set_ssil_quality(RenderingServer.ENV_SSIL_QUALITY_VERY_LOW, true, 0.5, 4, 50, 300)
+	if index == 2: # Low
+		world_environment.environment.ssil_enabled = true
+		RenderingServer.environment_set_ssil_quality(RenderingServer.ENV_SSIL_QUALITY_LOW, true, 0.5, 4, 50, 300)
+	if index == 3: # Medium
+		world_environment.environment.ssil_enabled = true
+		RenderingServer.environment_set_ssil_quality(RenderingServer.ENV_SSIL_QUALITY_MEDIUM, true, 0.5, 4, 50, 300)
+	if index == 4: # High
+		world_environment.environment.ssil_enabled = true
+		RenderingServer.environment_set_ssil_quality(RenderingServer.ENV_SSIL_QUALITY_HIGH, true, 0.5, 4, 50, 300)
 
 
 func _on_sdfgi_option_button_item_selected(index: int) -> void:
@@ -162,9 +187,13 @@ func _on_sdfgi_option_button_item_selected(index: int) -> void:
 	# If your game requires you to change the environment,
 	# then be sure to run this function again to set the settings correct.
 	if index == 0: # Disabled
-		world_environment.environment.set_sdfgi_enabled(false)
-	elif index == 1: # Enabled
-		world_environment.environment.set_sdfgi_enabled(true)
+		world_environment.environment.sdfgi_enabled = false
+	if index == 1: # Low
+		world_environment.environment.sdfgi_enabled = true
+		RenderingServer.gi_set_use_half_resolution(true)
+	if index == 2: # High
+		world_environment.environment.sdfgi_enabled = true
+		RenderingServer.gi_set_use_half_resolution(false)
 
 
 func _on_glow_option_button_item_selected(index: int) -> void:
@@ -172,9 +201,24 @@ func _on_glow_option_button_item_selected(index: int) -> void:
 	# If your game requires you to change the environment,
 	# then be sure to run this function again to set the settings correct.
 	if index == 0: # Disabled
-		world_environment.environment.set_glow_enabled(false)
-	elif index == 1: # Enabled
-		world_environment.environment.set_glow_enabled(true)
+		world_environment.environment.glow_enabled = false
+	if index == 1: # Low
+		world_environment.environment.glow_enabled = true
+		RenderingServer.environment_glow_set_use_high_quality(false)
+	if index == 2: # High
+		world_environment.environment.glow_enabled = true
+		RenderingServer.environment_glow_set_use_high_quality(true)
+
+
+func _on_volumetric_fog_option_button_item_selected(index: int) -> void:
+	if index == 0: # Disabled
+		world_environment.environment.volumetric_fog_enabled = false
+	if index == 1: # Low
+		world_environment.environment.volumetric_fog_enabled = true
+		RenderingServer.environment_set_volumetric_fog_filter_active(false)
+	if index == 2: # High
+		world_environment.environment.volumetric_fog_enabled = true
+		RenderingServer.environment_set_volumetric_fog_filter_active(true)
 
 
 func _on_brightness_slider_value_changed(value: float) -> void:

Vissa filer visades inte eftersom för många filer har ändrats