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