Revision: 56113
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56113
Author:   blendix
Date:     2013-04-17 14:48:01 +0000 (Wed, 17 Apr 2013)
Log Message:
-----------
Cycles: initialize LCG for sss and hair sampling without using the sobol 
sampler,
slightly faster but also fixes the u/v sampling dimensions not longer being at 
even
values which is needed for best results.

Modified Paths:
--------------
    trunk/blender/intern/cycles/kernel/kernel_path.h
    trunk/blender/intern/cycles/kernel/kernel_random.h
    trunk/blender/intern/cycles/kernel/kernel_types.h

Modified: trunk/blender/intern/cycles/kernel/kernel_path.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_path.h    2013-04-17 14:47:58 UTC 
(rev 56112)
+++ trunk/blender/intern/cycles/kernel/kernel_path.h    2013-04-17 14:48:01 UTC 
(rev 56113)
@@ -258,8 +258,7 @@
                        difl = kernel_data.curve_kernel_data.minimum_width * 
len(pixdiff) * 0.5f;
                }
                float extmax = kernel_data.curve_kernel_data.maximum_width;
-               float rng_hair_seed = path_rng(kg, rng, sample, rng_offset + 
PRNG_HAIR);
-               uint lcg_state = lcg_init(rng_hair_seed);
+               uint lcg_state = lcg_init(*rng + rng_offset + sample);
 
                bool hit = scene_intersect(kg, &ray, visibility, &isect, 
&lcg_state, difl, extmax);
 #else
@@ -377,7 +376,7 @@
 
                        /* do bssrdf scatter step if we picked a bssrdf closure 
*/
                        if(sc) {
-                               uint lcg_state = lcg_init(rbsdf);
+                               uint lcg_state = lcg_init(*rng + rng_offset + 
sample);
                                subsurface_scatter_step(kg, &sd, state.flag, 
sc, &lcg_state, false);
                        }
                }
@@ -601,7 +600,7 @@
 
                        /* do bssrdf scatter step if we picked a bssrdf closure 
*/
                        if(sc) {
-                               uint lcg_state = lcg_init(rbsdf);
+                               uint lcg_state = lcg_init(*rng + rng_offset + 
sample);
                                subsurface_scatter_step(kg, &sd, state.flag, 
sc, &lcg_state, false);
                        }
                }
@@ -930,8 +929,7 @@
                        difl = kernel_data.curve_kernel_data.minimum_width * 
len(pixdiff) * 0.5f;
                }
                float extmax = kernel_data.curve_kernel_data.maximum_width;
-               float rng_hair_seed = path_rng(kg, rng, sample, rng_offset + 
PRNG_HAIR);
-               uint lcg_state = lcg_init(rng_hair_seed);
+               uint lcg_state = lcg_init(*rng + rng_offset + sample);
 
                if(!scene_intersect(kg, &ray, visibility, &isect, &lcg_state, 
difl, extmax)) {
 #else
@@ -1017,7 +1015,7 @@
                                        continue;
 
                                /* set up random number generator */
-                               uint lcg_state = lcg_init(rbsdf);
+                               uint lcg_state = lcg_init(*rng + rng_offset + 
sample);
                                int num_samples = 
kernel_data.integrator.subsurface_samples;
                                float num_samples_inv = 1.0f/num_samples;
 

Modified: trunk/blender/intern/cycles/kernel/kernel_random.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_random.h  2013-04-17 14:47:58 UTC 
(rev 56112)
+++ trunk/blender/intern/cycles/kernel/kernel_random.h  2013-04-17 14:48:01 UTC 
(rev 56113)
@@ -207,9 +207,9 @@
        return (float)*rng * (1.0f/(float)0xFFFFFFFF);
 }
 
-__device uint lcg_init(float seed)
+__device uint lcg_init(uint seed)
 {
-       uint rng = __float_as_int(seed);
+       uint rng = seed;
        lcg_step(&rng);
        return rng;
 }

Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_types.h   2013-04-17 14:47:58 UTC 
(rev 56112)
+++ trunk/blender/intern/cycles/kernel/kernel_types.h   2013-04-17 14:48:01 UTC 
(rev 56113)
@@ -159,8 +159,7 @@
        PRNG_LIGHT_V = 5,
        PRNG_LIGHT_F = 6,
        PRNG_TERMINATE = 7,
-       PRNG_HAIR = 8,
-       PRNG_BOUNCE_NUM = 9
+       PRNG_BOUNCE_NUM = 8
 };
 
 /* these flags values correspond to raytypes in osl.cpp, so keep them in sync!

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

Reply via email to