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:
authorClément Foucault <foucault.clem@gmail.com>2019-06-06 19:46:35 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-06-06 19:47:36 +0300
commit73252d3f60053bc3f949abaa08a5eb37fcd227a2 (patch)
treed95dc9e11ba48427b31da9210bbe99f78e90badd /source/blender/draw/engines/eevee
parent8db514f81dc1309d30e6741f85d99a9ca4ffccff (diff)
Fix T63701 Eevee: High Volumetric end distance darkens the image
Diffstat (limited to 'source/blender/draw/engines/eevee')
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl16
2 files changed, 9 insertions, 9 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
index 052fdbb43a2..4096fc2d511 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
@@ -50,7 +50,7 @@ void main()
#endif
volumeScattering = vec4(cl.scatter, 1.0);
- volumeExtinction = vec4(max(vec3(1e-4), cl.absorption + cl.scatter), 1.0);
+ volumeExtinction = vec4(cl.absorption + cl.scatter, 1.0);
volumeEmissive = vec4(cl.emission, 1.0);
/* Do not add phase weight if no scattering. */
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl
index 83ed9067087..e756cafba52 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl
@@ -10,14 +10,14 @@ uniform sampler3D volumeExtinction;
flat in int slice;
-layout(location = 0) out vec4 finalScattering;
-layout(location = 1) out vec4 finalTransmittance;
+layout(location = 0) out vec3 finalScattering;
+layout(location = 1) out vec3 finalTransmittance;
void main()
{
/* Start with full transmittance and no scattered light. */
- finalScattering = vec4(0.0);
- finalTransmittance = vec4(1.0);
+ finalScattering = vec3(0.0);
+ finalTransmittance = vec3(1.0);
vec3 tex_size = vec3(textureSize(volumeScattering, 0).xyz);
@@ -42,8 +42,8 @@ void main()
for (int i = 0; i < slice; ++i) {
ivec3 volume_cell = ivec3(gl_FragCoord.xy, i);
- vec4 Lscat = texelFetch(volumeScattering, volume_cell, 0);
- vec4 s_extinction = texelFetch(volumeExtinction, volume_cell, 0);
+ vec3 Lscat = texelFetch(volumeScattering, volume_cell, 0).rgb;
+ vec3 s_extinction = texelFetch(volumeExtinction, volume_cell, 0).rgb;
float cell_depth = volume_z_to_view_z((float(i) + 1.0) / tex_size.z);
float ray_len = orig_ray_len * cell_depth;
@@ -51,10 +51,10 @@ void main()
/* Evaluate Scattering */
float s_len = abs(ray_len - prev_ray_len);
prev_ray_len = ray_len;
- vec4 Tr = exp(-s_extinction * s_len);
+ vec3 Tr = exp(-s_extinction * s_len);
/* integrate along the current step segment */
- Lscat = (Lscat - Lscat * Tr) / s_extinction;
+ Lscat = (Lscat - Lscat * Tr) / max(vec3(1e-8), s_extinction);
/* accumulate and also take into account the transmittance from previous steps */
finalScattering += finalTransmittance * Lscat;