Fix T53914: Volumetric scattering now goes correctly through transparent surfaces.
authorStefan Werner <stefan.werner@tangent-animation.com>
Sat, 27 Jan 2018 09:36:22 +0000 (10:36 +0100)
committerStefan Werner <stefan.werner@tangent-animation.com>
Sat, 27 Jan 2018 20:39:19 +0000 (21:39 +0100)
There was a check for volume bounces at every surface intersection. That could lead to a volume scattered path being terminated
when passing through a transparent surface. This check was superfluous, as the volume shader evaluation already checks the
number of volume bounces and once it passes the max, volume shaders will not return scatter events any more.

Reviewers: #cycles, brecht

Reviewed By: #cycles, brecht

Subscribers: brecht, #cycles

Tags: #cycles

Maniphest Tasks: T53914

Differential Revision: https://developer.blender.org/D3024

intern/cycles/kernel/kernel_path_state.h

index 2ae866bb051996b6b9c1ccb946793e48e606bc5e..e5e915791cbb1b427e35fb53ecef8e64b7f93604 100644 (file)
@@ -179,13 +179,13 @@ ccl_device_inline float path_state_continuation_probability(KernelGlobals *kg,
 #endif
        }
        else {
-               /* Test max bounces for various ray types. */
+               /* Test max bounces for various ray types. 
+                  The check for max_volume_bounce doesn't happen here but inside volume_shader_sample().
+                  See T53914.
+                */
                if((state->bounce >= kernel_data.integrator.max_bounce) ||
                   (state->diffuse_bounce >= kernel_data.integrator.max_diffuse_bounce) ||
                   (state->glossy_bounce >= kernel_data.integrator.max_glossy_bounce) ||
-#ifdef __VOLUME__
-                  (state->volume_bounce >= kernel_data.integrator.max_volume_bounce) ||
-#endif
                   (state->transmission_bounce >= kernel_data.integrator.max_transmission_bounce))
                {
                        return 0.0f;