Skip to content

Commit

Permalink
Add MetalFX Spatial and Temporal scaling modes on macOS and iOS
Browse files Browse the repository at this point in the history
This is only available on platforms where the Metal rendering
driver is used.

MetalFX can perform better than FSR1/FSR2 and look more stable,
but it goes for a softer look which can give it a lower perceived
resolution.
  • Loading branch information
Calinou committed Dec 23, 2024
1 parent 3a92da2 commit de079eb
Show file tree
Hide file tree
Showing 45 changed files with 85 additions and 6 deletions.
1 change: 1 addition & 0 deletions door/door.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://br72vxyn64gyu
1 change: 1 addition & 0 deletions door/model/door.dae.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="DoorModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions effects_shared/BlastMesh.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/laser/BarrelSmoke.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/laser/LaserShader.gdshader.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://b882lqxenu3nf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://ccj8k6fqeyeb4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://tolcywtohhug
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/laser/impact_effect/blast.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://c8lbt6tarrbg4
1 change: 1 addition & 0 deletions enemies/red_robot/laser/smoke.gdshader.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://b25ibj6bxf8q6
2 changes: 1 addition & 1 deletion enemies/red_robot/laser/smoke.tres
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_resource type="ShaderMaterial" load_steps=5 format=3 uid="uid://bhf6kwdlc7f5h"]

[ext_resource type="Shader" path="res://enemies/red_robot/laser/smoke.gdshader" id="1_j0r3f"]
[ext_resource type="Shader" uid="uid://b25ibj6bxf8q6" path="res://enemies/red_robot/laser/smoke.gdshader" id="1_j0r3f"]
[ext_resource type="Texture2D" uid="uid://i5ll5xqsm55y" path="res://enemies/red_robot/laser/BarrelSmokeTexture.png" id="2"]

[sub_resource type="FastNoiseLite" id="29"]
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/model/red_robot.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/parts/part.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://deqj128fqtw6g
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://dna155554wont
1 change: 1 addition & 0 deletions enemies/red_robot/parts/part_head.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/parts/part_shield.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions enemies/red_robot/parts/ray.gdshader.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cpwguvft8s8tl
1 change: 1 addition & 0 deletions enemies/red_robot/parts/ray.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://dpdgb6ekiyexf
1 change: 1 addition & 0 deletions enemies/red_robot/red_robot.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://ihw03fdo0t2p
1 change: 1 addition & 0 deletions enemies/red_robot/smoke.gdshader.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bs15gshimi8uk
1 change: 1 addition & 0 deletions level/debug.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://dfqmhjkivsc4p
1 change: 1 addition & 0 deletions level/forklift/flying_forklift.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bqbx6m8pp61ut
1 change: 1 addition & 0 deletions level/forklift/flying_forklift.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="FlyingForkliftModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions level/geometry/models/core.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="CoreModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions level/geometry/models/lights.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="LightsModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions level/geometry/models/props.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="PropsModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions level/geometry/models/structure.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="StructureModel"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions level/level.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://d1785c3ifnalw
1 change: 1 addition & 0 deletions level/textures/structure/Core/CoreOutLight.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions main/main.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bdqkvnclm506u
2 changes: 1 addition & 1 deletion main/main.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dmp13e1xswsm0"]

[ext_resource type="Script" path="res://main/main.gd" id="1"]
[ext_resource type="Script" uid="uid://bdqkvnclm506u" path="res://main/main.gd" id="1"]

[node name="main" type="Node"]
script = ExtResource("1")
1 change: 1 addition & 0 deletions menu/font/PT_Sans-Web-Bold.ttf.import
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Expand Down
24 changes: 23 additions & 1 deletion menu/menu.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ signal quit # Useless, but needed as there is no clean way to check if a node ex

var peer : MultiplayerPeer = OfflineMultiplayerPeer.new()

var metalfx_supported: bool = ProjectSettings.get_setting_with_override("rendering/rendering_device/driver") == "metal"

@onready var world_environment = $WorldEnvironment

@onready var ui = $UI
Expand Down Expand Up @@ -54,7 +56,9 @@ var peer : MultiplayerPeer = OfflineMultiplayerPeer.new()
@onready var scale_filter_menu = settings_menu.get_node("ScaleFilter")
@onready var scale_filter_bilinear = scale_filter_menu.get_node("Bilinear")
@onready var scale_filter_fsr1 = scale_filter_menu.get_node("FSR1")
@onready var scale_filter_metalfx_spatial = scale_filter_menu.get_node("MetalFXSpatial")
@onready var scale_filter_fsr2 = scale_filter_menu.get_node("FSR2")
@onready var scale_filter_metalfx_temporal = scale_filter_menu.get_node("MetalFXTemporal")

@onready var taa_menu = settings_menu.get_node("TAA")
@onready var taa_disabled = taa_menu.get_node("Disabled")
Expand Down Expand Up @@ -114,6 +118,11 @@ func _ready():
_on_host_pressed.call_deferred()

play_button.grab_focus()

if not metalfx_supported:
scale_filter_metalfx_spatial.hide()
scale_filter_metalfx_temporal.hide()

for menu in [
display_mode_menu, vsync_menu, max_fps_menu, resolution_scale_menu, scale_filter_menu,
taa_menu, msaa_menu, fxaa_menu, shadow_mapping_menu, gi_type_menu, gi_quality_menu,
Expand Down Expand Up @@ -210,8 +219,17 @@ func _on_settings_pressed():
scale_filter_bilinear.button_pressed = true
elif Settings.config_file.get_value("video", "scale_filter") == Viewport.SCALING_3D_MODE_FSR:
scale_filter_fsr1.button_pressed = true
else:
elif Settings.config_file.get_value("video", "scale_filter") == Viewport.SCALING_3D_MODE_FSR2:
scale_filter_fsr2.button_pressed = true
elif Settings.config_file.get_value("video", "scale_filter") == Viewport.SCALING_3D_MODE_METALFX_SPATIAL:
scale_filter_metalfx_spatial.button_pressed = true
elif Settings.config_file.get_value("video", "scale_filter") == Viewport.SCALING_3D_MODE_METALFX_TEMPORAL:
scale_filter_metalfx_temporal.button_pressed = true
else:
if metalfx_supported:
scale_filter_metalfx_temporal.button_pressed = true
else:
scale_filter_fsr2.button_pressed = true

if Settings.config_file.get_value("rendering", "gi_type") == Settings.GIType.LIGHTMAP_GI:
gi_lightmapgi.button_pressed = true
Expand Down Expand Up @@ -337,6 +355,10 @@ func _on_apply_pressed():
Settings.config_file.set_value("video", "scale_filter", Viewport.SCALING_3D_MODE_FSR)
elif scale_filter_fsr2.button_pressed:
Settings.config_file.set_value("video", "scale_filter", Viewport.SCALING_3D_MODE_FSR2)
elif scale_filter_metalfx_spatial.button_pressed:
Settings.config_file.set_value("video", "scale_filter", Viewport.SCALING_3D_MODE_METALFX_SPATIAL)
elif scale_filter_metalfx_temporal.button_pressed:
Settings.config_file.set_value("video", "scale_filter", Viewport.SCALING_3D_MODE_METALFX_TEMPORAL)

if gi_lightmapgi.button_pressed:
Settings.config_file.set_value("rendering", "gi_type", Settings.GIType.LIGHTMAP_GI)
Expand Down
1 change: 1 addition & 0 deletions menu/menu.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://d01c0jp7txxst
16 changes: 15 additions & 1 deletion menu/menu.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=25 format=3 uid="uid://c80nbk7u633n6"]

[ext_resource type="Script" path="res://menu/menu.gd" id="1"]
[ext_resource type="Script" uid="uid://d01c0jp7txxst" path="res://menu/menu.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://gnsovrtic7g4" path="res://menu/experiment.hdr" id="2_bpuaq"]
[ext_resource type="PackedScene" uid="uid://div25sd40yx1d" path="res://player/model/player.glb" id="3"]
[ext_resource type="AudioStream" uid="uid://bfq26n228ipa" path="res://menu/menu_intro_music.ogg" id="5"]
Expand Down Expand Up @@ -471,13 +471,27 @@ size_flags_horizontal = 3
toggle_mode = true
text = "AMD FSR 1.0"

[node name="MetalFXSpatial" type="Button" parent="UI/Settings/ScaleFilter"]
modulate = Color(1, 1, 0.313726, 1)
layout_mode = 2
size_flags_horizontal = 3
toggle_mode = true
text = "MetalFX Spatial"

[node name="FSR2" type="Button" parent="UI/Settings/ScaleFilter"]
modulate = Color(1, 0.627451, 0.25098, 1)
layout_mode = 2
size_flags_horizontal = 3
toggle_mode = true
text = "AMD FSR 2.2"

[node name="MetalFXTemporal" type="Button" parent="UI/Settings/ScaleFilter"]
modulate = Color(1, 0.627451, 0.25098, 1)
layout_mode = 2
size_flags_horizontal = 3
toggle_mode = true
text = "MetalFX Temporal"

[node name="HSeparator2" type="HSeparator" parent="UI/Settings"]
layout_mode = 2

Expand Down
7 changes: 5 additions & 2 deletions menu/settings.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ enum GIQuality {

const CONFIG_FILE_PATH = "user://settings.ini"

const DEFAULTS = {
# MetalFX is only supported when using the Metal rendering driver.
var metalfx_supported: bool = ProjectSettings.get_setting_with_override("rendering/rendering_device/driver") == "metal"

var DEFAULTS := {
video = {
display_mode = Window.MODE_EXCLUSIVE_FULLSCREEN,
vsync = DisplayServer.VSYNC_ENABLED,
max_fps = 0,
resolution_scale = 1.0,
scale_filter = Viewport.SCALING_3D_MODE_FSR2,
scale_filter = Viewport.SCALING_3D_MODE_METALFX_TEMPORAL if metalfx_supported else Viewport.SCALING_3D_MODE_FSR2,
},
rendering = {
taa = false,
Expand Down
1 change: 1 addition & 0 deletions menu/settings.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cqgjfsdrdi32u
1 change: 1 addition & 0 deletions player/bullet/bullet.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cxyytsgiom5t0
1 change: 1 addition & 0 deletions player/camera_noise_shake_effect.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bjsdb6te5tqtx
1 change: 1 addition & 0 deletions player/model/muzzle_flash_particle_mesh.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions player/model/player.glb.import
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
Expand Down
1 change: 1 addition & 0 deletions player/player.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bdh4ypltx0nov
1 change: 1 addition & 0 deletions player/player_input.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bb1yx5mmt6u7s

0 comments on commit de079eb

Please sign in to comment.