Skip to content

Commit c78c3ba

Browse files
DarioSamoclayjohn
andcommitted
Rewrite Radiance and Reflection probes to use Octahedral maps.
Co-authored-by: clayjohn <[email protected]>
1 parent 25203e2 commit c78c3ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1509
-1553
lines changed

doc/classes/ProjectSettings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3226,7 +3226,7 @@
32263226
<member name="rendering/reflections/sky_reflections/ggx_samples.mobile" type="int" setter="" getter="" default="16">
32273227
Lower-end override for [member rendering/reflections/sky_reflections/ggx_samples] on mobile devices, due to performance concerns or driver support.
32283228
</member>
3229-
<member name="rendering/reflections/sky_reflections/roughness_layers" type="int" setter="" getter="" default="8">
3229+
<member name="rendering/reflections/sky_reflections/roughness_layers" type="int" setter="" getter="" default="7">
32303230
Limits the number of layers to use in radiance maps when using importance sampling. A lower number will be slightly faster and take up less VRAM.
32313231
</member>
32323232
<member name="rendering/reflections/sky_reflections/texture_array_reflections" type="bool" setter="" getter="" default="true">

drivers/gles3/storage/light_storage.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,10 @@ bool LightStorage::reflection_probe_instance_begin_render(RID p_instance, RID p_
986986
return true;
987987
}
988988

989+
bool LightStorage::reflection_probe_instance_end_render(RID p_instance, RID p_reflection_atlas) {
990+
return true;
991+
}
992+
989993
Ref<RenderSceneBuffers> LightStorage::reflection_probe_atlas_get_render_buffers(RID p_reflection_atlas) {
990994
ReflectionAtlas *atlas = reflection_atlas_owner.get_or_null(p_reflection_atlas);
991995
ERR_FAIL_NULL_V(atlas, Ref<RenderSceneBuffersGLES3>());

drivers/gles3/storage/light_storage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,7 @@ class LightStorage : public RendererLightStorage {
687687
virtual bool reflection_probe_instance_needs_redraw(RID p_instance) override;
688688
virtual bool reflection_probe_instance_has_reflection(RID p_instance) override;
689689
virtual bool reflection_probe_instance_begin_render(RID p_instance, RID p_reflection_atlas) override;
690+
virtual bool reflection_probe_instance_end_render(RID p_instance, RID p_reflection_atlas) override;
690691
virtual Ref<RenderSceneBuffers> reflection_probe_atlas_get_render_buffers(RID p_reflection_atlas) override;
691692
virtual bool reflection_probe_instance_postprocess_step(RID p_instance) override;
692693

servers/rendering/dummy/storage/light_storage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class LightStorage : public RendererLightStorage {
165165
virtual bool reflection_probe_instance_needs_redraw(RID p_instance) override { return false; }
166166
virtual bool reflection_probe_instance_has_reflection(RID p_instance) override { return false; }
167167
virtual bool reflection_probe_instance_begin_render(RID p_instance, RID p_reflection_atlas) override { return false; }
168+
virtual bool reflection_probe_instance_end_render(RID p_instance, RID p_reflection_atlas) override { return false; }
168169
virtual Ref<RenderSceneBuffers> reflection_probe_atlas_get_render_buffers(RID p_reflection_atlas) override { return Ref<RenderSceneBuffers>(); }
169170
virtual bool reflection_probe_instance_postprocess_step(RID p_instance) override { return true; }
170171

servers/rendering/renderer_rd/effects/copy_effects.cpp

Lines changed: 161 additions & 109 deletions
Large diffs are not rendered by default.

servers/rendering/renderer_rd/effects/copy_effects.h

Lines changed: 86 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@
3636
#include "servers/rendering/renderer_rd/shaders/effects/copy.glsl.gen.h"
3737
#include "servers/rendering/renderer_rd/shaders/effects/copy_to_fb.glsl.gen.h"
3838
#include "servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl.gen.h"
39-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl.gen.h"
40-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl.gen.h"
41-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl.gen.h"
42-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl.gen.h"
43-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl.gen.h"
44-
#include "servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl.gen.h"
39+
#include "servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl.gen.h"
40+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl.gen.h"
41+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl.gen.h"
42+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_filter.glsl.gen.h"
43+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_filter_raster.glsl.gen.h"
44+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_roughness.glsl.gen.h"
45+
#include "servers/rendering/renderer_rd/shaders/effects/octmap_roughness_raster.glsl.gen.h"
4546
#include "servers/rendering/renderer_rd/shaders/effects/specular_merge.glsl.gen.h"
4647
#include "servers/rendering/renderer_scene_render.h"
4748

@@ -50,8 +51,15 @@
5051
namespace RendererRD {
5152

5253
class CopyEffects {
54+
public:
55+
enum RasterEffects {
56+
RASTER_EFFECT_COPY = 1 << 0,
57+
RASTER_EFFECT_GAUSSIAN_BLUR = 1 << 1,
58+
RASTER_EFFECT_OCTMAP = 1 << 2,
59+
};
60+
5361
private:
54-
bool prefer_raster_effects;
62+
BitField<RasterEffects> raster_effects;
5563

5664
// Blur raster shader
5765

@@ -115,8 +123,8 @@ class CopyEffects {
115123
COPY_MODE_SET_COLOR_8BIT,
116124
COPY_MODE_MIPMAP,
117125
COPY_MODE_LINEARIZE_DEPTH,
118-
COPY_MODE_CUBE_TO_PANORAMA,
119-
COPY_MODE_CUBE_ARRAY_TO_PANORAMA,
126+
COPY_MODE_OCTMAP_TO_PANORAMA,
127+
COPY_MODE_OCTMAP_ARRAY_TO_PANORAMA,
120128
COPY_MODE_MAX,
121129

122130
};
@@ -152,7 +160,8 @@ class CopyEffects {
152160
// DOF.
153161
float camera_z_far;
154162
float camera_z_near;
155-
uint32_t pad2[2];
163+
// Octmap.
164+
float octmap_border_size[2];
156165
//SET color
157166
float set_color[4];
158167
};
@@ -224,40 +233,66 @@ class CopyEffects {
224233
PipelineCacheRD pipeline;
225234
} cube_to_dp;
226235

227-
// Cubemap effects
236+
// Copy to Octmap
228237

229-
struct CubemapDownsamplerPushConstant {
230-
uint32_t face_size;
231-
uint32_t face_id;
232-
float pad[2];
238+
struct CopyToOctmapPushConstant {
239+
float border_size;
240+
float pad[3];
233241
};
234242

235-
struct CubemapDownsampler {
236-
CubemapDownsamplerPushConstant push_constant;
237-
CubemapDownsamplerShaderRD compute_shader;
238-
CubemapDownsamplerRasterShaderRD raster_shader;
243+
struct CopyToOctmap {
244+
CopyToOctmapPushConstant push_constant;
245+
CubeToOctmapShaderRD shader;
239246
RID shader_version;
240-
PipelineDeferredRD compute_pipeline;
241-
PipelineCacheRD raster_pipeline;
242-
} cubemap_downsampler;
247+
PipelineCacheRD pipeline;
248+
} cube_to_octmap;
249+
250+
// Octmap effects
251+
252+
struct OctmapDownsamplerPushConstant {
253+
float border_size;
254+
uint32_t size;
255+
uint32_t pad[2];
256+
};
243257

244-
enum CubemapFilterMode {
258+
enum OctmapDownsamplerMode {
259+
DOWNSAMPLER_MODE_LOW_QUALITY,
260+
DOWNSAMPLER_MODE_HIGH_QUALITY,
261+
DOWNSAMPLER_MODE_MAX
262+
};
263+
264+
struct OctmapDownsampler {
265+
OctmapDownsamplerPushConstant push_constant;
266+
OctmapDownsamplerShaderRD compute_shader;
267+
OctmapDownsamplerRasterShaderRD raster_shader;
268+
RID shader_version;
269+
PipelineDeferredRD compute_pipelines[DOWNSAMPLER_MODE_MAX];
270+
PipelineCacheRD raster_pipelines[DOWNSAMPLER_MODE_MAX];
271+
} octmap_downsampler;
272+
273+
enum OctmapFilterMode {
245274
FILTER_MODE_HIGH_QUALITY,
246275
FILTER_MODE_LOW_QUALITY,
247276
FILTER_MODE_HIGH_QUALITY_ARRAY,
248277
FILTER_MODE_LOW_QUALITY_ARRAY,
249278
FILTER_MODE_MAX,
250279
};
251280

252-
struct CubemapFilterRasterPushConstant {
281+
struct OctmapFilterPushConstant {
282+
float border_size[2];
283+
uint32_t size;
284+
uint32_t pad;
285+
};
286+
287+
struct OctmapFilterRasterPushConstant {
288+
float border_size[2];
253289
uint32_t mip_level;
254-
uint32_t face_id;
255-
float pad[2];
290+
uint32_t pad;
256291
};
257292

258-
struct CubemapFilter {
259-
CubemapFilterShaderRD compute_shader;
260-
CubemapFilterRasterShaderRD raster_shader;
293+
struct OctmapFilter {
294+
OctmapFilterShaderRD compute_shader;
295+
OctmapFilterRasterShaderRD raster_shader;
261296
RID shader_version;
262297
PipelineDeferredRD compute_pipelines[FILTER_MODE_MAX];
263298
PipelineCacheRD raster_pipelines[FILTER_MODE_MAX];
@@ -269,19 +304,21 @@ class CopyEffects {
269304

270305
} filter;
271306

272-
struct CubemapRoughnessPushConstant {
273-
uint32_t face_id;
307+
struct OctmapRoughnessPushConstant {
274308
uint32_t sample_count;
275309
float roughness;
310+
uint32_t source_size;
311+
uint32_t dest_size;
312+
313+
float border_size[2];
276314
uint32_t use_direct_write;
277-
float face_size;
278-
float pad[3];
315+
uint32_t pad;
279316
};
280317

281-
struct CubemapRoughness {
282-
CubemapRoughnessPushConstant push_constant;
283-
CubemapRoughnessShaderRD compute_shader;
284-
CubemapRoughnessRasterShaderRD raster_shader;
318+
struct OctmapRoughness {
319+
OctmapRoughnessPushConstant push_constant;
320+
OctmapRoughnessShaderRD compute_shader;
321+
OctmapRoughnessRasterShaderRD raster_shader;
285322
RID shader_version;
286323
PipelineDeferredRD compute_pipeline;
287324
PipelineCacheRD raster_pipeline;
@@ -319,18 +356,18 @@ class CopyEffects {
319356
public:
320357
static CopyEffects *get_singleton();
321358

322-
CopyEffects(bool p_prefer_raster_effects);
359+
CopyEffects(BitField<RasterEffects> p_raster_effects);
323360
~CopyEffects();
324361

325-
bool get_prefer_raster_effects() { return prefer_raster_effects; }
362+
BitField<RasterEffects> get_raster_effects() { return raster_effects; }
326363

327364
void copy_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_all_source = false, bool p_8_bit_dst = false, bool p_alpha_to_one = false, bool p_sanitize_inf_nan = false);
328-
void copy_cubemap_to_panorama(RID p_source_cube, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array);
365+
void copy_octmap_to_panorama(RID p_source_octmap, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array, const Size2 &p_source_octmap_border_size);
329366
void copy_depth_to_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false);
330367
void copy_depth_to_rect_and_linearize(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, float p_z_near, float p_z_far);
331-
void copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_alpha_to_zero = false, bool p_srgb = false, RID p_secondary = RID(), bool p_multiview = false, bool alpha_to_one = false, bool p_linear = false, bool p_normal = false, const Rect2 &p_src_rect = Rect2());
368+
void copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_alpha_to_zero = false, bool p_srgb = false, RID p_secondary = RID(), bool p_multiview = false, bool alpha_to_one = false, bool p_linear = false, bool p_normal = false, const Rect2 &p_src_rect = Rect2(), float p_linear_luminance_multiplier = 1.0);
332369
void copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2 &p_uv_rect, RD::DrawListID p_draw_list, bool p_flip_y = false, bool p_panorama = false);
333-
void copy_to_drawlist(RD::DrawListID p_draw_list, RD::FramebufferFormatID p_fb_format, RID p_source_rd_texture, bool p_linear = false);
370+
void copy_to_drawlist(RD::DrawListID p_draw_list, RD::FramebufferFormatID p_fb_format, RID p_source_rd_texture, bool p_linear = false, float p_linear_luminance_multiplier = 1.0);
334371
void copy_raster(RID p_source_texture, RID p_dest_framebuffer);
335372

336373
void gaussian_blur(RID p_source_rd_texture, RID p_texture, const Rect2i &p_region, const Size2i &p_size, bool p_8bit_dst = false);
@@ -346,13 +383,13 @@ class CopyEffects {
346383
void set_color_raster(RID p_dest_texture, const Color &p_color, const Rect2i &p_region);
347384

348385
void copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip);
349-
void cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size);
350-
void cubemap_downsample_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size);
351-
void cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array);
352-
void cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level);
353-
354-
void cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
355-
void cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
386+
void copy_cubemap_to_octmap(RID p_source_rd_texture, RID p_dst_framebuffer, float p_border_size);
387+
void octmap_downsample(RID p_source_octmap, RID p_dest_octmap, const Size2i &p_size, bool p_use_filter_quality, float p_border_size);
388+
void octmap_downsample_raster(RID p_source_octmap, RID p_dest_framebuffer, const Size2i &p_size, bool p_use_filter_quality, float p_border_size);
389+
void octmap_filter(RID p_source_octmap, const Vector<RID> &p_dest_octmap, bool p_use_array, float p_border_size);
390+
void octmap_filter_raster(RID p_source_octmap, RID p_dest_framebuffer, uint32_t p_mip_level, float p_border_size);
391+
void octmap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_sample_count, float p_roughness, uint32_t p_source_size, uint32_t p_dest_size, float p_border_size);
392+
void octmap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_sample_count, float p_roughness, uint32_t p_source_size, uint32_t p_dest_size, float p_border_size);
356393

357394
void merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection, uint32_t p_view_count);
358395
};

servers/rendering/renderer_rd/environment/fog.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ void Fog::fog_instance_free(RID p_rid) {
211211
////////////////////////////////////////////////////////////////////////////////
212212
// Volumetric Fog Shader
213213

214-
void Fog::init_fog_shader(uint32_t p_max_directional_lights, int p_roughness_layers, bool p_is_using_radiance_cubemap_array) {
214+
void Fog::init_fog_shader(uint32_t p_max_directional_lights, int p_roughness_layers, bool p_is_using_radiance_octmap_array) {
215215
MaterialStorage *material_storage = MaterialStorage::get_singleton();
216216

217217
{
@@ -302,8 +302,8 @@ ALBEDO = vec3(1.0);
302302
{
303303
String defines = "\n#define MAX_DIRECTIONAL_LIGHT_DATA_STRUCTS " + itos(p_max_directional_lights) + "\n";
304304
defines += "\n#define MAX_SKY_LOD " + itos(p_roughness_layers - 1) + ".0\n";
305-
if (p_is_using_radiance_cubemap_array) {
306-
defines += "\n#define USE_RADIANCE_CUBEMAP_ARRAY \n";
305+
if (p_is_using_radiance_octmap_array) {
306+
defines += "\n#define USE_RADIANCE_OCTMAP_ARRAY \n";
307307
}
308308
Vector<ShaderRD::VariantDefine> volumetric_fog_modes;
309309
int shader_group = 0;
@@ -977,7 +977,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
977977
RD::Uniform u;
978978
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
979979
u.binding = 19;
980-
RID radiance_texture = texture_storage->texture_rd_get_default(p_settings.is_using_radiance_cubemap_array ? RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK : RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_CUBEMAP_BLACK);
980+
RID radiance_texture = texture_storage->texture_rd_get_default(p_settings.is_using_radiance_octmap_array ? RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_2D_ARRAY_BLACK : RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_BLACK);
981981
RID sky_texture = RendererSceneRenderRD::get_singleton()->environment_get_sky(p_settings.env).is_valid() ? p_settings.sky->sky_get_radiance_texture_rd(RendererSceneRenderRD::get_singleton()->environment_get_sky(p_settings.env)) : RID();
982982
u.append_id(sky_texture.is_valid() ? sky_texture : radiance_texture);
983983
uniforms.push_back(u);
@@ -1118,6 +1118,13 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
11181118
params.use_temporal_reprojection = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection(p_settings.env);
11191119
params.temporal_blend = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection_amount(p_settings.env);
11201120

1121+
RID sky_rid = RendererSceneRenderRD::get_singleton()->environment_get_sky(p_settings.env);
1122+
if (sky_rid.is_valid()) {
1123+
float uv_border_size = p_settings.sky->sky_get_uv_border_size(sky_rid);
1124+
params.sky_border_size[0] = uv_border_size;
1125+
params.sky_border_size[1] = 1.0f - uv_border_size * 2.0f;
1126+
}
1127+
11211128
{
11221129
uint32_t cluster_size = p_settings.cluster_builder->get_cluster_size();
11231130
params.cluster_shift = get_shift_from_power_of_2(cluster_size);

servers/rendering/renderer_rd/environment/fog.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ class Fog : public RendererFog {
182182
uint32_t temporal_frame;
183183
float temporal_blend;
184184

185+
float sky_border_size[2];
186+
float pad[2];
187+
185188
float cam_rotation[12];
186189
float to_prev_view[16];
187190
float radiance_inverse_xform[12];
@@ -340,13 +343,13 @@ class Fog : public RendererFog {
340343
~VolumetricFog();
341344
};
342345

343-
void init_fog_shader(uint32_t p_max_directional_lights, int p_roughness_layers, bool p_is_using_radiance_cubemap_array);
346+
void init_fog_shader(uint32_t p_max_directional_lights, int p_roughness_layers, bool p_is_using_radiance_octmap_array);
344347
void free_fog_shader();
345348

346349
struct VolumetricFogSettings {
347350
Vector2i rb_size;
348351
double time;
349-
bool is_using_radiance_cubemap_array;
352+
bool is_using_radiance_octmap_array;
350353
uint32_t max_cluster_elements;
351354
bool volumetric_fog_filter_active;
352355
RID shadow_sampler;

servers/rendering/renderer_rd/environment/gi.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,10 @@ void GI::SDFGI::update_probes(RID p_env, SkyRD::Sky *p_sky) {
13061306
push_constant.image_size[1] = probe_axis_count;
13071307
push_constant.store_ambient_texture = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_enabled(p_env);
13081308

1309+
const float sky_irradiance_border_size = p_sky != nullptr ? p_sky->uv_border_size : 0.0f;
1310+
push_constant.sky_irradiance_border_size[0] = sky_irradiance_border_size;
1311+
push_constant.sky_irradiance_border_size[1] = 1.0 - sky_irradiance_border_size * 2.0f;
1312+
13091313
RID sky_uniform_set = gi->sdfgi_shader.integrate_default_sky_uniform_set;
13101314
push_constant.sky_flags = 0;
13111315
push_constant.y_mult = y_mult;
@@ -3521,8 +3525,8 @@ void GI::init(SkyRD *p_sky) {
35213525
//calculate tables
35223526
String defines = "\n#define OCT_SIZE " + itos(SDFGI::LIGHTPROBE_OCT_SIZE) + "\n";
35233527
defines += "\n#define SH_SIZE " + itos(SDFGI::SH_SIZE) + "\n";
3524-
if (p_sky->sky_use_cubemap_array) {
3525-
defines += "\n#define USE_CUBEMAP_ARRAY\n";
3528+
if (p_sky->sky_use_octmap_array) {
3529+
defines += "\n#define USE_OCTMAP_ARRAY\n";
35263530
}
35273531

35283532
Vector<String> integrate_modes;
@@ -3544,10 +3548,10 @@ void GI::init(SkyRD *p_sky) {
35443548
RD::Uniform u;
35453549
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
35463550
u.binding = 0;
3547-
if (p_sky->sky_use_cubemap_array) {
3548-
u.append_id(texture_storage->texture_rd_get_default(RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_WHITE));
3551+
if (p_sky->sky_use_octmap_array) {
3552+
u.append_id(texture_storage->texture_rd_get_default(RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE));
35493553
} else {
3550-
u.append_id(texture_storage->texture_rd_get_default(RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_CUBEMAP_WHITE));
3554+
u.append_id(texture_storage->texture_rd_get_default(RendererRD::TextureStorage::DEFAULT_RD_TEXTURE_WHITE));
35513555
}
35523556
uniforms.push_back(u);
35533557
}

servers/rendering/renderer_rd/environment/gi.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,9 @@ class GI : public RendererGI {
419419
float sky_color_or_orientation[3];
420420
float y_mult;
421421

422+
float sky_irradiance_border_size[2];
422423
uint32_t store_ambient_texture;
423-
uint32_t pad[3];
424+
uint32_t pad;
424425
};
425426

426427
SdfgiIntegrateShaderRD integrate;

0 commit comments

Comments
 (0)