Commit: 2d6e1ddb94a3bcedf3dae486c4c533b015e3311f
Author: Erik Englesson
Date:   Tue Jul 10 11:32:14 2018 +0200
Branches: gsoc-2018-many-light-sampling
https://developer.blender.org/rB2d6e1ddb94a3bcedf3dae486c4c533b015e3311f

Cycles: Updated rescaling of random numbers

The new paper describes how they rescale the
random numbers in the tree traversal. We do
the same now.

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

M       intern/cycles/kernel/kernel_light.h
M       intern/cycles/kernel/kernel_path_surface.h

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

diff --git a/intern/cycles/kernel/kernel_light.h 
b/intern/cycles/kernel/kernel_light.h
index 5ded315881a..57f238425ee 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -1180,7 +1180,6 @@ ccl_device void light_bvh_sample(KernelGlobals *kg, 
float3 P, float randu,
                        if(num_emitters == 1){
                                sampled_index = distribution_id;
                        } else { // Leaf with several lights. Pick one randomly.
-                               light_distribution_sample(kg, &randu); // TODO: 
Rescale random number in a better way
                                int light = min((int)(randu* 
(float)num_emitters), num_emitters-1);
                                sampled_index = distribution_id +light;
                                *pdf_factor *= 1.0f / (float)num_emitters;
@@ -1196,11 +1195,16 @@ ccl_device void light_bvh_sample(KernelGlobals *kg, 
float3 P, float randu,
                        float P_L = I_L / ( I_L + I_R);
 
                        /* choose which node to go down */
-                       light_distribution_sample(kg, &randu); // TODO: Rescale 
random number in a better way
                        if(randu <= P_L){ // Going down left node
+                               /* rescale random number */
+                               randu = randu / P_L;
+
                                offset = child_offsetL;
                                *pdf_factor *= P_L;
                        } else { // Going down right node
+                               /* rescale random number */
+                               randu = (randu * (I_L + I_R) - I_L)/I_R;
+
                                offset = child_offsetR;
                                *pdf_factor *= 1.0f - P_L;
                        }
diff --git a/intern/cycles/kernel/kernel_path_surface.h 
b/intern/cycles/kernel/kernel_path_surface.h
index a344f43d786..da366bca530 100644
--- a/intern/cycles/kernel/kernel_path_surface.h
+++ b/intern/cycles/kernel/kernel_path_surface.h
@@ -126,9 +126,6 @@ ccl_device void accum_light_tree_contribution(KernelGlobals 
*kg, float randu,
                                               ShaderData *sd, ShaderData 
*emission_sd,
                                               int *num_lights)
 {
-       /* TODO: sort out randu and randv rescaling */
-       light_distribution_sample(kg, &randu);
-       light_distribution_sample(kg, &randv);
 
        float3 P = sd->P;
        float time = sd->time;
@@ -187,11 +184,17 @@ ccl_device void 
accum_light_tree_contribution(KernelGlobals *kg, float randu,
                        float I_L = calc_node_importance(kg, P, child_offsetL);
                        float I_R = calc_node_importance(kg, P, child_offsetR);
                        float P_L = I_L / ( I_L + I_R);
-                       light_distribution_sample(kg, &randu);
+
                        if(randu <= P_L){ // Going down left node
+                               /* rescale random number */
+                               randu = randu / P_L;
+
                                offset = child_offsetL;
                                pdf_factor *= P_L;
                        } else { // Going down right node
+                               /* rescale random number */
+                               randu = (randu * (I_L + I_R) - I_L)/I_R;
+
                                offset = child_offsetR;
                                pdf_factor *= 1.0f - P_L;
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to