@@ -226,7 +226,7 @@ void LightmapperRD::_sort_triangle_clusters(uint32_t p_cluster_size, uint32_t p_
226226 }
227227}
228228
229- Lightmapper::BakeError LightmapperRD::_blit_meshes_into_atlas (int p_max_texture_size, Vector<Ref<Image>> &albedo_images, Vector<Ref<Image>> &emission_images, AABB &bounds, Size2i &atlas_size, int &atlas_slices, BakeStepFunc p_step_function, void *p_bake_userdata) {
229+ Lightmapper::BakeError LightmapperRD::_blit_meshes_into_atlas (int p_max_texture_size, int p_denoiser_range, Vector<Ref<Image>> &albedo_images, Vector<Ref<Image>> &emission_images, AABB &bounds, Size2i &atlas_size, int &atlas_slices, BakeStepFunc p_step_function, void *p_bake_userdata) {
230230 Vector<Size2i> sizes;
231231
232232 for (int m_i = 0 ; m_i < mesh_instances.size (); m_i++) {
@@ -261,7 +261,7 @@ Lightmapper::BakeError LightmapperRD::_blit_meshes_into_atlas(int p_max_texture_
261261 source_sizes.resize (sizes.size ());
262262 source_indices.resize (sizes.size ());
263263 for (int i = 0 ; i < source_indices.size (); i++) {
264- source_sizes.write [i] = sizes[i] + Vector2i (2 , 2 ); // Add padding between lightmaps
264+ source_sizes.write [i] = sizes[i] + Vector2i (2 , 2 ). maxi (p_denoiser_range) ; // Add padding between lightmaps
265265 source_indices.write [i] = i;
266266 }
267267 Vector<Vector3i> atlas_offsets;
@@ -906,14 +906,15 @@ LightmapperRD::BakeError LightmapperRD::_denoise_oidn(RenderingDevice *p_rd, RID
906906 return BAKE_OK;
907907}
908908
909- LightmapperRD::BakeError LightmapperRD::_denoise (RenderingDevice *p_rd, Ref<RDShaderFile> &p_compute_shader, const RID &p_compute_base_uniform_set, PushConstant &p_push_constant, RID p_source_light_tex, RID p_source_normal_tex, RID p_dest_light_tex, float p_denoiser_strength, const Size2i &p_atlas_size, int p_atlas_slices, bool p_bake_sh, BakeStepFunc p_step_function) {
909+ LightmapperRD::BakeError LightmapperRD::_denoise (RenderingDevice *p_rd, Ref<RDShaderFile> &p_compute_shader, const RID &p_compute_base_uniform_set, PushConstant &p_push_constant, RID p_source_light_tex, RID p_source_normal_tex, RID p_dest_light_tex, float p_denoiser_strength, int p_denoiser_range, const Size2i &p_atlas_size, int p_atlas_slices, bool p_bake_sh, BakeStepFunc p_step_function) {
910910 RID denoise_params_buffer = p_rd->uniform_buffer_create (sizeof (DenoiseParams));
911911 DenoiseParams denoise_params;
912912 denoise_params.spatial_bandwidth = 5 .0f ;
913913 denoise_params.light_bandwidth = p_denoiser_strength;
914914 denoise_params.albedo_bandwidth = 1 .0f ;
915915 denoise_params.normal_bandwidth = 0 .1f ;
916916 denoise_params.filter_strength = 10 .0f ;
917+ denoise_params.half_search_window = p_denoiser_range;
917918 p_rd->buffer_update (denoise_params_buffer, 0 , sizeof (DenoiseParams), &denoise_params);
918919
919920 Vector<RD::Uniform> uniforms = dilate_or_denoise_common_uniforms (p_source_light_tex, p_dest_light_tex);
@@ -976,7 +977,7 @@ LightmapperRD::BakeError LightmapperRD::_denoise(RenderingDevice *p_rd, Ref<RDSh
976977 return BAKE_OK;
977978}
978979
979- LightmapperRD::BakeError LightmapperRD::bake (BakeQuality p_quality, bool p_use_denoiser, float p_denoiser_strength, int p_bounces, float p_bounce_indirect_energy, float p_bias, int p_max_texture_size, bool p_bake_sh, bool p_texture_for_bounces, GenerateProbes p_generate_probes, const Ref<Image> &p_environment_panorama, const Basis &p_environment_transform, BakeStepFunc p_step_function, void *p_bake_userdata, float p_exposure_normalization) {
980+ LightmapperRD::BakeError LightmapperRD::bake (BakeQuality p_quality, bool p_use_denoiser, float p_denoiser_strength, int p_denoiser_range, int p_bounces, float p_bounce_indirect_energy, float p_bias, int p_max_texture_size, bool p_bake_sh, bool p_texture_for_bounces, GenerateProbes p_generate_probes, const Ref<Image> &p_environment_panorama, const Basis &p_environment_transform, BakeStepFunc p_step_function, void *p_bake_userdata, float p_exposure_normalization) {
980981 int denoiser = GLOBAL_GET (" rendering/lightmapping/denoising/denoiser" );
981982 String oidn_path = EDITOR_GET (" filesystem/tools/oidn/oidn_denoise_path" );
982983
@@ -1008,7 +1009,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
10081009 Vector<Ref<Image>> albedo_images;
10091010 Vector<Ref<Image>> emission_images;
10101011
1011- BakeError bake_error = _blit_meshes_into_atlas (p_max_texture_size, albedo_images, emission_images, bounds, atlas_size, atlas_slices, p_step_function, p_bake_userdata);
1012+ BakeError bake_error = _blit_meshes_into_atlas (p_max_texture_size, p_denoiser_range, albedo_images, emission_images, bounds, atlas_size, atlas_slices, p_step_function, p_bake_userdata);
10121013 if (bake_error != BAKE_OK) {
10131014 return bake_error;
10141015 }
@@ -1793,7 +1794,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
17931794 } else {
17941795 // JNLM (built-in).
17951796 SWAP (light_accum_tex, light_accum_tex2);
1796- error = _denoise (rd, compute_shader, compute_base_uniform_set, push_constant, light_accum_tex2, normal_tex, light_accum_tex, p_denoiser_strength, atlas_size, atlas_slices, p_bake_sh, p_step_function);
1797+ error = _denoise (rd, compute_shader, compute_base_uniform_set, push_constant, light_accum_tex2, normal_tex, light_accum_tex, p_denoiser_strength, p_denoiser_range, atlas_size, atlas_slices, p_bake_sh, p_step_function);
17971798 }
17981799 if (unlikely (error != BAKE_OK)) {
17991800 return error;
0 commit comments