Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h8
-rw-r--r--source/blender/draw/engines/eevee/eevee_volumes.c12
-rw-r--r--source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl14
4 files changed, 27 insertions, 9 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index ca10e01e3f5..cbaf55809c6 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -855,10 +855,10 @@ typedef struct EEVEE_CommonUniformBuffer {
float vol_jitter[3], pad6; /* vec3 */
float vol_coord_scale[4]; /* vec4 */
/* -- 16 byte aligned -- */
- float vol_history_alpha; /* float */
- float vol_light_clamp; /* float */
- float vol_shadow_steps; /* float */
- int vol_use_lights; /* bool */
+ float vol_history_alpha; /* float */
+ float vol_shadow_steps; /* float */
+ int vol_use_lights; /* bool */
+ int vol_use_soft_shadows; /* bool */
/* Screen Space Reflections */
/* -- 16 byte aligned -- */
float ssr_quality, ssr_thickness, ssr_pixelsize[2]; /* vec4 */
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index 52c96bf51e7..136737f7d8b 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -184,7 +184,9 @@ void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
float integration_start = scene_eval->eevee.volumetric_start;
float integration_end = scene_eval->eevee.volumetric_end;
- common_data->vol_light_clamp = scene_eval->eevee.volumetric_light_clamp;
+ /* TODO(fclem) Use clamp to modulate the light radius for
+ * volume lighting and avoid very bright highlights. */
+ // common_data->vol_light_clamp = scene_eval->eevee.volumetric_light_clamp;
common_data->vol_shadow_steps = (float)scene_eval->eevee.volumetric_shadow_samples;
if ((scene_eval->eevee.flag & SCE_EEVEE_VOLUMETRIC_SHADOWS) == 0) {
common_data->vol_shadow_steps = 0;
@@ -216,11 +218,13 @@ void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
}
/* Disable clamp if equal to 0. */
- if (common_data->vol_light_clamp == 0.0) {
- common_data->vol_light_clamp = FLT_MAX;
- }
+ /* TODO(fclem) Re-implement */
+ // if (common_data->vol_light_clamp == 0.0) {
+ // common_data->vol_light_clamp = FLT_MAX;
+ // }
common_data->vol_use_lights = (scene_eval->eevee.flag & SCE_EEVEE_VOLUMETRIC_LIGHTS) != 0;
+ common_data->vol_use_soft_shadows = (scene_eval->eevee.flag & SCE_EEVEE_SHADOW_SOFT) != 0;
if (!e_data.dummy_scatter) {
const float scatter[4] = {0.0f, 0.0f, 0.0f, 0.0f};
diff --git a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
index b3174afc799..d7996ab4bd1 100644
--- a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
@@ -12,9 +12,9 @@ layout(std140) uniform common_block
vec4 volJitter;
vec4 volCoordScale; /* To convert volume uvs to screen uvs */
float volHistoryAlpha;
- float volLightClamp;
float volShadowSteps;
bool volUseLights;
+ bool volUseSoftShadows;
/* Screen Space Reflections */
vec4 ssrParameters;
float ssrBorderFac;
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
index 6d7ddd4e56e..11fd3418a72 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
@@ -127,6 +127,20 @@ vec3 participating_media_extinction(vec3 wpos, sampler3D volume_extinction)
vec3 light_volume_shadow(LightData ld, vec3 ray_wpos, vec4 l_vector, sampler3D volume_extinction)
{
#if defined(VOLUME_SHADOW)
+ /* If light is shadowed, use the shadow vector, if not, reuse the light vector. */
+ if (volUseSoftShadows && ld.l_shadowid >= 0.0) {
+ ShadowData sd = shadows_data[int(ld.l_shadowid)];
+
+ if (ld.l_type == SUN) {
+ l_vector.xyz = shadows_cascade_data[int(sd.sh_data_index)].sh_shadow_vec;
+ /* No need for length, it is recomputed later. */
+ }
+ else {
+ l_vector.xyz = shadows_cube_data[int(sd.sh_data_index)].position.xyz - ray_wpos;
+ l_vector.w = length(l_vector.xyz);
+ }
+ }
+
/* Heterogeneous volume shadows */
float dd = l_vector.w / volShadowSteps;
vec3 L = l_vector.xyz / volShadowSteps;