3
$\begingroup$

I'm struggling with how can I create a random color between some range.

To explain better I have this: Cube Node
But I want these each cube has one random color.
My code:

shader RandChecker4(

    point Pos = P,
    float Scale = 1,
    float Rand = 0,
    color Color1 = color(1,0,0),
    color Color2 = color(0,1,0),
    color Color3 = color(0,0,1),
    color Color4 = color(0,1,1),

    output color Col = 0

  ){

    point p = Pos * Scale;
    int x = (int)mod(p[0],2.0);
    int y = (int)mod(p[1],2.0);
    int z = (int)mod(p[2],2.0);

    color Colorlist[4] = {Color1,Color2,Color3,Color4};
    int r = (int)mod(Rand*10,4.0);

    if(x%2==1 && y%2==1 && z%2==1){
        Col = Colorlist[r];
    }

}
$\endgroup$

1 Answer 1

4
$\begingroup$

In order to have each 'square' to be a consistent color you need to change the coordinates fed into the Noise texture to change in discrete steps. This can be achieved using a Modulo function. The Modulo node effectively divides the input value by the specified amount and outputs the remainder. By subtracting the remainder we can produce a 'stepped' value. Since this value does not change over the specified range (in this case 1/7 - to match the scale of the 'squares' texture of 7) the result of the Noise will be constant over that range, resulting in a constant color.

nodes

Note that I also added a Mapping node to offset the coordinates slightly - so that the squares correspond to all faces.

$\endgroup$
1
  • $\begingroup$ woowh.. this is so cool. Thank very much! $\endgroup$ May 18, 2018 at 16:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .