[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20568] trunk/blender/source/blender/nodes /intern/TEX_nodes/TEX_bricks.c: Bugfix for faulty noise function in bricks node

Robin Allen roblovski at gmail.com
Mon Jun 1 23:22:43 CEST 2009


Revision: 20568
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20568
Author:   kakbarnf
Date:     2009-06-01 23:22:43 +0200 (Mon, 01 Jun 2009)

Log Message:
-----------
Bugfix for faulty noise function in bricks node

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c

Modified: trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c	2009-06-01 20:19:15 UTC (rev 20567)
+++ trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c	2009-06-01 21:22:43 UTC (rev 20568)
@@ -49,12 +49,21 @@
 	node->custom4 = 1.0; /* squash */
 }
 
+static float noise(int n) /* fast integer noise */
+{
+	int nn;
+	n = (n >> 13) ^ n;
+	nn = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;
+	return 0.5f * ((float)nn / 1073741824.0f);
+}
+
 static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
 {
 	float x = coord[0];
 	float y = coord[1];
 	
-	float bricknum, rownum, offset = 0;
+	int bricknum, rownum;
+	float offset = 0;
 	float ins_x, ins_y;
 	float tint;
 	
@@ -71,20 +80,19 @@
 	tex_input_rgba(bricks2, in[1], coord, thread);
 	tex_input_rgba(mortar,  in[2], coord, thread);
 	
-	rownum = floor(y / row_height);
+	rownum = (int)floor(y / row_height);
 	
 	if( node->custom1 && node->custom2 ) {
 		brick_width *= ((int)(rownum) % node->custom2 ) ? 1.0f : node->custom4;      /* squash */
 		offset = ((int)(rownum) % node->custom1 ) ? 0 : (brick_width*node->custom3); /* offset */
 	}
 	
-	bricknum = floor((x+offset) / brick_width);
+	bricknum = (int)floor((x+offset) / brick_width);
 	
 	ins_x = (x+offset) - brick_width*bricknum;
 	ins_y = y - row_height*rownum;
 	
-	srand( (123456*rownum) + bricknum );
-	tint = rand() / (float)RAND_MAX + bias;
+	tint = noise((rownum << 16) + (bricknum & 0xFFFF)) + bias;
 	CLAMP(tint,0.0f,1.0f);
 	
 	if( ins_x < mortar_thickness || ins_y < mortar_thickness ||





More information about the Bf-blender-cvs mailing list