2
0
Эх сурвалжийг харах

Add a bloom quality setting

The default level is High, which is equivalent to the previous glow
setting used (bicubic upscaling enabled).

Low keeps glow enabled but disables bicubic upscaling.
Disabled disables glow entirely.

The setting is called "bloom" as it's a more common term in gaming,
even though the Environment parameter is called "glow".
Hugo Locurcio 5 жил өмнө
parent
commit
ab16a938f9
5 өөрчлөгдсөн 108 нэмэгдсэн , 19 устгасан
  1. 13 3
      level/level.gd
  2. 2 2
      main/main.gd
  3. 26 7
      menu/menu.gd
  4. 51 1
      menu/menu.tscn
  5. 16 6
      menu/settings.gd

+ 13 - 3
level/level.gd

@@ -15,7 +15,7 @@ func _ready():
 	else:
 	else:
 		$GIProbe.hide()
 		$GIProbe.hide()
 		$ReflectionProbes.show()
 		$ReflectionProbes.show()
-	
+
 	if Settings.aa_quality == Settings.AAQuality.AA_8X:
 	if Settings.aa_quality == Settings.AAQuality.AA_8X:
 		get_node("/root").msaa = Viewport.MSAA_8X
 		get_node("/root").msaa = Viewport.MSAA_8X
 	elif Settings.aa_quality == Settings.AAQuality.AA_4X:
 	elif Settings.aa_quality == Settings.AAQuality.AA_4X:
@@ -24,14 +24,24 @@ func _ready():
 		get_node("/root").msaa = Viewport.MSAA_2X
 		get_node("/root").msaa = Viewport.MSAA_2X
 	else:
 	else:
 		get_node("/root").msaa = Viewport.MSAA_DISABLED
 		get_node("/root").msaa = Viewport.MSAA_DISABLED
-	
+
 	if Settings.ssao_quality == Settings.SSAOQuality.HIGH:
 	if Settings.ssao_quality == Settings.SSAOQuality.HIGH:
 		world_environment.environment.ssao_quality = world_environment.environment.SSAO_QUALITY_HIGH
 		world_environment.environment.ssao_quality = world_environment.environment.SSAO_QUALITY_HIGH
 	elif Settings.ssao_quality == Settings.SSAOQuality.LOW:
 	elif Settings.ssao_quality == Settings.SSAOQuality.LOW:
 		world_environment.environment.ssao_quality = world_environment.environment.SSAO_QUALITY_LOW
 		world_environment.environment.ssao_quality = world_environment.environment.SSAO_QUALITY_LOW
 	else:
 	else:
 		world_environment.environment.ssao_enabled = false
 		world_environment.environment.ssao_enabled = false
-	
+
+	if Settings.bloom_quality == Settings.BloomQuality.HIGH:
+		world_environment.environment.glow_enabled = true
+		world_environment.environment.glow_bicubic_upscale = true
+	elif Settings.bloom_quality == Settings.BloomQuality.LOW:
+		world_environment.environment.glow_enabled = true
+		world_environment.environment.glow_bicubic_upscale = false
+	else:
+		world_environment.environment.glow_enabled = false
+		world_environment.environment.glow_bicubic_upscale = false
+
 	if Settings.resolution == Settings.Resolution.NATIVE:
 	if Settings.resolution == Settings.Resolution.NATIVE:
 		pass
 		pass
 	elif Settings.resolution == Settings.Resolution.RES_1080:
 	elif Settings.resolution == Settings.Resolution.RES_1080:

+ 2 - 2
main/main.gd

@@ -16,11 +16,11 @@ func replace_main_scene(resource):
 
 
 func change_scene(resource : Resource):
 func change_scene(resource : Resource):
 	var node = resource.instance()
 	var node = resource.instance()
-	
+
 	for child in get_children():
 	for child in get_children():
 		remove_child(child)
 		remove_child(child)
 		child.queue_free()
 		child.queue_free()
 	add_child(node)
 	add_child(node)
-	
+
 	node.connect("quit", self, "go_to_main_menu")
 	node.connect("quit", self, "go_to_main_menu")
 	node.connect("replace_main_scene", self, "replace_main_scene")
 	node.connect("replace_main_scene", self, "replace_main_scene")

+ 26 - 7
menu/menu.gd

@@ -34,6 +34,11 @@ onready var ssao_high = ssao_menu.get_node(@"High")
 onready var ssao_low = ssao_menu.get_node(@"Low")
 onready var ssao_low = ssao_menu.get_node(@"Low")
 onready var ssao_disabled = ssao_menu.get_node(@"Disabled")
 onready var ssao_disabled = ssao_menu.get_node(@"Disabled")
 
 
+onready var bloom_menu = settings_menu.get_node(@"Bloom")
+onready var bloom_high = bloom_menu.get_node(@"High")
+onready var bloom_low = bloom_menu.get_node(@"Low")
+onready var bloom_disabled = bloom_menu.get_node(@"Disabled")
+
 onready var resolution_menu = settings_menu.get_node(@"Resolution")
 onready var resolution_menu = settings_menu.get_node(@"Resolution")
 onready var resolution_native = resolution_menu.get_node(@"Native")
 onready var resolution_native = resolution_menu.get_node(@"Native")
 onready var resolution_1080 = resolution_menu.get_node(@"1080")
 onready var resolution_1080 = resolution_menu.get_node(@"1080")
@@ -99,7 +104,7 @@ func _on_settings_pressed():
 	main.hide()
 	main.hide()
 	settings_menu.show()
 	settings_menu.show()
 	settings_action_cancel.grab_focus()
 	settings_action_cancel.grab_focus()
-	
+
 	if Settings.gi_quality == Settings.GIQuality.HIGH:
 	if Settings.gi_quality == Settings.GIQuality.HIGH:
 		gi_high.pressed = true
 		gi_high.pressed = true
 	elif Settings.gi_quality == Settings.GIQuality.LOW:
 	elif Settings.gi_quality == Settings.GIQuality.LOW:
@@ -122,7 +127,14 @@ func _on_settings_pressed():
 		ssao_low.pressed = true
 		ssao_low.pressed = true
 	elif Settings.ssao_quality == Settings.SSAOQuality.DISABLED:
 	elif Settings.ssao_quality == Settings.SSAOQuality.DISABLED:
 		ssao_disabled.pressed = true
 		ssao_disabled.pressed = true
-		
+
+	if Settings.bloom_quality == Settings.BloomQuality.HIGH:
+		bloom_high.pressed = true
+	elif Settings.bloom_quality == Settings.BloomQuality.LOW:
+		bloom_low.pressed = true
+	elif Settings.bloom_quality == Settings.BloomQuality.DISABLED:
+		bloom_disabled.pressed = true
+
 	if Settings.resolution == Settings.Resolution.NATIVE:
 	if Settings.resolution == Settings.Resolution.NATIVE:
 		resolution_native.pressed = true
 		resolution_native.pressed = true
 	elif Settings.resolution == Settings.Resolution.RES_1080:
 	elif Settings.resolution == Settings.Resolution.RES_1080:
@@ -146,14 +158,14 @@ func _on_apply_pressed():
 	main.show()
 	main.show()
 	play_button.grab_focus()
 	play_button.grab_focus()
 	settings_menu.hide()
 	settings_menu.hide()
-	
+
 	if gi_high.pressed:
 	if gi_high.pressed:
 		Settings.gi_quality = Settings.GIQuality.HIGH
 		Settings.gi_quality = Settings.GIQuality.HIGH
 	elif gi_low.pressed:
 	elif gi_low.pressed:
 		Settings.gi_quality = Settings.GIQuality.LOW
 		Settings.gi_quality = Settings.GIQuality.LOW
 	elif gi_disabled.pressed:
 	elif gi_disabled.pressed:
 		Settings.gi_quality = Settings.GIQuality.DISABLED
 		Settings.gi_quality = Settings.GIQuality.DISABLED
-	
+
 	if aa_8x.pressed:
 	if aa_8x.pressed:
 		Settings.aa_quality = Settings.AAQuality.AA_8X
 		Settings.aa_quality = Settings.AAQuality.AA_8X
 	elif aa_4x.pressed:
 	elif aa_4x.pressed:
@@ -162,14 +174,21 @@ func _on_apply_pressed():
 		Settings.aa_quality = Settings.AAQuality.AA_2X
 		Settings.aa_quality = Settings.AAQuality.AA_2X
 	elif aa_disabled.pressed:
 	elif aa_disabled.pressed:
 		Settings.aa_quality = Settings.AAQuality.DISABLED
 		Settings.aa_quality = Settings.AAQuality.DISABLED
-	
+
 	if ssao_high.pressed:
 	if ssao_high.pressed:
 		Settings.ssao_quality = Settings.SSAOQuality.HIGH
 		Settings.ssao_quality = Settings.SSAOQuality.HIGH
 	elif ssao_low.pressed:
 	elif ssao_low.pressed:
 		Settings.ssao_quality = Settings.SSAOQuality.LOW
 		Settings.ssao_quality = Settings.SSAOQuality.LOW
 	elif ssao_disabled.pressed:
 	elif ssao_disabled.pressed:
 		Settings.ssao_quality = Settings.SSAOQuality.DISABLED
 		Settings.ssao_quality = Settings.SSAOQuality.DISABLED
-	
+
+	if bloom_high.pressed:
+		Settings.bloom_quality = Settings.BloomQuality.HIGH
+	elif bloom_low.pressed:
+		Settings.bloom_quality = Settings.BloomQuality.LOW
+	elif bloom_disabled.pressed:
+		Settings.bloom_quality = Settings.BloomQuality.DISABLED
+
 	if resolution_native.pressed:
 	if resolution_native.pressed:
 		Settings.resolution = Settings.Resolution.NATIVE
 		Settings.resolution = Settings.Resolution.NATIVE
 	elif resolution_1080.pressed:
 	elif resolution_1080.pressed:
@@ -180,7 +199,7 @@ func _on_apply_pressed():
 		Settings.resolution = Settings.Resolution.RES_540
 		Settings.resolution = Settings.Resolution.RES_540
 
 
 	Settings.fullscreen = fullscreen_yes.pressed
 	Settings.fullscreen = fullscreen_yes.pressed
-	
+
 	# Apply the setting directly
 	# Apply the setting directly
 	OS.window_fullscreen = Settings.fullscreen
 	OS.window_fullscreen = Settings.fullscreen
 
 

+ 51 - 1
menu/menu.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=37 format=2]
+[gd_scene load_steps=38 format=2]
 
 
 [ext_resource path="res://menu/menu.gd" type="Script" id=1]
 [ext_resource path="res://menu/menu.gd" type="Script" id=1]
 [ext_resource path="res://menu/experiment.hdr" type="Texture" id=2]
 [ext_resource path="res://menu/experiment.hdr" type="Texture" id=2]
@@ -91,6 +91,8 @@ Label/styles/normal = null
 
 
 [sub_resource type="ButtonGroup" id=12]
 [sub_resource type="ButtonGroup" id=12]
 
 
+[sub_resource type="ButtonGroup" id=19]
+
 [sub_resource type="ButtonGroup" id=13]
 [sub_resource type="ButtonGroup" id=13]
 
 
 [sub_resource type="ButtonGroup" id=14]
 [sub_resource type="ButtonGroup" id=14]
@@ -391,6 +393,54 @@ toggle_mode = true
 group = SubResource( 12 )
 group = SubResource( 12 )
 text = "Disabled"
 text = "Disabled"
 
 
+[node name="Bloom" type="HBoxContainer" parent="UI/Settings"]
+margin_top = 174.0
+margin_right = 1342.0
+margin_bottom = 231.0
+custom_constants/separation = 30
+__meta__ = {
+"_edit_group_": true
+}
+
+[node name="Label" type="Label" parent="UI/Settings/Bloom"]
+margin_right = 400.0
+margin_bottom = 57.0
+rect_min_size = Vector2( 400, 0 )
+size_flags_vertical = 1
+custom_colors/font_color = Color( 1, 1, 1, 1 )
+text = "Bloom:"
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="High" type="Button" parent="UI/Settings/Bloom"]
+margin_left = 430.0
+margin_right = 714.0
+margin_bottom = 57.0
+size_flags_horizontal = 3
+toggle_mode = true
+pressed = true
+group = SubResource( 19 )
+text = "High"
+
+[node name="Low" type="Button" parent="UI/Settings/Bloom"]
+margin_left = 744.0
+margin_right = 1028.0
+margin_bottom = 57.0
+size_flags_horizontal = 3
+toggle_mode = true
+group = SubResource( 19 )
+text = "Low"
+
+[node name="Disabled" type="Button" parent="UI/Settings/Bloom"]
+margin_left = 1058.0
+margin_right = 1342.0
+margin_bottom = 57.0
+size_flags_horizontal = 3
+toggle_mode = true
+group = SubResource( 19 )
+text = "Disabled"
+
 [node name="Resolution" type="HBoxContainer" parent="UI/Settings"]
 [node name="Resolution" type="HBoxContainer" parent="UI/Settings"]
 margin_top = 261.0
 margin_top = 261.0
 margin_right = 1342.0
 margin_right = 1342.0

+ 16 - 6
menu/settings.gd

@@ -19,6 +19,12 @@ enum SSAOQuality {
 	HIGH = 2
 	HIGH = 2
 }
 }
 
 
+enum BloomQuality {
+	DISABLED = 0
+	LOW = 1
+	HIGH = 2
+}
+
 enum Resolution {
 enum Resolution {
 	RES_540 = 0
 	RES_540 = 0
 	RES_720 = 1
 	RES_720 = 1
@@ -29,6 +35,7 @@ enum Resolution {
 var gi_quality = GIQuality.LOW
 var gi_quality = GIQuality.LOW
 var aa_quality = AAQuality.AA_2X
 var aa_quality = AAQuality.AA_2X
 var ssao_quality = SSAOQuality.DISABLED
 var ssao_quality = SSAOQuality.DISABLED
+var bloom_quality = BloomQuality.HIGH
 var resolution = Resolution.NATIVE
 var resolution = Resolution.NATIVE
 var fullscreen = true
 var fullscreen = true
 
 
@@ -48,20 +55,23 @@ func load_settings():
 	if error:
 	if error:
 		print("There are no settings to load.")
 		print("There are no settings to load.")
 		return
 		return
-	
+
 	var d = parse_json(f.get_as_text())
 	var d = parse_json(f.get_as_text())
 	if typeof(d) != TYPE_DICTIONARY:
 	if typeof(d) != TYPE_DICTIONARY:
 		return
 		return
-	
+
 	if "gi" in d:
 	if "gi" in d:
 		gi_quality = int(d.gi)
 		gi_quality = int(d.gi)
-	
+
 	if "aa" in d:
 	if "aa" in d:
 		aa_quality = int(d.aa)
 		aa_quality = int(d.aa)
-	
+
 	if "ssao" in d:
 	if "ssao" in d:
 		ssao_quality = int(d.ssao)
 		ssao_quality = int(d.ssao)
-	
+
+	if "bloom" in d:
+		bloom_quality = int(d.bloom)
+
 	if "resolution" in d:
 	if "resolution" in d:
 		resolution = int(d.resolution)
 		resolution = int(d.resolution)
 
 
@@ -74,5 +84,5 @@ func save_settings():
 	var error = f.open("user://settings.json", File.WRITE)
 	var error = f.open("user://settings.json", File.WRITE)
 	assert(not error)
 	assert(not error)
 
 
-	var d = { "gi":gi_quality, "aa":aa_quality, "ssao":ssao_quality, "resolution":resolution, "fullscreen":fullscreen }
+	var d = { "gi":gi_quality, "aa":aa_quality, "ssao":ssao_quality, "bloom":bloom_quality, "resolution":resolution, "fullscreen":fullscreen }
 	f.store_line(to_json(d))
 	f.store_line(to_json(d))