[Bf-committers] Random IPO Generator

Reuben Martin reuben.m at gmail.com
Tue Jan 10 21:05:20 CET 2006

Hi,

I just now joined this list because I wanted to see if anybody would
be interested in fleshing out an idea I had for being able to generate
random IPO curves. They're not _totally_ random, but they would allow
the user to set some variables that would set the limits and
characteristics of the generated IPO curves.

The practical use for this would be in situations where the user wants
to create some controlled randomness in the IPO driver without having
to go through the tedious process of manually creating the IPO curves.
For instance, when using wind, a user might want to add turbulence by
adjusting the "speed" setting to make it's effect on softbodies or
particles more animated. This is a case where the work flow of
adjusting the IPO curves could easily be speed up be able to set
limits and then letting the IPO curves be randomly set for the
duration of the scene. Should the user wish to manually adjust them,
they could always go and do that after the curves are generated.

I hope the following "sudo-code" will give an idea of what I'm talking
about. (Yes, it's awful, but I haven't written serious code in almost
10 years)

var max_ipo_value;	//sets upper limit for the IPO
var min_ipo_value;	//sets lower limit for the IPO
var ipo_value;		//the value that the random IPO key will have
var ipo_time;		//the time at which the random IPO key will be placed
var speed;		//the higher the value, the slower the IPO curves move
var momentum;		//the lower the value, the more erratic the IPO curves are
var step_sze;		//the higher the value, the steeper the slope of the IPO curves

direction = generate_random_bool();

if (direction = true) then (
for (i = 0, i < momentum, i++) do (
ipo_value += step_size;
if (ipo_value > max_ipo_value) then ipo_value = max_ipo_value;
ipo_time += speed;
set_ipo_key (ipo_value, ipo_time);
)
)

else (
for (i = 0, i < momentum, i++) do (
ipo_value -= step_size;
if (ipo_value < min_ipo_value) then ipo_value = min_ipo_value;
ipo_time += speed;
set_ipo_key (ipo_value, ipo_time);
)
)

Hope that gives the "general idea" of how the randomness would be controlled.

So... Does this interest anybody? Suggestions?

regards,
-Reuben