If you execute the rand, sphrand, and gauss functions repeatedly in an expression, Maya returns a sequence of random numbers. (See Introduction to random number functions for details on these functions.) Each time you rewind and play your animation, the sequence of random numbers is different. Often, you’ll want to generate a sequence of random numbers that repeats each time your animation plays.
For instance, suppose you use the rand function to assign a random radius to each particle in a stream of emitted particles rendered as Spheres. By default, Maya gives the particles a different sequence of random radius values each time your animation plays.
To create the same radius values each time the animation plays, you can use the seed function in an expression before the rand, sphrand, or gauss functions execute. There’s no need to execute the seed function more than once per animation unless you need to generate several different repeating sequences of random numbers as your animation plays.
This seed value is unrelated to the Seed attribute available in the particle shape node. The seed function therefore doesn’t affect randomness created with dynamics.
Suppose you use the rand function to position several marbles at random translateX positions in your scene at frame 1:
if (frame == 1) { marble1.tx = rand(-10,10); marble2.tx = rand(-10,10); marble3.tx = rand(-10,10); marble4.tx = rand(-10,10); }
The rand(-10,10) returns a random number between -10 and 10 each time it executes. When you rewind the animation to frame 1, Maya might assign these values to the translateX attributes of the marbles:
Attribute | Value |
---|---|
marble1.tx | 2.922 |
marble2.tx | 5.963 |
marble3.tx | -4.819 |
marble4.tx | 7.186 |
The next time you rewind the animation to frame 1, each marble’s translateX attribute receives a different random value. Maya might assign these values:
Attribute | Value |
---|---|
marble1.tx | -3.972 |
marble2.tx | 9.108 |
marble3.tx | -7.244 |
marble4.tx | -3.065 |
You might prefer the marbles’ translateX values to stay the same when you rewind, for instance, so you can composite the marbles correctly among a foggy backdrop.
You can use the seed function to keep the sequence of random values returned by the rand function consistent when you rewind the animation.
if (frame == 1) { seed(10); marble1.tx = rand(-10,10); marble2.tx = rand(-10,10); marble3.tx = rand(-10,10); marble4.tx = rand(-10,10); }
By setting the seed value to an arbitrary number, for instance, 10, the subsequent executions of the rand function return a repeating sequence of random numbers.
When you rewind the animation the first time, Maya might assign these values to the translateX attributes of the marbles:
Attribute | Value |
---|---|
marble1.tx | 8.020 |
marble2.tx | -2.973 |
marble3.tx | -7.709 |
marble4.tx | 0.741 |
Each time you rewind the animation thereafter, Maya assigns these same values to the translateX attributes of the marbles. The marbles don’t move.
Each time a statement sets the seed value to 10, the subsequent executions of the rand function return numbers from the sequence starting at the beginning number. In other words, resetting the seed value to 10 restarts the random number generation process to the first value in the sequence.
Suppose you alter the expression to this:
if (frame == 1) { seed(10); } marble1.tx = rand(-10,10); marble2.tx = rand(-10,10); marble3.tx = rand(-10,10); marble4.tx = rand(-10,10);
When you rewind the animation to frame 1, the expression sets the seed to 10. Maya assigns values to the marbles’ translateX attributes as in the previous expression.
Because the expression doesn’t set the seed value in frames other than frame 1, playing the animation causes the rand function to return a new, yet repeating, sequence of random numbers each frame. If you play the animation several times, the translateX values will constantly change during animation, but the sequence of values will be identical each time you play the animation.
You can assign the seed a different value to generate a different sequence of returned values. See seed for details.