Cycles: small tweak to checker texture, scale rather than add with epsilon,
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 9 Jan 2012 16:57:26 +0000 (16:57 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 9 Jan 2012 16:57:26 +0000 (16:57 +0000)
looks a bit better on all sides of a mesh.

intern/cycles/kernel/svm/svm_checker.h

index 8dda5e3052b9616091915a92f9dbdfd5816f901e..bee0cc57689772faad7f3e247d141ca1e20b0624 100644 (file)
@@ -24,11 +24,15 @@ __device_noinline float svm_checker(float3 p, float scale)
 {      
        p *= scale;
 
-       /* 0.00001  because of unit sized stuff */
-       int xi = (int)fabsf(floor(0.00001f + p.x));
-       int yi = (int)fabsf(floor(0.00001f + p.y));
-       int zi = (int)fabsf(floor(0.00001f + p.z));
-       
+       /* avoid precision issues on unit coordinates */
+       p.x = (p.x + 0.00001f)*0.9999f;
+       p.y = (p.y + 0.00001f)*0.9999f;
+       p.z = (p.z + 0.00001f)*0.9999f;
+
+       int xi = (int)fabsf(floorf(p.x));
+       int yi = (int)fabsf(floorf(p.y));
+       int zi = (int)fabsf(floorf(p.z));
+
        return ((xi % 2 == yi % 2) == (zi % 2))? 1.0f: 0.0f;
 }