diff --git a/3d/global_illumination/README.md b/3d/global_illumination/README.md
index 2d491c87..08870c38 100644
--- a/3d/global_illumination/README.md
+++ b/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, W/A/S/D
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

diff --git a/3d/global_illumination/cube.glb.import b/3d/global_illumination/cube.glb.import
index 115dac91..87a528ae 100644
--- a/3d/global_illumination/cube.glb.import
+++ b/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={}
diff --git a/3d/global_illumination/icon.png.import b/3d/global_illumination/icon.png.import
index e2f5f63c..5d72fc91 100644
--- a/3d/global_illumination/icon.png.import
+++ b/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
diff --git a/3d/global_illumination/project.godot b/3d/global_illumination/project.godot
index 19a06b12..0566eb0b 100644
--- a/3d/global_illumination/project.godot
+++ b/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"
diff --git a/3d/global_illumination/test.gd b/3d/global_illumination/test.gd
index eedac709..3ceb2633 100644
--- a/3d/global_illumination/test.gd
+++ b/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.LIGHTMAP_GI_ALL:
+ $Zdm2NoLightmap.visible = false
+ $Zdm2LightmapAll.visible = true
+ $Zdm2LightmapIndirect.visible = false
-# 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
+ # 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
+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]
- 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
+ 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):
diff --git a/3d/global_illumination/test.tscn b/3d/global_illumination/test.tscn
index 5093b86a..a0e12038 100644
--- a/3d/global_illumination/test.tscn
+++ b/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"
diff --git a/3d/global_illumination/test_VoxelGIData.res b/3d/global_illumination/test_VoxelGIData.res
index b3146909..c741ae65 100644
Binary files a/3d/global_illumination/test_VoxelGIData.res and b/3d/global_illumination/test_VoxelGIData.res differ
diff --git a/3d/global_illumination/zdm2.glb.import b/3d/global_illumination/zdm2.glb.import
index d3a19bea..205a3fd8 100644
--- a/3d/global_illumination/zdm2.glb.import
+++ b/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={}
diff --git a/3d/global_illumination/zdm2_all.exr b/3d/global_illumination/zdm2_all.exr
new file mode 100644
index 00000000..1f652c96
Binary files /dev/null and b/3d/global_illumination/zdm2_all.exr differ
diff --git a/3d/global_illumination/zdm2_all.exr.import b/3d/global_illumination/zdm2_all.exr.import
new file mode 100644
index 00000000..1d31cc81
--- /dev/null
+++ b/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
diff --git a/3d/global_illumination/zdm2_all.lmbake b/3d/global_illumination/zdm2_all.lmbake
new file mode 100644
index 00000000..8986289e
Binary files /dev/null and b/3d/global_illumination/zdm2_all.lmbake differ
diff --git a/3d/global_illumination/zdm2_indirect.exr b/3d/global_illumination/zdm2_indirect.exr
new file mode 100644
index 00000000..a88cf7c1
Binary files /dev/null and b/3d/global_illumination/zdm2_indirect.exr differ
diff --git a/3d/global_illumination/zdm2_indirect.exr.import b/3d/global_illumination/zdm2_indirect.exr.import
new file mode 100644
index 00000000..91e2a55a
--- /dev/null
+++ b/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
diff --git a/3d/global_illumination/zdm2_indirect.lmbake b/3d/global_illumination/zdm2_indirect.lmbake
new file mode 100644
index 00000000..15169984
Binary files /dev/null and b/3d/global_illumination/zdm2_indirect.lmbake differ