Browse Source

Improve 3D global illumination demo

- Readd LightmapGI example.
- Allow toggling between the Once and Always update modes for the
  ReflectionProbe.
- Add a Decal node to act as a blob shadow for dynamic objects.
- Halve SSAO intensity for a better apperance in the demo's flat,
  bright surfaces.
- Halve ambient light sky contribution when using the disabled
  or lightmap-based GI modes. This prevents the level's shaded areas
  from looking too bright and blue (with lightmaps, this change only
  affects dynamic objects.)
- Enable FXAA and debanding for a better appearance.
Hugo Locurcio 2 years ago
parent
commit
c22732e4cc

+ 5 - 1
3d/global_illumination/README.md

@@ -1,7 +1,7 @@
 # Global Illumination
 
 This demo showcases Godot's global illumination systems:
-VoxelGI, SDFGI, ReflectionProbe and screen-space effects like SSAO and SSIL.
+LightmapGI, VoxelGI, SDFGI, ReflectionProbe and screen-space effects like SSAO and SSIL.
 
 Use the mouse to look around, <kbd>W</kbd>/<kbd>A</kbd>/<kbd>S</kbd>/<kbd>D</kbd>
 or arrow keys to move.
@@ -17,6 +17,10 @@ A ReflectionProbe is parented to the sphere to showcase real-time reflections.
 When the ReflectionProbe is hidden, it is disabled. In this case,
 VoxelGI, SDFGI or environment lighting will be used to provide fallback reflections.
 
+A Decal node is parented to the moving sphere and cube to provide simple shadows for them.
+This is especially effective when using the LightmapGI (All) global illumination mode,
+which doesn't allow dynamic objects to cast shadows on static surfaces.
+
 ## Screenshots
 
 ![Screenshot](screenshots/global_illumination.png)

+ 2 - 0
3d/global_illumination/cube.glb.import

@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/cube.glb-ec927bc01951d93b2130ba52799eca7c.scn
 
 nodes/root_type="Spatial"
 nodes/root_name="Scene Root"
+nodes/apply_root_scale=true
 nodes/root_scale=1.0
 meshes/ensure_tangents=true
 meshes/generate_lods=true
@@ -24,5 +25,6 @@ meshes/lightmap_texel_size=0.1
 skins/use_named_skins=true
 animation/import=true
 animation/fps=15
+animation/trimming=false
 import_script/path=""
 _subresources={}

+ 5 - 5
3d/global_illumination/icon.png.import

@@ -1,9 +1,9 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
+type="CompressedTexture2D"
 uid="uid://q2k8m14vo3kr"
-path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
+path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
 metadata={
 "vram_texture": false
 }
@@ -11,7 +11,7 @@ metadata={
 [deps]
 
 source_file="res://icon.png"
-dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"]
+dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
 
 [params]
 
@@ -21,7 +21,6 @@ compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/normal_map=0
 compress/channel_pack=0
-compress/streamed=false
 mipmaps/generate=false
 mipmaps/limit=-1
 roughness/mode=0
@@ -29,6 +28,7 @@ roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=false
 process/normal_map_invert_y=false
-process/HDR_as_SRGB=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
 process/size_limit=0
 detect_3d/compress_to=1

+ 8 - 1
3d/global_illumination/project.godot

@@ -11,6 +11,7 @@ config_version=5
 [application]
 
 config/name="Global Illumination"
+config/description="This demo showcases Godot's global illumination systems: LightmapGI, VoxelGI, SDFGI, ReflectionProbe and screen-space effects like SSAO and SSIL."
 run/main_scene="res://test.tscn"
 config/features=PackedStringArray("4.0")
 config/icon="res://icon.png"
@@ -20,6 +21,10 @@ config/icon="res://icon.png"
 window/stretch/mode="canvas_items"
 window/stretch/aspect="expand"
 
+[editor]
+
+export/convert_text_resources_to_binary=true
+
 [filesystem]
 
 import/blender/enabled=false
@@ -31,7 +36,7 @@ cycle_gi_mode={
 "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"unicode":0,"echo":false,"script":null)
 ]
 }
-toggle_reflection_probe={
+cycle_reflection_probe_mode={
 "deadzone": 0.5,
 "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"unicode":0,"echo":false,"script":null)
 ]
@@ -78,5 +83,7 @@ common/enable_pause_aware_picking=true
 
 [rendering]
 
+anti_aliasing/quality/screen_space_aa=1
+anti_aliasing/quality/use_debanding=true
 quality/shadows/filter_mode=2
 environment/default_environment="res://default_env.tres"

+ 99 - 51
3d/global_illumination/test.gd

@@ -2,8 +2,8 @@ extends Node3D
 
 enum GIMode {
 	NONE,
-#	BAKED_LIGHTMAP_ALL,
-#	BAKED_LIGHTMAP_INDIRECT,
+	LIGHTMAP_GI_ALL,
+	LIGHTMAP_GI_INDIRECT,
 	VOXEL_GI,
 	SDFGI,
 	MAX,  # Maximum value of the enum, used internally.
@@ -12,12 +12,26 @@ enum GIMode {
 # Keep this in sync with the GIMode enum (except for MAX).
 const GI_MODE_TEXTS = [
 	"Environment Lighting (Fastest)",
-#	"Baked Lightmap All (Fast)",
-#	"Baked Lightmap Indirect (Average)",
+	"Baked Lightmap All (Fast)",
+	"Baked Lightmap Indirect (Average)",
 	"VoxelGI (Slow)",
 	"SDFGI (Slow)",
 ]
 
+enum ReflectionProbeMode {
+	NONE,
+	ONCE,
+	ALWAYS,
+	MAX,
+}
+
+# Keep this in sync with the ReflectionProbeMode enum (except for MAX).
+const REFLECTION_PROBE_MODE_TEXTS = [
+	"Disabled - Using environment, VoxelGI or SDFGI reflections (Fast)",
+	"Enabled - \"Once\" Update Mode (Average)",
+	"Enabled - \"Always\" Update Mode (Slow)",
+]
+
 enum SSILMode {
 	NONE,
 	SSAO,
@@ -35,7 +49,7 @@ const SSIL_MODE_TEXTS = [
 ]
 
 var gi_mode = GIMode.NONE
-var use_reflection_probe = false
+var reflection_probe_mode = ReflectionProbeMode.NONE
 var ssil_mode = SSILMode.NONE
 
 @onready var environment = $WorldEnvironment.environment
@@ -44,10 +58,15 @@ var ssil_mode = SSILMode.NONE
 @onready var reflection_probe = $Camera/ReflectiveSphere/ReflectionProbe
 @onready var ssil_mode_label = $SSILMode
 
+# Several copies of the level mesh are required to cycle between different GI modes.
+@onready var zdm2_no_lightmap = $Zdm2NoLightmap
+@onready var zdm2_lightmap_all = $Zdm2LightmapAll
+@onready var zdm2_lightmap_indirect = $Zdm2LightmapIndirect
+
 
 func _ready():
 	set_gi_mode(gi_mode)
-	set_use_reflection_probe(use_reflection_probe)
+	set_reflection_probe_mode(reflection_probe_mode)
 	set_ssil_mode(ssil_mode)
 
 
@@ -55,8 +74,8 @@ func _input(event):
 	if event.is_action_pressed("cycle_gi_mode"):
 		set_gi_mode(wrapi(gi_mode + 1, 0, GIMode.MAX))
 
-	if event.is_action_pressed("toggle_reflection_probe"):
-		set_use_reflection_probe(not use_reflection_probe)
+	if event.is_action_pressed("cycle_reflection_probe_mode"):
+		set_reflection_probe_mode(wrapi(reflection_probe_mode + 1, 0, ReflectionProbeMode.MAX))
 
 	if event.is_action_pressed("cycle_ssil_mode"):
 		set_ssil_mode(wrapi(ssil_mode + 1, 0, SSILMode.MAX))
@@ -68,8 +87,14 @@ func set_gi_mode(p_gi_mode):
 
 	match p_gi_mode:
 		GIMode.NONE:
-#			$BakedLightmapIndirect.visible = false
-#			$BakedLightmapAll.visible = false
+			$Zdm2NoLightmap.visible = true
+			$Zdm2LightmapAll.visible = false
+			$Zdm2LightmapIndirect.visible = false
+
+			# Halve sky contribution to prevent shaded areas from looking too bright and blue.
+			environment.ambient_light_sky_contribution = 0.5
+			$LightmapGIIndirect.visible = false
+			$LightmapGIAll.visible = false
 			$VoxelGI.visible = false
 			environment.sdfgi_enabled = false
 
@@ -80,71 +105,94 @@ func set_gi_mode(p_gi_mode):
 			$GarageOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$CornerSpotLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 
-#		GIMode.BAKED_LIGHTMAP_ALL:
-#			$BakedLightmapIndirect.visible = false
-#			$BakedLightmapAll.visible = true
-#			$VoxelGI.visible = false
-#			environment.sdfgi_enabled = false
-#
-#			# Make lights not affect baked surfaces by setting their bake mode to All.
-#			$Sun.light_bake_mode = Light3D.BAKE_STATIC
-#			$GrateOmniLight.light_bake_mode = Light3D.BAKE_STATIC
-#			$GarageOmniLight.light_bake_mode = Light3D.BAKE_STATIC
-#			$CornerSpotLight.light_bake_mode = Light3D.BAKE_STATIC
-
-#		GIMode.BAKED_LIGHTMAP_INDIRECT:
-#			$BakedLightmapIndirect.visible = true
-#			$BakedLightmapAll.visible = false
-#			$VoxelGI.visible = false
-#			environment.sdfgi_enabled = false
-#
-#			$Sun.light_bake_mode = Light3D.BAKE_DYNAMIC
-#			$GrateOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
-#			$GarageOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
-#			$CornerSpotLight.light_bake_mode = Light3D.BAKE_DYNAMIC
+		GIMode.LIGHTMAP_GI_ALL:
+			$Zdm2NoLightmap.visible = false
+			$Zdm2LightmapAll.visible = true
+			$Zdm2LightmapIndirect.visible = false
+
+			# Halve sky contribution to prevent dynamic objects from looking too bright and blue.
+			# (When using lightmaps, this property doesn't affect lightmapped surfaces.)
+			environment.ambient_light_sky_contribution = 0.5
+			$LightmapGIIndirect.visible = false
+			$LightmapGIAll.visible = true
+			$VoxelGI.visible = false
+			environment.sdfgi_enabled = false
+
+			# Make lights not affect baked surfaces by setting their bake mode to All.
+			$Sun.light_bake_mode = Light3D.BAKE_STATIC
+			$GrateOmniLight.light_bake_mode = Light3D.BAKE_STATIC
+			$GarageOmniLight.light_bake_mode = Light3D.BAKE_STATIC
+			$CornerSpotLight.light_bake_mode = Light3D.BAKE_STATIC
+
+		GIMode.LIGHTMAP_GI_INDIRECT:
+			$Zdm2NoLightmap.visible = false
+			$Zdm2LightmapAll.visible = false
+			$Zdm2LightmapIndirect.visible = true
+
+			# Halve sky contribution to prevent dynamic objects from looking too bright and blue.
+			# (When using lightmaps, this property doesn't affect lightmapped surfaces.)
+			environment.ambient_light_sky_contribution = 0.5
+			$LightmapGIIndirect.visible = true
+			$LightmapGIAll.visible = false
+			$VoxelGI.visible = false
+			environment.sdfgi_enabled = false
+
+			$Sun.light_bake_mode = Light3D.BAKE_DYNAMIC
+			$GrateOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
+			$GarageOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
+			$CornerSpotLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 
 		GIMode.VOXEL_GI:
-#			$BakedLightmapIndirect.visible = false
-#			$BakedLightmapAll.visible = false
+			$Zdm2NoLightmap.visible = true
+			$Zdm2LightmapAll.visible = false
+			$Zdm2LightmapIndirect.visible = false
+
+			environment.ambient_light_sky_contribution = 1.0
+			$LightmapGIIndirect.visible = false
+			$LightmapGIAll.visible = false
 			$VoxelGI.visible = true
 			environment.sdfgi_enabled = false
 
 			# Bake mode must be Indirect, not Disabled. Otherwise, GI will
 			# not be visible for those lights.
-			# Moving/blinking lights should generally have their bake mode set to Disabled
-			# to avoid visible GI pop-ins. This is because VoxelGI
-			# can take a while to update.
 			$Sun.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$GrateOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$GarageOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$CornerSpotLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 
 		GIMode.SDFGI:
-#			$BakedLightmapIndirect.visible = false
-#			$BakedLightmapAll.visible = false
+			$Zdm2NoLightmap.visible = true
+			$Zdm2LightmapAll.visible = false
+			$Zdm2LightmapIndirect.visible = false
+
+			environment.ambient_light_sky_contribution = 1.0
+			$LightmapGIIndirect.visible = false
+			$LightmapGIAll.visible = false
 			$VoxelGI.visible = false
 			environment.sdfgi_enabled = true
 
 			# Bake mode must be Indirect, not Disabled. Otherwise, GI will
 			# not be visible for those lights.
-			# Moving/blinking lights should generally have their bake mode set to Disabled
-			# to avoid visible GI pop-ins. This is because SDFGI
-			# can take a while to update.
 			$Sun.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$GrateOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$GarageOmniLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 			$CornerSpotLight.light_bake_mode = Light3D.BAKE_DYNAMIC
 
 
-func set_use_reflection_probe(p_visible):
-	use_reflection_probe = p_visible
-
-	if p_visible:
-		reflection_probe_mode_label.text = "Reflection probe: Enabled - Using reflection probe (Average)"
-	else:
-		reflection_probe_mode_label.text = "Reflection probe: Disabled - Using environment, VoxelGI or SDFGI reflections (Fast)"
-
-	reflection_probe.visible = p_visible
+func set_reflection_probe_mode(p_reflection_probe_mode):
+	reflection_probe_mode = p_reflection_probe_mode
+	reflection_probe_mode_label.text = "Reflection probe: %s " % REFLECTION_PROBE_MODE_TEXTS[reflection_probe_mode]
+
+	match p_reflection_probe_mode:
+		ReflectionProbeMode.NONE:
+			reflection_probe.visible = false
+			reflection_probe.update_mode = ReflectionProbe.UPDATE_ONCE
+		ReflectionProbeMode.ONCE:
+			reflection_probe.visible = true
+			reflection_probe.update_mode = ReflectionProbe.UPDATE_ONCE
+		ReflectionProbeMode.ALWAYS:
+			reflection_probe.visible = true
+			reflection_probe.update_mode = ReflectionProbe.UPDATE_ALWAYS
 
 
 func set_ssil_mode(p_ssil_mode):

+ 68 - 19
3d/global_illumination/test.tscn

@@ -1,9 +1,11 @@
-[gd_scene load_steps=13 format=3 uid="uid://dbm1npua7fq50"]
+[gd_scene load_steps=17 format=3 uid="uid://dbm1npua7fq50"]
 
 [ext_resource type="PackedScene" uid="uid://djbrxyh5s8j2o" path="res://zdm2.glb" id="1"]
 [ext_resource type="PackedScene" uid="uid://c2lbhsefub1o5" path="res://cube.glb" id="3"]
 [ext_resource type="VoxelGIData" uid="uid://duykbpl6evu0r" path="res://test_VoxelGIData.res" id="3_1netx"]
+[ext_resource type="LightmapGIData" uid="uid://ct72rg4fnnes8" path="res://zdm2_all.lmbake" id="4_7vqwx"]
 [ext_resource type="Script" path="res://test.gd" id="5"]
+[ext_resource type="LightmapGIData" uid="uid://b78viqmkq8djh" path="res://zdm2_indirect.lmbake" id="5_14bmd"]
 [ext_resource type="Script" path="res://camera.gd" id="6"]
 
 [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_30v8t"]
@@ -20,6 +22,7 @@ background_mode = 2
 sky = SubResource("Sky_4q314")
 tonemap_mode = 3
 tonemap_white = 6.0
+ssao_intensity = 1.0
 sdfgi_cascades = 3
 sdfgi_min_cell_size = 0.25
 sdfgi_cascade0_distance = 16.0
@@ -33,7 +36,18 @@ emission_energy_multiplier = 2.0
 
 [sub_resource type="BoxMesh" id="8"]
 
+[sub_resource type="Gradient" id="Gradient_3s4nj"]
+colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 0)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_uu8pf"]
+gradient = SubResource("Gradient_3s4nj")
+fill = 1
+fill_from = Vector2(0.5, 0.5)
+fill_to = Vector2(0.5, 0.01)
+
 [sub_resource type="SphereMesh" id="2"]
+radius = 1.0
+height = 2.0
 
 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7doxp"]
 albedo_color = Color(0.811765, 1, 0.764706, 1)
@@ -46,27 +60,46 @@ script = ExtResource("5")
 [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
 environment = SubResource("Environment_bau0c")
 
-[node name="Zdm2" parent="." instance=ExtResource("1")]
+[node name="Zdm2NoLightmap" parent="." instance=ExtResource("1")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2)
+
+[node name="Zdm2LightmapAll" parent="." instance=ExtResource("1")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2)
+visible = false
+
+[node name="Zdm2LightmapIndirect" parent="." instance=ExtResource("1")]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2)
+visible = false
 
 [node name="VoxelGI" type="VoxelGI" parent="."]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 6, 2.5)
 extents = Vector3(39, 18.5, 30)
 data = ExtResource("3_1netx")
 
+[node name="LightmapGIAll" type="LightmapGI" parent="."]
+visible = false
+quality = 3
+light_data = ExtResource("4_7vqwx")
+
+[node name="LightmapGIIndirect" type="LightmapGI" parent="."]
+visible = false
+quality = 3
+light_data = ExtResource("5_14bmd")
+
 [node name="Sun" type="DirectionalLight3D" parent="."]
 transform = Transform3D(0.889832, -0.251497, 0.380722, 0, 0.834387, 0.551179, -0.456289, -0.490456, 0.742464, 4.47302, 6.47568, 8.72305)
 shadow_enabled = true
-shadow_blur = 1.5
+shadow_bias = 0.04
+shadow_blur = 2.0
 directional_shadow_fade_start = 1.0
-directional_shadow_max_distance = 85.0
+directional_shadow_max_distance = 75.0
 
 [node name="GrateOmniLight" type="OmniLight3D" parent="."]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.9461, -1.33084, -5.52646)
 light_color = Color(1, 0.905882, 0.470588, 1)
 shadow_enabled = true
 shadow_bias = 0.03
-shadow_blur = 1.5
+shadow_blur = 2.0
 omni_range = 10.0
 omni_attenuation = 2.0
 
@@ -76,7 +109,7 @@ light_color = Color(0.984314, 0.552941, 1, 1)
 light_energy = 15.0
 shadow_enabled = true
 shadow_bias = 0.03
-shadow_blur = 1.5
+shadow_blur = 2.0
 omni_range = 10.0
 omni_attenuation = 2.0
 
@@ -100,8 +133,18 @@ script = ExtResource("6")
 
 [node name="Box" type="MeshInstance3D" parent="Camera"]
 transform = Transform3D(0.999999, -5.12227e-09, 9.68575e-08, 2.79397e-09, 0.999999, 8.9407e-08, 7.45058e-09, -1.11759e-07, 0.999999, -1.4, -0.999998, -3.99998)
+layers = 2
 mesh = SubResource("8")
 
+[node name="BlobShadow" type="Decal" parent="Camera/Box"]
+transform = Transform3D(-0.997524, -0.00613033, -0.0700699, -0.00719589, 0.999863, 0.0149653, 0.0699686, 0.015432, -0.997431, 0.0499506, -0.507917, -0.035697)
+extents = Vector3(1.25, 2, 1.25)
+texture_albedo = SubResource("GradientTexture2D_uu8pf")
+albedo_mix = 0.9
+upper_fade = 1.0
+lower_fade = 1.0
+cull_mask = 1048573
+
 [node name="ReflectiveSphere" type="MeshInstance3D" parent="Camera"]
 transform = Transform3D(-0.997523, -8.41886e-09, -0.0703376, -0.00719589, 0.994753, 0.102052, 0.0699685, 0.102305, -0.992289, 0.16733, -1.22931, -3.81225)
 layers = 2
@@ -111,18 +154,27 @@ surface_material_override/0 = SubResource("StandardMaterial3D_7doxp")
 [node name="ReflectionProbe" type="ReflectionProbe" parent="Camera/ReflectiveSphere"]
 transform = Transform3D(1, -8.38189e-09, -8.9407e-08, 5.58791e-09, 1, -5.21541e-07, 4.47035e-08, 1.11759e-07, 1, 0, 0, 0)
 max_distance = 50.0
+extents = Vector3(11, 11, 11)
 box_projection = true
 enable_shadows = true
 ambient_mode = 0
 
+[node name="BlobShadow" type="Decal" parent="Camera/ReflectiveSphere"]
+transform = Transform3D(1, -1.37668e-14, 0, 1.33227e-15, 1, 1.42109e-14, 0, 0, 1, 0, -1, -1.90735e-06)
+extents = Vector3(1.25, 2, 1.25)
+texture_albedo = SubResource("GradientTexture2D_uu8pf")
+albedo_mix = 0.9
+upper_fade = 1.0
+lower_fade = 1.0
+cull_mask = 1048573
+
 [node name="GIMode" type="Label" parent="."]
 offset_left = 16.0
 offset_top = 16.0
 offset_right = 263.0
 offset_bottom = 42.0
-theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
-theme_override_constants/shadow_offset_x = 1
-theme_override_constants/shadow_offset_y = 1
+theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
+theme_override_constants/outline_size = 4
 text = "Global illumination: None (Fastest)"
 
 [node name="ReflectionProbeMode" type="Label" parent="."]
@@ -130,9 +182,8 @@ offset_left = 16.0
 offset_top = 48.0
 offset_right = 148.0
 offset_bottom = 74.0
-theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
-theme_override_constants/shadow_offset_x = 1
-theme_override_constants/shadow_offset_y = 1
+theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
+theme_override_constants/outline_size = 4
 text = "Reflection probe: Disabled - Using environment, VoxelGI or SDFGI reflections (Fast)"
 
 [node name="SSILMode" type="Label" parent="."]
@@ -140,9 +191,8 @@ offset_left = 16.0
 offset_top = 80.0
 offset_right = 365.0
 offset_bottom = 106.0
-theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
-theme_override_constants/shadow_offset_x = 1
-theme_override_constants/shadow_offset_y = 1
+theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
+theme_override_constants/outline_size = 4
 text = "Screen-space lighting effects: Disabled (Fast)"
 
 [node name="Label" type="Label" parent="."]
@@ -153,11 +203,10 @@ offset_left = 16.0
 offset_top = -120.0
 offset_right = 537.0
 offset_bottom = -16.0
-theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
-theme_override_constants/shadow_offset_x = 1
-theme_override_constants/shadow_offset_y = 1
+theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
+theme_override_constants/outline_size = 4
 text = "Space: Cycle between GI modes
-R: Toggle reflection probe
+R: Cycle between reflection probe modes
 F: Cycle between screen-space lighting effect modes
 Escape or F10: Toggle mouse capture"
 

BIN
3d/global_illumination/test_VoxelGIData.res


+ 2 - 0
3d/global_illumination/zdm2.glb.import

@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/zdm2.glb-c2f26c366324e083db1b83c037b80fc6.scn
 
 nodes/root_type="Spatial"
 nodes/root_name="Zdm2"
+nodes/apply_root_scale=true
 nodes/root_scale=1.0
 meshes/ensure_tangents=true
 meshes/generate_lods=false
@@ -24,5 +25,6 @@ meshes/lightmap_texel_size=0.25
 skins/use_named_skins=true
 animation/import=true
 animation/fps=15
+animation/trimming=false
 import_script/path=""
 _subresources={}

BIN
3d/global_illumination/zdm2_all.exr


+ 28 - 0
3d/global_illumination/zdm2_all.exr.import

@@ -0,0 +1,28 @@
+[remap]
+
+importer="2d_array_texture"
+type="CompressedTexture2DArray"
+uid="uid://dh810u2wvg8xg"
+path.etc2="res://.godot/imported/zdm2_all.exr-90621151e6c7cdb548fd3797293f06e7.etc2.ctexarray"
+path.s3tc="res://.godot/imported/zdm2_all.exr-90621151e6c7cdb548fd3797293f06e7.s3tc.ctexarray"
+metadata={
+"imported_formats": ["etc2", "s3tc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://zdm2_all.exr"
+dest_files=["res://.godot/imported/zdm2_all.exr-90621151e6c7cdb548fd3797293f06e7.etc2.ctexarray", "res://.godot/imported/zdm2_all.exr-90621151e6c7cdb548fd3797293f06e7.s3tc.ctexarray"]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/channel_pack=1
+mipmaps/generate=false
+mipmaps/limit=-1
+slices/horizontal=1
+slices/vertical=1

BIN
3d/global_illumination/zdm2_all.lmbake


BIN
3d/global_illumination/zdm2_indirect.exr


+ 28 - 0
3d/global_illumination/zdm2_indirect.exr.import

@@ -0,0 +1,28 @@
+[remap]
+
+importer="2d_array_texture"
+type="CompressedTexture2DArray"
+uid="uid://dv1sjg7a0m50l"
+path.etc2="res://.godot/imported/zdm2_indirect.exr-1fd4bc76ec648c4d2e6230b7d974087b.etc2.ctexarray"
+path.s3tc="res://.godot/imported/zdm2_indirect.exr-1fd4bc76ec648c4d2e6230b7d974087b.s3tc.ctexarray"
+metadata={
+"imported_formats": ["etc2", "s3tc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://zdm2_indirect.exr"
+dest_files=["res://.godot/imported/zdm2_indirect.exr-1fd4bc76ec648c4d2e6230b7d974087b.etc2.ctexarray", "res://.godot/imported/zdm2_indirect.exr-1fd4bc76ec648c4d2e6230b7d974087b.s3tc.ctexarray"]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/bptc_ldr=0
+compress/channel_pack=1
+mipmaps/generate=false
+mipmaps/limit=-1
+slices/horizontal=1
+slices/vertical=1

BIN
3d/global_illumination/zdm2_indirect.lmbake