diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml
index 367942682e18..3b761ca3e722 100644
--- a/doc/classes/ReflectionProbe.xml
+++ b/doc/classes/ReflectionProbe.xml
@@ -34,6 +34,9 @@
If [code]true[/code], computes shadows in the reflection probe. This makes the reflection probe slower to render; you may want to disable this if using the [constant UPDATE_ALWAYS] [member update_mode].
+
+ The percentage of the distance from the origin at which reflections will start fading to other reflection sources (such as other [ReflectionProbe]s or the environment sky reflections). Higher values make the [ReflectionProbe] more visible, with more aggressive fading in the corners. If you have trouble with sky reflections being visible in partially indoor areas, increase [member fade_start].
+
Defines the reflection intensity. Intensity modulates the strength of the reflection.
diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml
index b73315219b66..b99a9808807a 100644
--- a/doc/classes/RenderingServer.xml
+++ b/doc/classes/RenderingServer.xml
@@ -3150,6 +3150,14 @@
If [code]true[/code], computes shadows in the reflection probe. This makes the reflection much slower to compute. Equivalent to [member ReflectionProbe.enable_shadows].
+
+
+
+
+
+ Sets the percentage of the distance from the origin at which reflections will start fading to other reflection sources (such as other [ReflectionProbe]s or the environment sky reflections). Higher values make the [ReflectionProbe] more visible, with more aggressive fading in the corners. If you have trouble with sky reflections being visible in partially indoor areas, increase [method reflection_probe_set_fade_start]. Equivalent to [member ReflectionProbe.fade_start].
+
+
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index c2d17849580a..62ec8bf3c96f 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -3398,6 +3398,7 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_BOX_OFFSET, probe->origin_offset, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_EXTERIOR, !probe->interior, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_INTENSITY, probe->intensity, shader->version, instance_variant, spec_constants);
+ material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_INV_FADE_START, 1.0 / MAX(0.00001, 1.0 - probe->fade_start), shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_AMBIENT_MODE, int(probe->ambient_mode), shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_AMBIENT_COLOR, probe->ambient_color * probe->ambient_color_energy, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE1_LOCAL_MATRIX, inst->reflection_probes_local_transform_cache[0], shader->version, instance_variant, spec_constants);
@@ -3416,6 +3417,7 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_BOX_OFFSET, probe->origin_offset, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_EXTERIOR, !probe->interior, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_INTENSITY, probe->intensity, shader->version, instance_variant, spec_constants);
+ material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_INV_FADE_START, 1.0 / MAX(0.00001, 1.0 - probe->fade_start), shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_AMBIENT_MODE, int(probe->ambient_mode), shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_AMBIENT_COLOR, probe->ambient_color * probe->ambient_color_energy, shader->version, instance_variant, spec_constants);
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::REFPROBE2_LOCAL_MATRIX, inst->reflection_probes_local_transform_cache[1], shader->version, instance_variant, spec_constants);
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl
index 9ce10a4488c4..0a0305bc1b8b 100644
--- a/drivers/gles3/shaders/scene.glsl
+++ b/drivers/gles3/shaders/scene.glsl
@@ -874,6 +874,7 @@ uniform vec3 refprobe1_box_offset;
uniform highp mat4 refprobe1_local_matrix;
uniform bool refprobe1_exterior;
uniform float refprobe1_intensity;
+uniform float refprobe1_inv_fade_start;
uniform int refprobe1_ambient_mode;
uniform vec4 refprobe1_ambient_color;
@@ -887,6 +888,7 @@ uniform vec3 refprobe2_box_offset;
uniform highp mat4 refprobe2_local_matrix;
uniform bool refprobe2_exterior;
uniform float refprobe2_intensity;
+uniform float refprobe2_inv_fade_start;
uniform int refprobe2_ambient_mode;
uniform vec4 refprobe2_ambient_color;
@@ -1587,7 +1589,7 @@ void reflection_process(samplerCube reflection_map,
vec3 normal, vec3 vertex,
mat4 local_matrix,
bool use_box_project, vec3 box_extents, vec3 box_offset,
- bool exterior, float intensity, int ref_ambient_mode, vec4 ref_ambient_color,
+ bool exterior, float intensity, float inv_fade_start, int ref_ambient_mode, vec4 ref_ambient_color,
float roughness, vec3 ambient, vec3 skybox,
inout highp vec4 reflection_accum, inout highp vec4 ambient_accum) {
vec4 reflection;
@@ -1602,7 +1604,7 @@ void reflection_process(samplerCube reflection_map,
float blend = max(inner_pos.x, max(inner_pos.y, inner_pos.z));
blend = mix(length(inner_pos), blend, blend);
blend *= blend;
- blend = max(0.0, 1.0 - blend);
+ blend = clamp(inv_fade_start - blend * inv_fade_start, 0.0, 1.0);
//reflect and make local
vec3 ref_normal = normalize(reflect(vertex, normal));
@@ -1961,14 +1963,14 @@ void main() {
reflection_process(refprobe1_texture, normal, vertex_interp, refprobe1_local_matrix,
refprobe1_use_box_project, refprobe1_box_extents, refprobe1_box_offset,
- refprobe1_exterior, refprobe1_intensity, refprobe1_ambient_mode, refprobe1_ambient_color,
+ refprobe1_exterior, refprobe1_intensity, refprobe1_inv_fade_start, refprobe1_ambient_mode, refprobe1_ambient_color,
roughness, ambient_light, specular_light, reflection_accum, ambient_accum);
#ifdef SECOND_REFLECTION_PROBE
reflection_process(refprobe2_texture, normal, vertex_interp, refprobe2_local_matrix,
refprobe2_use_box_project, refprobe2_box_extents, refprobe2_box_offset,
- refprobe2_exterior, refprobe2_intensity, refprobe2_ambient_mode, refprobe2_ambient_color,
+ refprobe2_exterior, refprobe2_intensity, refprobe2_inv_fade_start, refprobe2_ambient_mode, refprobe2_ambient_color,
roughness, ambient_light, specular_light, reflection_accum, ambient_accum);
#endif // SECOND_REFLECTION_PROBE
diff --git a/drivers/gles3/storage/light_storage.cpp b/drivers/gles3/storage/light_storage.cpp
index 9b976c220683..8f017186db91 100644
--- a/drivers/gles3/storage/light_storage.cpp
+++ b/drivers/gles3/storage/light_storage.cpp
@@ -454,6 +454,13 @@ void LightStorage::reflection_probe_set_intensity(RID p_probe, float p_intensity
reflection_probe->intensity = p_intensity;
}
+void LightStorage::reflection_probe_set_fade_start(RID p_probe, float p_fade_start) {
+ ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
+ ERR_FAIL_NULL(reflection_probe);
+
+ reflection_probe->fade_start = p_fade_start;
+}
+
void LightStorage::reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) {
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
ERR_FAIL_NULL(reflection_probe);
diff --git a/drivers/gles3/storage/light_storage.h b/drivers/gles3/storage/light_storage.h
index ed00dd235f36..04ce9685c18c 100644
--- a/drivers/gles3/storage/light_storage.h
+++ b/drivers/gles3/storage/light_storage.h
@@ -117,6 +117,7 @@ struct ReflectionProbe {
RS::ReflectionProbeUpdateMode update_mode = RS::REFLECTION_PROBE_UPDATE_ONCE;
int resolution = 256;
float intensity = 1.0;
+ float fade_start = 0.5;
RS::ReflectionProbeAmbientMode ambient_mode = RS::REFLECTION_PROBE_AMBIENT_ENVIRONMENT;
Color ambient_color;
float ambient_color_energy = 1.0;
@@ -639,6 +640,7 @@ class LightStorage : public RendererLightStorage {
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override;
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override;
+ virtual void reflection_probe_set_fade_start(RID p_probe, float p_fade_start) override;
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) override;
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) override;
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) override;
diff --git a/scene/3d/reflection_probe.cpp b/scene/3d/reflection_probe.cpp
index b6ec55286dd0..d235962b8f1d 100644
--- a/scene/3d/reflection_probe.cpp
+++ b/scene/3d/reflection_probe.cpp
@@ -39,6 +39,15 @@ float ReflectionProbe::get_intensity() const {
return intensity;
}
+void ReflectionProbe::set_fade_start(float p_fade_start) {
+ fade_start = p_fade_start;
+ RS::get_singleton()->reflection_probe_set_fade_start(probe, p_fade_start);
+}
+
+float ReflectionProbe::get_fade_start() const {
+ return fade_start;
+}
+
void ReflectionProbe::set_ambient_mode(AmbientMode p_mode) {
ambient_mode = p_mode;
RS::get_singleton()->reflection_probe_set_ambient_mode(probe, RS::ReflectionProbeAmbientMode(p_mode));
@@ -202,6 +211,9 @@ void ReflectionProbe::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_intensity", "intensity"), &ReflectionProbe::set_intensity);
ClassDB::bind_method(D_METHOD("get_intensity"), &ReflectionProbe::get_intensity);
+ ClassDB::bind_method(D_METHOD("set_fade_start", "fade_start"), &ReflectionProbe::set_fade_start);
+ ClassDB::bind_method(D_METHOD("get_fade_start"), &ReflectionProbe::get_fade_start);
+
ClassDB::bind_method(D_METHOD("set_ambient_mode", "ambient"), &ReflectionProbe::set_ambient_mode);
ClassDB::bind_method(D_METHOD("get_ambient_mode"), &ReflectionProbe::get_ambient_mode);
@@ -243,6 +255,7 @@ void ReflectionProbe::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "update_mode", PROPERTY_HINT_ENUM, "Once (Fast),Always (Slow)"), "set_update_mode", "get_update_mode");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "intensity", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_intensity", "get_intensity");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fade_start", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_fade_start", "get_fade_start");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "0,16384,0.1,or_greater,exp,suffix:m"), "set_max_distance", "get_max_distance");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "origin_offset", PROPERTY_HINT_NONE, "suffix:m"), "set_origin_offset", "get_origin_offset");
diff --git a/scene/3d/reflection_probe.h b/scene/3d/reflection_probe.h
index 722129422894..b624f8084f71 100644
--- a/scene/3d/reflection_probe.h
+++ b/scene/3d/reflection_probe.h
@@ -51,6 +51,7 @@ class ReflectionProbe : public VisualInstance3D {
private:
RID probe;
float intensity = 1.0;
+ float fade_start = 0.5;
float max_distance = 0.0;
Vector3 size = Vector3(20, 20, 20);
Vector3 origin_offset = Vector3(0, 0, 0);
@@ -78,6 +79,9 @@ class ReflectionProbe : public VisualInstance3D {
void set_intensity(float p_intensity);
float get_intensity() const;
+ void set_fade_start(float p_fade_start);
+ float get_fade_start() const;
+
void set_ambient_mode(AmbientMode p_mode);
AmbientMode get_ambient_mode() const;
diff --git a/servers/rendering/dummy/storage/light_storage.h b/servers/rendering/dummy/storage/light_storage.h
index c3b63cdbf63f..ec017b25a3af 100644
--- a/servers/rendering/dummy/storage/light_storage.h
+++ b/servers/rendering/dummy/storage/light_storage.h
@@ -122,6 +122,7 @@ class LightStorage : public RendererLightStorage {
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override {}
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override {}
+ virtual void reflection_probe_set_fade_start(RID p_probe, float p_fade_start) override {}
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) override {}
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) override {}
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) override {}
diff --git a/servers/rendering/renderer_rd/shaders/light_data_inc.glsl b/servers/rendering/renderer_rd/shaders/light_data_inc.glsl
index 7488a3f2c731..b0c935776a1b 100644
--- a/servers/rendering/renderer_rd/shaders/light_data_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/light_data_inc.glsl
@@ -37,15 +37,24 @@ struct LightData { //this structure needs to be as packed as possible
struct ReflectionData {
highp vec3 box_extents;
mediump float index;
+
highp vec3 box_offset;
uint mask;
+
mediump vec3 ambient; // ambient color
mediump float intensity;
+
+ mediump float inv_fade_start;
bool exterior;
bool box_project;
uint ambient_mode;
+
float exposure_normalization;
- //0-8 is intensity,8-9 is ambient, mode
+ float pad0;
+ float pad1;
+ float pad2;
+
+ // 0-8 is intensity, 8-9 is ambient, mode
highp mat4 local_matrix; // up to here for spot and omni, rest is for directional
// notes: for ambientblend, use distance to edge to blend between already existing global environment
};
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
index a1a185d0fdf5..a60dc11f9348 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
@@ -919,7 +919,7 @@ void reflection_process(uint ref_index, vec3 vertex, vec3 ref_vec, vec3 normal,
//make blend more rounded
blend = mix(length(inner_pos), blend, blend);
blend *= blend;
- blend = max(0.0, 1.0 - blend);
+ blend = clamp(reflections.data[ref_index].inv_fade_start - blend * reflections.data[ref_index].inv_fade_start, 0.0, 1.0);
if (reflections.data[ref_index].intensity > 0.0) { // compute reflection
diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp
index 8f7190915471..a6bbe22764f6 100644
--- a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp
@@ -1049,6 +1049,13 @@ void LightStorage::reflection_probe_set_intensity(RID p_probe, float p_intensity
reflection_probe->intensity = p_intensity;
}
+void LightStorage::reflection_probe_set_fade_start(RID p_probe, float p_fade_start) {
+ ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
+ ERR_FAIL_NULL(reflection_probe);
+
+ reflection_probe->fade_start = p_fade_start;
+}
+
void LightStorage::reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) {
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
ERR_FAIL_NULL(reflection_probe);
@@ -1249,6 +1256,13 @@ float LightStorage::reflection_probe_get_intensity(RID p_probe) const {
return reflection_probe->intensity;
}
+float LightStorage::reflection_probe_get_fade_start(RID p_probe) const {
+ const ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
+ ERR_FAIL_NULL_V(reflection_probe, 0);
+
+ return reflection_probe->fade_start;
+}
+
bool LightStorage::reflection_probe_is_interior(RID p_probe) const {
const ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
ERR_FAIL_NULL_V(reflection_probe, false);
@@ -1738,6 +1752,7 @@ void LightStorage::update_reflection_probe_buffer(RenderDataRD *p_render_data, c
reflection_ubo.mask = probe->reflection_mask;
reflection_ubo.intensity = probe->intensity;
+ reflection_ubo.inv_fade_start = 1.0 / MAX(0.00001, 1.0 - probe->fade_start);
reflection_ubo.ambient_mode = probe->ambient_mode;
reflection_ubo.exterior = !probe->interior;
diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.h b/servers/rendering/renderer_rd/storage_rd/light_storage.h
index 59303e8a73ca..5e706265eb3e 100644
--- a/servers/rendering/renderer_rd/storage_rd/light_storage.h
+++ b/servers/rendering/renderer_rd/storage_rd/light_storage.h
@@ -222,6 +222,7 @@ class LightStorage : public RendererLightStorage {
RS::ReflectionProbeUpdateMode update_mode = RS::REFLECTION_PROBE_UPDATE_ONCE;
int resolution = 256;
float intensity = 1.0;
+ float fade_start = 0.5;
RS::ReflectionProbeAmbientMode ambient_mode = RS::REFLECTION_PROBE_AMBIENT_ENVIRONMENT;
Color ambient_color;
float ambient_color_energy = 1.0;
@@ -298,14 +299,23 @@ class LightStorage : public RendererLightStorage {
struct ReflectionData {
float box_extents[3];
float index;
+
float box_offset[3];
uint32_t mask;
+
float ambient[3]; // ambient color,
float intensity;
+
+ float inv_fade_start;
uint32_t exterior;
uint32_t box_project;
uint32_t ambient_mode;
+
float exposure_normalization;
+ uint32_t pad0;
+ uint32_t pad1;
+ uint32_t pad2;
+
float local_matrix[16]; // up to here for spot and omni, rest is for directional
};
@@ -816,6 +826,7 @@ class LightStorage : public RendererLightStorage {
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override;
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override;
+ virtual void reflection_probe_set_fade_start(RID p_probe, float p_fade_start) override;
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) override;
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) override;
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) override;
@@ -846,6 +857,7 @@ class LightStorage : public RendererLightStorage {
virtual bool reflection_probe_renders_shadows(RID p_probe) const override;
float reflection_probe_get_intensity(RID p_probe) const;
+ float reflection_probe_get_fade_start(RID p_probe) const;
bool reflection_probe_is_interior(RID p_probe) const;
bool reflection_probe_is_box_projection(RID p_probe) const;
RS::ReflectionProbeAmbientMode reflection_probe_get_ambient_mode(RID p_probe) const;
diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h
index 225a67fb525f..d0a4e044fa7b 100644
--- a/servers/rendering/rendering_server_default.h
+++ b/servers/rendering/rendering_server_default.h
@@ -458,6 +458,7 @@ class RenderingServerDefault : public RenderingServer {
FUNC2(reflection_probe_set_update_mode, RID, ReflectionProbeUpdateMode)
FUNC2(reflection_probe_set_intensity, RID, float)
+ FUNC2(reflection_probe_set_fade_start, RID, float)
FUNC2(reflection_probe_set_ambient_color, RID, const Color &)
FUNC2(reflection_probe_set_ambient_energy, RID, float)
FUNC2(reflection_probe_set_ambient_mode, RID, ReflectionProbeAmbientMode)
diff --git a/servers/rendering/storage/light_storage.h b/servers/rendering/storage/light_storage.h
index 6a0adfa59662..70e5c8552f7e 100644
--- a/servers/rendering/storage/light_storage.h
+++ b/servers/rendering/storage/light_storage.h
@@ -109,6 +109,7 @@ class RendererLightStorage {
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) = 0;
virtual void reflection_probe_set_resolution(RID p_probe, int p_resolution) = 0;
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) = 0;
+ virtual void reflection_probe_set_fade_start(RID p_probe, float p_fade_start) = 0;
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) = 0;
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) = 0;
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) = 0;
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp
index 32ef5261f312..107d5922cfe9 100644
--- a/servers/rendering_server.cpp
+++ b/servers/rendering_server.cpp
@@ -2557,6 +2557,7 @@ void RenderingServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("reflection_probe_create"), &RenderingServer::reflection_probe_create);
ClassDB::bind_method(D_METHOD("reflection_probe_set_update_mode", "probe", "mode"), &RenderingServer::reflection_probe_set_update_mode);
ClassDB::bind_method(D_METHOD("reflection_probe_set_intensity", "probe", "intensity"), &RenderingServer::reflection_probe_set_intensity);
+ ClassDB::bind_method(D_METHOD("reflection_probe_set_fade_start", "probe", "fade_start"), &RenderingServer::reflection_probe_set_fade_start);
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_mode", "probe", "mode"), &RenderingServer::reflection_probe_set_ambient_mode);
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_color", "probe", "color"), &RenderingServer::reflection_probe_set_ambient_color);
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_energy", "probe", "energy"), &RenderingServer::reflection_probe_set_ambient_energy);
diff --git a/servers/rendering_server.h b/servers/rendering_server.h
index 0208a640a527..96f9200c29b8 100644
--- a/servers/rendering_server.h
+++ b/servers/rendering_server.h
@@ -620,6 +620,7 @@ class RenderingServer : public Object {
virtual void reflection_probe_set_update_mode(RID p_probe, ReflectionProbeUpdateMode p_mode) = 0;
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) = 0;
+ virtual void reflection_probe_set_fade_start(RID p_probe, float p_fade_start) = 0;
enum ReflectionProbeAmbientMode {
REFLECTION_PROBE_AMBIENT_DISABLED,