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.
This commit is contained in:
Hugo Locurcio
2023-05-05 15:46:00 +02:00
committed by GitHub
parent 65c8d77cf4
commit 2aff1c69a3
12 changed files with 68 additions and 54 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)