summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/forward_clustered
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-08-20 10:01:41 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-08-20 10:01:41 +0200
commit8acd82f70ea1fc06ad400a624aec01d0a080f2a8 (patch)
tree01c40ceaf0a629433bf2327377ffec50c6a12b3e /servers/rendering/renderer_rd/forward_clustered
parent333f0f910f164851218c5ece26d4c4b4931d4a30 (diff)
parentef9bb1a20781b838f8bf96afb9c26f7d21229b1f (diff)
downloadredot-engine-8acd82f70ea1fc06ad400a624aec01d0a080f2a8.tar.gz
Merge pull request #89919 from BlueCube3310/bicubic-lightmap
Implement bicubic sampling for lightmaps
Diffstat (limited to 'servers/rendering/renderer_rd/forward_clustered')
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp13
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h4
2 files changed, 16 insertions, 1 deletions
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
index cb655f9b04..b97e38da4d 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -1103,9 +1103,17 @@ void RenderForwardClustered::_setup_lightmaps(const RenderDataRD *p_render_data,
RID lightmap = light_storage->lightmap_instance_get_lightmap(p_lightmaps[i]);
+ // Transform (for directional lightmaps).
Basis to_lm = light_storage->lightmap_instance_get_transform(p_lightmaps[i]).basis.inverse() * p_cam_transform.basis;
to_lm = to_lm.inverse().transposed(); //will transform normals
RendererRD::MaterialStorage::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform);
+
+ // Light texture size.
+ Vector2i lightmap_size = light_storage->lightmap_get_light_texture_size(lightmap);
+ scene_state.lightmaps[i].texture_size[0] = lightmap_size[0];
+ scene_state.lightmaps[i].texture_size[1] = lightmap_size[1];
+
+ // Exposure.
scene_state.lightmaps[i].exposure_normalization = 1.0;
if (p_render_data->camera_attributes.is_valid()) {
float baked_exposure = light_storage->lightmap_get_baked_exposure_normalization(lightmap);
@@ -4242,6 +4250,11 @@ void RenderForwardClustered::_update_shader_quality_settings() {
spec_constants.push_back(sc);
+ sc.constant_id = SPEC_CONSTANT_USE_LIGHTMAP_BICUBIC_FILTER;
+ sc.bool_value = lightmap_filter_bicubic_get();
+
+ spec_constants.push_back(sc);
+
scene_shader.set_default_specialization_constants(spec_constants);
base_uniforms_changed(); //also need this
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
index 0aa4a0667e..5d14653db6 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
@@ -73,6 +73,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
SPEC_CONSTANT_DECAL_FILTER = 10,
SPEC_CONSTANT_PROJECTOR_FILTER = 11,
SPEC_CONSTANT_USE_DEPTH_FOG = 12,
+ SPEC_CONSTANT_USE_LIGHTMAP_BICUBIC_FILTER = 13,
};
enum {
@@ -235,8 +236,9 @@ class RenderForwardClustered : public RendererSceneRenderRD {
struct LightmapData {
float normal_xform[12];
- float pad[3];
+ float texture_size[2];
float exposure_normalization;
+ float pad;
};
struct LightmapCaptureData {