[Bf-blender-cvs] [cf6e45b5224] blender2.8: Eevee: Fix Black volumetrics.

Clément Foucault noreply at git.blender.org
Wed Nov 1 18:49:03 CET 2017


Commit: cf6e45b5224d16263d7c87411a2ff71ed928410f
Author: Clément Foucault
Date:   Wed Nov 1 18:48:55 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBcf6e45b5224d16263d7c87411a2ff71ed928410f

Eevee: Fix Black volumetrics.

Was caused by a division by 0.

===================================================================

M	source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
M	source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
index 68729c6b02b..b3f5e8b60ad 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
@@ -61,7 +61,7 @@ float phase_function(vec3 v, vec3 l, float g)
 	float cos_theta = dot(v, l);
 	g = clamp(g, -1.0 + 1e-3, 1.0 - 1e-3);
 	float sqr_g = g * g;
-	return (1- sqr_g) / (4.0 * M_PI * pow(1 + sqr_g - 2 * g * cos_theta, 3.0 / 2.0));
+	return (1- sqr_g) / max(1e-8, 4.0 * M_PI * pow(1 + sqr_g - 2 * g * cos_theta, 3.0 / 2.0));
 }
 
 #ifdef LAMPS_LIB
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl
index af7e0f0d17e..ea402ff3d99 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl
@@ -39,7 +39,7 @@ void main()
 	vec3 wdir = cameraVec;
 
 	vec2 phase = texelFetch(volumePhase, volume_cell, 0).rg;
-	float s_anisotropy = phase.x / phase.y;
+	float s_anisotropy = phase.x / max(1.0, phase.y);
 
 	/* Environment : Average color. */
 	outScattering.rgb += irradiance_volumetric(worldPosition) * s_scattering * phase_function_isotropic();
@@ -78,6 +78,6 @@ void main()
 	/* Catch NaNs */
 	if (any(isnan(outScattering)) || any(isnan(outTransmittance))) {
 		outScattering = vec4(0.0);
-		outTransmittance = vec4(0.0);
+		outTransmittance = vec4(1.0);
 	}
 }



More information about the Bf-blender-cvs mailing list