Browse Source

Update 3D Graphics Settings demo for 4.0 (#883)

- Fix scripts for Godot 4.0.stable.
- Tweak Low preset (enable FXAA, disable MSAA to improve performance).
- Colorize FPS counter depending on framerate
  (red = bad, yellow = OK, green = good, cyan = great).
- Use first-class Signal syntax to reduce reliance on strings.
Hugo Locurcio 2 years ago
parent
commit
2aff1c69a3

+ 7 - 1
3d/graphics_settings/control.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=3 uid="uid://ye05btta37gb"]
+[gd_scene load_steps=6 format=3 uid="uid://ye05btta37gb"]
 
 [ext_resource type="Script" path="res://settings.gd" id="1_gm54x"]
 [ext_resource type="PackedScene" uid="uid://cbdt8lmycl8pc" path="res://3d_scene.tscn" id="2_hsbu5"]
@@ -27,6 +27,10 @@ content_margin_right = 20.0
 content_margin_bottom = 10.0
 bg_color = Color(0.231373, 0.231373, 0.231373, 0.768627)
 
+[sub_resource type="Gradient" id="Gradient_ehij4"]
+offsets = PackedFloat32Array(0, 0.333, 0.667, 1)
+colors = PackedColorArray(1, 0.17, 0.17, 1, 1, 0.816, 0.08, 1, 0.644, 1, 0.11, 1, 0.14, 0.885333, 1, 1)
+
 [node name="Control" type="Control"]
 layout_mode = 3
 anchors_preset = 15
@@ -273,6 +277,7 @@ theme_override_font_sizes/font_size = 16
 text = "Anti-Aliasing (FXAA):"
 
 [node name="FXAAOptionButton" type="OptionButton" parent="SettingsMenu/ScrollContainer/VBoxContainer/GridContainer2"]
+unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 3
 theme_override_font_sizes/font_size = 16
@@ -598,6 +603,7 @@ grow_horizontal = 0
 theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
 theme_override_constants/outline_size = 4
 horizontal_alignment = 2
+metadata/gradient = SubResource("Gradient_ehij4")
 
 [node name="ResolutionLabel" type="Label" parent="."]
 layout_mode = 1

+ 2 - 0
3d/graphics_settings/polyhaven/dutch_ship_medium_1k.gltf.import

@@ -26,5 +26,7 @@ skins/use_named_skins=true
 animation/import=true
 animation/fps=30
 animation/trimming=false
+animation/remove_immutable_tracks=true
 import_script/path=""
 _subresources={}
+gltf/embedded_image_handling=1

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://dhmrl40t2na37"
 path.s3tc="res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_hull_arm_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_hull_arm_1k.jpg-1bcb2be1a58190217bafabbba5a96cb5.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://88gdijjjr6p4"
 path.s3tc="res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_hull_diff_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_hull_diff_1k.jpg-d22f57383d3437ac6151a5dc155d1b44.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://c22y3qjf8th8a"
 path.s3tc="res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_hull_nor_gl_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_hull_nor_gl_1k.jpg-f0fc1f178ac5ff99bdf2aae06e0701f1.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=1
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://15se8alkcbla"
 path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_rigging_arm_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_rigging_arm_1k.jpg-6de8e054b6e80b00009332eaf9eafbeb.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://c0yhj4wwbvgvu"
 path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_rigging_diff_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_rigging_diff_1k.jpg-b381c8dba5fcad22696086becdc354b0.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://csbfe6x0jyswi"
 path.s3tc="res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_rigging_nor_gl_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_rigging_nor_gl_1k.jpg-26a255f6574d49990ad4162b06c015da.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=1
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://70shlrquand4"
 path.s3tc="res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_sails_arm_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_sails_arm_1k.jpg-6cdf6ae207b4bb5365f0df8bebf34d57.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://dde6ofm1jcwiv"
 path.s3tc="res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_sails_diff_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_sails_diff_1k.jpg-501769b3e14d33a1ff05b4b14f45b65b.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
 mipmaps/generate=true

+ 3 - 4
3d/graphics_settings/polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg.import

@@ -4,23 +4,22 @@ importer="texture"
 type="CompressedTexture2D"
 uid="uid://doc73t5xbl8to"
 path.s3tc="res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.s3tc.ctex"
-path.etc2="res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc2"],
+"imported_formats": ["s3tc_bptc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://polyhaven/textures/dutch_ship_medium_sails_nor_gl_1k.jpg"
-dest_files=["res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.s3tc.ctex", "res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.etc2.ctex"]
+dest_files=["res://.godot/imported/dutch_ship_medium_sails_nor_gl_1k.jpg-8bd26cb4511a8400046da66b710b48cf.s3tc.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=1
 compress/channel_pack=0
 mipmaps/generate=true

+ 32 - 17
3d/graphics_settings/settings.gd

@@ -9,6 +9,8 @@ extends Control
 @onready var fps_label := $FPSLabel
 @onready var resolution_label := $ResolutionLabel
 
+var counter := 0.0
+
 # 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.
@@ -28,7 +30,13 @@ func _ready() -> void:
 
 
 func _process(delta: float) -> void:
+	counter += delta
+	# Hide FPS label until it's initially updated by the engine (this can take up to 1 second).
+	fps_label.visible = counter >= 1.0
 	fps_label.text = "%d FPS (%.2f mspf)" % [Engine.get_frames_per_second(), 1000.0 / Engine.get_frames_per_second()]
+	# Color FPS counter depending on framerate.
+	# The Gradient resource is stored as metadata within the FPSLabel node (accessible in the inspector).
+	fps_label.modulate = fps_label.get_meta("gradient").sample(remap(Engine.get_frames_per_second(), 0, 180, 0.0, 1.0))
 
 
 func update_resolution_label() -> void:
@@ -84,8 +92,11 @@ func _on_filter_option_button_item_selected(index: int) -> void:
 		%FSRSharpnessSlider.visible = true
 
 
-func _on_fsr_sharpness_slider_value_changed(value):
-	get_viewport().fsr_sharpness = value
+func _on_fsr_sharpness_slider_value_changed(value: float) -> void:
+	# Lower FSR sharpness values result in a sharper image.
+	# Invert the slider so that higher values result in a sharper image,
+	# which is generally expected from users.
+	get_viewport().fsr_sharpness = 2.0 - value
 
 
 func _on_vsync_option_button_item_selected(index: int) -> void:
@@ -125,7 +136,7 @@ func _on_taa_option_button_item_selected(index: int) -> void:
 func _on_fxaa_option_button_item_selected(index: int) -> void:
 	# Fast approximate anti-aliasing. Much faster than MSAA (and works on alpha scissor edges),
 	# but blurs the whole scene rendering slightly.
-	get_viewport().screen_space_aa = index == 1
+	get_viewport().screen_space_aa = int(index == 1) as Viewport.ScreenSpaceAA
 
 
 func _on_fullscreen_option_button_item_selected(index: int) -> void:
@@ -292,10 +303,8 @@ func _on_glow_option_button_item_selected(index: int) -> void:
 		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:
@@ -338,6 +347,7 @@ func _on_saturation_slider_value_changed(value: float) -> void:
 func _on_very_low_preset_pressed() -> void:
 	%TAAOptionButton.selected = 0
 	%MSAAOptionButton.selected = 0
+	%FXAAOptionButton.selected = 0
 	%ShadowSizeOptionButton.selected = 0
 	%ShadowFilterOptionButton.selected = 0
 	%MeshLODOptionButton.selected = 0
@@ -351,7 +361,8 @@ func _on_very_low_preset_pressed() -> void:
 
 func _on_low_preset_pressed() -> void:
 	%TAAOptionButton.selected = 0
-	%MSAAOptionButton.selected = 1
+	%MSAAOptionButton.selected = 0
+	%FXAAOptionButton.selected = 1
 	%ShadowSizeOptionButton.selected = 1
 	%ShadowFilterOptionButton.selected = 1
 	%MeshLODOptionButton.selected = 1
@@ -367,6 +378,7 @@ func _on_low_preset_pressed() -> void:
 func _on_medium_preset_pressed() -> void:
 	%TAAOptionButton.selected = 1
 	%MSAAOptionButton.selected = 0
+	%FXAAOptionButton.selected = 0
 	%ShadowSizeOptionButton.selected = 2
 	%ShadowFilterOptionButton.selected = 2
 	%MeshLODOptionButton.selected = 1
@@ -382,6 +394,7 @@ func _on_medium_preset_pressed() -> void:
 func _on_high_preset_pressed() -> void:
 	%TAAOptionButton.selected = 1
 	%MSAAOptionButton.selected = 0
+	%FXAAOptionButton.selected = 0
 	%ShadowSizeOptionButton.selected = 3
 	%ShadowFilterOptionButton.selected = 3
 	%MeshLODOptionButton.selected = 2
@@ -397,6 +410,7 @@ func _on_high_preset_pressed() -> void:
 func _on_ultra_preset_pressed() -> void:
 	%TAAOptionButton.selected = 1
 	%MSAAOptionButton.selected = 1
+	%FXAAOptionButton.selected = 0
 	%ShadowSizeOptionButton.selected = 4
 	%ShadowFilterOptionButton.selected = 4
 	%MeshLODOptionButton.selected = 3
@@ -411,14 +425,15 @@ func _on_ultra_preset_pressed() -> void:
 
 func update_preset() -> void:
 	# Simulate options being manually selected to run their respective update code.
-	%TAAOptionButton.emit_signal("item_selected", %TAAOptionButton.selected)
-	%MSAAOptionButton.emit_signal("item_selected", %MSAAOptionButton.selected)
-	%ShadowSizeOptionButton.emit_signal("item_selected", %ShadowSizeOptionButton.selected)
-	%ShadowFilterOptionButton.emit_signal("item_selected", %ShadowFilterOptionButton.selected)
-	%MeshLODOptionButton.emit_signal("item_selected", %MeshLODOptionButton.selected)
-	%SDFGIOptionButton.emit_signal("item_selected", %SDFGIOptionButton.selected)
-	%GlowOptionButton.emit_signal("item_selected", %GlowOptionButton.selected)
-	%SSAOOptionButton.emit_signal("item_selected", %SSAOOptionButton.selected)
-	%SSReflectionsOptionButton.emit_signal("item_selected", %SSReflectionsOptionButton.selected)
-	%SSILOptionButton.emit_signal("item_selected", %SSILOptionButton.selected)
-	%VolumetricFogOptionButton.emit_signal("item_selected", %VolumetricFogOptionButton.selected)
+	%TAAOptionButton.item_selected.emit(%TAAOptionButton.selected)
+	%MSAAOptionButton.item_selected.emit(%MSAAOptionButton.selected)
+	%FXAAOptionButton.item_selected.emit(%FXAAOptionButton.selected)
+	%ShadowSizeOptionButton.item_selected.emit(%ShadowSizeOptionButton.selected)
+	%ShadowFilterOptionButton.item_selected.emit(%ShadowFilterOptionButton.selected)
+	%MeshLODOptionButton.item_selected.emit(%MeshLODOptionButton.selected)
+	%SDFGIOptionButton.item_selected.emit(%SDFGIOptionButton.selected)
+	%GlowOptionButton.item_selected.emit(%GlowOptionButton.selected)
+	%SSAOOptionButton.item_selected.emit(%SSAOOptionButton.selected)
+	%SSReflectionsOptionButton.item_selected.emit(%SSReflectionsOptionButton.selected)
+	%SSILOptionButton.item_selected.emit(%SSILOptionButton.selected)
+	%VolumetricFogOptionButton.item_selected.emit(%VolumetricFogOptionButton.selected)