@@ -979,7 +979,7 @@ LightmapperRD::BakeError LightmapperRD::_denoise_oidn(RenderingDevice *p_rd, RID
979979 return BAKE_OK;
980980}
981981
982- 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, void *p_bake_userdata) {
982+ 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, RID p_unocclude_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, void *p_bake_userdata) {
983983 RID denoise_params_buffer = p_rd->uniform_buffer_create (sizeof (DenoiseParams));
984984 DenoiseParams denoise_params;
985985 denoise_params.spatial_bandwidth = 5 .0f ;
@@ -1000,8 +1000,15 @@ LightmapperRD::BakeError LightmapperRD::_denoise(RenderingDevice *p_rd, Ref<RDSh
10001000 }
10011001 {
10021002 RD::Uniform u;
1003- u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER ;
1003+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE ;
10041004 u.binding = 3 ;
1005+ u.append_id (p_unocclude_tex);
1006+ uniforms.push_back (u);
1007+ }
1008+ {
1009+ RD::Uniform u;
1010+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
1011+ u.binding = 4 ;
10051012 u.append_id (denoise_params_buffer);
10061013 uniforms.push_back (u);
10071014 }
@@ -1622,6 +1629,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
16221629 }
16231630
16241631 PushConstant push_constant;
1632+ push_constant.denoiser_range = p_use_denoiser ? p_denoiser_range : 1.0 ;
16251633
16261634 /* UNOCCLUDE */
16271635 {
@@ -1638,7 +1646,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
16381646 RD::Uniform u;
16391647 u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
16401648 u.binding = 1 ;
1641- u.append_id (unocclude_tex); // will be unused
1649+ u.append_id (unocclude_tex);
16421650 uniforms.push_back (u);
16431651 }
16441652 }
@@ -1659,6 +1667,14 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
16591667 rd->compute_list_end (); // done
16601668 }
16611669
1670+ #ifdef DEBUG_TEXTURES
1671+ for (int i = 0 ; i < atlas_slices; i++) {
1672+ Vector<uint8_t > s = rd->texture_get_data (unocclude_tex, i);
1673+ Ref<Image> img = Image::create_from_data (atlas_size.width , atlas_size.height , false , Image::FORMAT_RGBAF, s);
1674+ img->save_exr (" res://1_unocclude_" + itos (i) + " .exr" , false );
1675+ }
1676+ #endif
1677+
16621678 if (p_step_function) {
16631679 if (p_step_function (0.5 , RTR (" Plot direct lighting" ), p_bake_userdata, true )) {
16641680 FREE_TEXTURES
@@ -2083,7 +2099,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
20832099 } else {
20842100 // JNLM (built-in).
20852101 SWAP (light_accum_tex, light_accum_tex2);
2086- 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, p_bake_userdata);
2102+ error = _denoise (rd, compute_shader, compute_base_uniform_set, push_constant, light_accum_tex2, normal_tex, light_accum_tex, unocclude_tex, p_denoiser_strength, p_denoiser_range, atlas_size, atlas_slices, p_bake_sh, p_step_function, p_bake_userdata);
20872103 }
20882104 if (unlikely (error != BAKE_OK)) {
20892105 return error;
@@ -2098,7 +2114,7 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
20982114 } else {
20992115 // JNLM (built-in).
21002116 SWAP (shadowmask_tex, shadowmask_tex2);
2101- error = _denoise (rd, compute_shader, compute_base_uniform_set, push_constant, shadowmask_tex2, normal_tex, shadowmask_tex, p_denoiser_strength, p_denoiser_range, atlas_size, atlas_slices, false , p_step_function, p_bake_userdata);
2117+ error = _denoise (rd, compute_shader, compute_base_uniform_set, push_constant, shadowmask_tex2, normal_tex, shadowmask_tex, unocclude_tex, p_denoiser_strength, p_denoiser_range, atlas_size, atlas_slices, false , p_step_function, p_bake_userdata);
21022118 }
21032119 if (unlikely (error != BAKE_OK)) {
21042120 return error;
0 commit comments