AWS Thinkbox Discussion Forums

PRT Maker /?

Any help? :smiley:

Completely clueless…

I tried cheating with it and using Jordan’s ModMod to bring up the mxs exposables, not much there that made any sense

I gave it a showProp, it left me a tad bit confused.

Tried some absolutely Randumb BS nothing happened. :blush:

Vague I know, my trig is not so great but anyway.

For example I create a magmaMod and drop in a simple IntputMXS [(random 1 100),(random 1 100),(random 1 100)] -> Output Position

I get the the group jumping around randomly but what I expected was a random distribution of all the particles. That any better?

There will be more about it because it is a strange beast.
It has two sides - you can create a bunch of particles and do stuff with them using Magma, or you can make fractal stuff pretty much automagically via the PRT Maker Designer. Wait for today’s build, it got really sophisticated and very very powerful.

Here is a simple example of the first approach (Magma):
*Create a PRT Maker
*Set the Viewport Count to 10000
*Add a Magma modifier
*Copy and Paste the following:

(--MAGMAFLOW2--
global MagmaFlowEditor_EditBLOPHistory = #()
magmaNode.note=""
node0 = magmaNode.createNode "Output" 
magmaNode.setNumNodeInputs node0 1 
magmaNode.setNumNodeOutputs node0 0 
magmaNode.setNodeProperty node0 "channelName" "Position"
magmaNode.setNodeProperty node0 "channelType" "float32[3]"
magmaNode.DeclareExtensionProperty node0 "Position"
magmaNode.SetNodeProperty node0 "Position" [486,247]
--------------------------------------------
node1 = magmaNode.createNode "InputChannel" 
magmaNode.setNumNodeInputs node1 0 
magmaNode.setNumNodeOutputs node1 1 
magmaNode.setNodeProperty node1 "channelName" "Index"
magmaNode.setNodeProperty node1 "channelType" ""
magmaNode.DeclareExtensionProperty node1 "Position"
magmaNode.SetNodeProperty node1 "Position" [150,210]
--------------------------------------------
node2 = magmaNode.createNode "Cos" 
magmaNode.setNumNodeInputs node2 1 
magmaNode.setNumNodeOutputs node2 1 
magmaNode.DeclareExtensionProperty node2 "Position"
magmaNode.SetNodeProperty node2 "Position" [450,260]
--------------------------------------------
node3 = magmaNode.createNode "Sin" 
magmaNode.setNumNodeInputs node3 1 
magmaNode.setNumNodeOutputs node3 1 
magmaNode.DeclareExtensionProperty node3 "Position"
magmaNode.SetNodeProperty node3 "Position" [450,340]
--------------------------------------------
node10 = magmaNode.createNode "InputValue" 
magmaNode.setNumNodeInputs node10 0 
magmaNode.setNumNodeOutputs node10 1 
magmaNode.setNodeProperty node10 "forceInteger" false
ctrl=bezier_float(); ctrl.value = 20.0
magmaNode.setNodeProperty node10 "controller" ctrl
magmaNode.DeclareExtensionProperty node10 "Position"
magmaNode.SetNodeProperty node10 "Position" [430,150]
--------------------------------------------
node5 = magmaNode.createNode "ToVector" 
magmaNode.setNumNodeInputs node5 3 
magmaNode.setNumNodeOutputs node5 1 
magmaNode.setNodeInputDefaultValue node5 1 0.0
magmaNode.setNodeInputDefaultValue node5 2 0.0
magmaNode.setNodeInputDefaultValue node5 3 0.0
magmaNode.DeclareExtensionProperty node5 "Position"
magmaNode.SetNodeProperty node5 "Position" [760,340]
--------------------------------------------
node6 = magmaNode.createNode "ToFloat" 
magmaNode.setNumNodeInputs node6 1 
magmaNode.setNumNodeOutputs node6 1 
magmaNode.DeclareExtensionProperty node6 "Position"
magmaNode.SetNodeProperty node6 "Position" [220,280]
--------------------------------------------
node7 = magmaNode.createNode "Divide" 
magmaNode.setNumNodeInputs node7 2 
magmaNode.setNumNodeOutputs node7 1 
magmaNode.setNodeInputDefaultValue node7 1 1.0
magmaNode.setNodeInputDefaultValue node7 2 100.0
magmaNode.DeclareExtensionProperty node7 "Position"
magmaNode.SetNodeProperty node7 "Position" [250,370]
--------------------------------------------
node8 = magmaNode.createNode "Multiply" 
magmaNode.setNumNodeInputs node8 2 
magmaNode.setNumNodeOutputs node8 1 
magmaNode.setNodeInputDefaultValue node8 1 1.0
magmaNode.setNodeInputDefaultValue node8 2 1.0
magmaNode.DeclareExtensionProperty node8 "Position"
magmaNode.SetNodeProperty node8 "Position" [600,220]
--------------------------------------------
node9 = magmaNode.createNode "Multiply" 
magmaNode.setNumNodeInputs node9 2 
magmaNode.setNumNodeOutputs node9 1 
magmaNode.setNodeInputDefaultValue node9 1 1.0
magmaNode.setNodeInputDefaultValue node9 2 1.0
magmaNode.DeclareExtensionProperty node9 "Position"
magmaNode.SetNodeProperty node9 "Position" [590,325]
--------------------------------------------
try(magmaNode.setNodeInput node0 1 node5 1)catch()
try(magmaNode.setNodeInput node2 1 node7 1)catch()
try(magmaNode.setNodeInput node3 1 node7 1)catch()
try(magmaNode.setNodeInput node5 1 node8 1)catch()
try(magmaNode.setNodeInput node5 2 node9 1)catch()
try(magmaNode.setNodeInput node5 3 node7 1)catch()
try(magmaNode.setNodeInput node6 1 node1 1)catch()
try(magmaNode.setNodeInput node7 1 node6 1)catch()
magmaNode.setNodeInput node7 2 -1 1 
try(magmaNode.setNodeInput node8 1 node2 1)catch()
try(magmaNode.setNodeInput node8 2 node10 1)catch()
try(magmaNode.setNodeInput node9 1 node3 1)catch()
try(magmaNode.setNodeInput node9 2 node10 1)catch()
--------------------------------------------
)

Each PRT Maker particle gets its own RandomValue in a channel.

So you can use this:

(--MAGMAFLOW2--
global MagmaFlowEditor_EditBLOPHistory = #()
magmaNode.note=""
node0 = magmaNode.createNode "Output" 
magmaNode.setNumNodeInputs node0 1 
magmaNode.setNumNodeOutputs node0 0 
magmaNode.setNodeProperty node0 "channelName" "Position"
magmaNode.setNodeProperty node0 "channelType" "float32[3]"
magmaNode.DeclareExtensionProperty node0 "Position"
magmaNode.SetNodeProperty node0 "Position" [100,100]
--------------------------------------------
node1 = magmaNode.createNode "InputChannel" 
magmaNode.setNumNodeInputs node1 0 
magmaNode.setNumNodeOutputs node1 1 
magmaNode.setNodeProperty node1 "channelName" "RandomValue"
magmaNode.setNodeProperty node1 "channelType" ""
magmaNode.DeclareExtensionProperty node1 "Position"
magmaNode.SetNodeProperty node1 "Position" [15,145]
--------------------------------------------
node2 = magmaNode.createNode "Noise" 
magmaNode.setNumNodeInputs node2 1 
magmaNode.setNumNodeOutputs node2 1 
magmaNode.setNodeProperty node2 "numOctaves" 4
magmaNode.setNodeProperty node2 "lacunarity" 0.5
magmaNode.setNodeProperty node2 "normalize" false
magmaNode.DeclareExtensionProperty node2 "Position"
magmaNode.SetNodeProperty node2 "Position" [435,30]
--------------------------------------------
node3 = magmaNode.createNode "ToVector" 
magmaNode.setNumNodeInputs node3 3 
magmaNode.setNumNodeOutputs node3 1 
magmaNode.setNodeInputDefaultValue node3 1 0.0
magmaNode.setNodeInputDefaultValue node3 2 0.0
magmaNode.setNodeInputDefaultValue node3 3 0.0
magmaNode.DeclareExtensionProperty node3 "Position"
magmaNode.SetNodeProperty node3 "Position" [575,15]
--------------------------------------------
node4 = magmaNode.createNode "Noise" 
magmaNode.setNumNodeInputs node4 1 
magmaNode.setNumNodeOutputs node4 1 
magmaNode.setNodeProperty node4 "numOctaves" 4
magmaNode.setNodeProperty node4 "lacunarity" 0.5
magmaNode.setNodeProperty node4 "normalize" false
magmaNode.DeclareExtensionProperty node4 "Position"
magmaNode.SetNodeProperty node4 "Position" [435,100]
--------------------------------------------
node5 = magmaNode.createNode "Noise" 
magmaNode.setNumNodeInputs node5 1 
magmaNode.setNumNodeOutputs node5 1 
magmaNode.setNodeProperty node5 "numOctaves" 4
magmaNode.setNodeProperty node5 "lacunarity" 0.5
magmaNode.setNodeProperty node5 "normalize" false
magmaNode.DeclareExtensionProperty node5 "Position"
magmaNode.SetNodeProperty node5 "Position" [435,170]
--------------------------------------------
node6 = magmaNode.createNode "ToFloat" 
magmaNode.setNumNodeInputs node6 1 
magmaNode.setNumNodeOutputs node6 1 
magmaNode.DeclareExtensionProperty node6 "Position"
magmaNode.SetNodeProperty node6 "Position" [155,130]
--------------------------------------------
node7 = magmaNode.createNode "Multiply" 
magmaNode.setNumNodeInputs node7 2 
magmaNode.setNumNodeOutputs node7 1 
magmaNode.setNodeInputDefaultValue node7 1 1.0
magmaNode.setNodeInputDefaultValue node7 2 121.0
magmaNode.DeclareExtensionProperty node7 "Position"
magmaNode.SetNodeProperty node7 "Position" [715,0]
--------------------------------------------
node8 = magmaNode.createNode "Add" 
magmaNode.setNumNodeInputs node8 2 
magmaNode.setNumNodeOutputs node8 1 
magmaNode.setNodeInputDefaultValue node8 1 0.0
magmaNode.setNodeInputDefaultValue node8 2 1.0
magmaNode.DeclareExtensionProperty node8 "Position"
magmaNode.SetNodeProperty node8 "Position" [295,115]
--------------------------------------------
node9 = magmaNode.createNode "Add" 
magmaNode.setNumNodeInputs node9 2 
magmaNode.setNumNodeOutputs node9 1 
magmaNode.setNodeInputDefaultValue node9 1 0.0
magmaNode.setNodeInputDefaultValue node9 2 2.0
magmaNode.DeclareExtensionProperty node9 "Position"
magmaNode.SetNodeProperty node9 "Position" [295,200]
--------------------------------------------
try(magmaNode.setNodeInput node0 1 node7 1)catch()
try(magmaNode.setNodeInput node2 1 node6 1)catch()
try(magmaNode.setNodeInput node3 1 node2 1)catch()
try(magmaNode.setNodeInput node3 2 node4 1)catch()
try(magmaNode.setNodeInput node3 3 node5 1)catch()
try(magmaNode.setNodeInput node4 1 node8 1)catch()
try(magmaNode.setNodeInput node5 1 node9 1)catch()
try(magmaNode.setNodeInput node6 1 node1 1)catch()
try(magmaNode.setNodeInput node7 1 node3 1)catch()
magmaNode.setNodeInput node7 2 -1 1 
try(magmaNode.setNodeInput node8 1 node6 1)catch()
magmaNode.setNodeInput node8 2 -1 1 
try(magmaNode.setNodeInput node9 1 node6 1)catch()
magmaNode.setNodeInput node9 2 -1 1 
--------------------------------------------
)

Thank you! That helps tremendously :slight_smile:

Oh so that is what RandomValue is for. I saw that when I saw the Droplet channel.

So is that all it is for?

I thought actually to ask about an actual Random Generator node, does that make sense? I know most useful things actually require a bit of a fixed value could be interesting to have a random generator for floats/vectors/ints. Maxscript node works well for but would it be faster more efficient in a compiled node?

The Noise function is a pseudo-random generator.
Just feed in the Index, ID or Position (or anything particle-specific) value into a Noise function and you will get a more or less random value, but deterministic for that particle and input value. A Script operator is not evaluated per particle, just once per flow evaluation.

Put this on a 10,000 particles PRT Maker - the Z is “random” based on a Noise function. Note that round numbers like 1,2,3 etc. produce the same noise value, so you have to multiply the Index by some float value to reveal the random pattern.

(--MAGMAFLOW2--
global MagmaFlowEditor_EditBLOPHistory = #()
magmaNode.note=""
node0 = magmaNode.createNode "Output" 
magmaNode.setNumNodeInputs node0 1 
magmaNode.setNumNodeOutputs node0 0 
magmaNode.setNodeProperty node0 "channelName" "Position"
magmaNode.setNodeProperty node0 "channelType" "float32[3]"
magmaNode.DeclareExtensionProperty node0 "Position"
magmaNode.SetNodeProperty node0 "Position" [403,150]
--------------------------------------------
node1 = magmaNode.createNode "InputChannel" 
magmaNode.setNumNodeInputs node1 0 
magmaNode.setNumNodeOutputs node1 1 
magmaNode.setNodeProperty node1 "channelName" "Index"
magmaNode.setNodeProperty node1 "channelType" ""
magmaNode.DeclareExtensionProperty node1 "Position"
magmaNode.SetNodeProperty node1 "Position" [160,200]
--------------------------------------------
node7 = magmaNode.createNode "ToFloat" 
magmaNode.setNumNodeInputs node7 1 
magmaNode.setNumNodeOutputs node7 1 
magmaNode.DeclareExtensionProperty node7 "Position"
magmaNode.SetNodeProperty node7 "Position" [580,170]
--------------------------------------------
node5 = magmaNode.createNode "ToVector" 
magmaNode.setNumNodeInputs node5 3 
magmaNode.setNumNodeOutputs node5 1 
magmaNode.setNodeInputDefaultValue node5 1 0.0
magmaNode.setNodeInputDefaultValue node5 2 0.0
magmaNode.setNodeInputDefaultValue node5 3 0.0
magmaNode.DeclareExtensionProperty node5 "Position"
magmaNode.SetNodeProperty node5 "Position" [780,110]
--------------------------------------------
node4 = magmaNode.createNode "Modulo" 
magmaNode.setNumNodeInputs node4 2 
magmaNode.setNumNodeOutputs node4 1 
magmaNode.setNodeInputDefaultValue node4 1 0
magmaNode.setNodeInputDefaultValue node4 2 100
magmaNode.DeclareExtensionProperty node4 "Position"
magmaNode.SetNodeProperty node4 "Position" [400,190]
--------------------------------------------
node8 = magmaNode.createNode "ToFloat" 
magmaNode.setNumNodeInputs node8 1 
magmaNode.setNumNodeOutputs node8 1 
magmaNode.DeclareExtensionProperty node8 "Position"
magmaNode.SetNodeProperty node8 "Position" [390,360]
--------------------------------------------
node9 = magmaNode.createNode "Divide" 
magmaNode.setNumNodeInputs node9 2 
magmaNode.setNumNodeOutputs node9 1 
magmaNode.setNodeInputDefaultValue node9 1 1.0
magmaNode.setNodeInputDefaultValue node9 2 1.0
magmaNode.DeclareExtensionProperty node9 "Name"
magmaNode.SetNodeProperty node9 "Name" "Divide"
magmaNode.DeclareExtensionProperty node9 "Position"
magmaNode.SetNodeProperty node9 "Position" [570,350]
--------------------------------------------
node11 = magmaNode.createNode "InputValue" 
magmaNode.setNumNodeInputs node11 0 
magmaNode.setNumNodeOutputs node11 1 
magmaNode.setNodeProperty node11 "forceInteger" false
ctrl=bezier_float(); ctrl.value = 100.0
magmaNode.setNodeProperty node11 "controller" ctrl
magmaNode.DeclareExtensionProperty node11 "Position"
magmaNode.SetNodeProperty node11 "Position" [290,530]
--------------------------------------------
node12 = magmaNode.createNode "ToInt" 
magmaNode.setNumNodeInputs node12 1 
magmaNode.setNumNodeOutputs node12 1 
magmaNode.DeclareExtensionProperty node12 "Position"
magmaNode.SetNodeProperty node12 "Position" [350,420]
--------------------------------------------
node13 = magmaNode.createNode "Noise" 
magmaNode.setNumNodeInputs node13 1 
magmaNode.setNumNodeOutputs node13 1 
magmaNode.setNodeProperty node13 "numOctaves" 4
magmaNode.setNodeProperty node13 "lacunarity" 0.5
magmaNode.setNodeProperty node13 "normalize" false
magmaNode.DeclareExtensionProperty node13 "Position"
magmaNode.SetNodeProperty node13 "Position" [498,245]
--------------------------------------------
node14 = magmaNode.createNode "Multiply" 
magmaNode.setNumNodeInputs node14 2 
magmaNode.setNumNodeOutputs node14 1 
magmaNode.setNodeInputDefaultValue node14 1 1.0
magmaNode.setNodeInputDefaultValue node14 2 1.123
magmaNode.DeclareExtensionProperty node14 "Position"
magmaNode.SetNodeProperty node14 "Position" [444,307.5]
--------------------------------------------
node15 = magmaNode.createNode "Multiply" 
magmaNode.setNumNodeInputs node15 2 
magmaNode.setNumNodeOutputs node15 1 
magmaNode.setNodeInputDefaultValue node15 1 1.0
magmaNode.setNodeInputDefaultValue node15 2 2.0
magmaNode.DeclareExtensionProperty node15 "Position"
magmaNode.SetNodeProperty node15 "Position" [639,209]
--------------------------------------------
try(magmaNode.setNodeInput node0 1 node5 1)catch()
try(magmaNode.setNodeInput node7 1 node4 1)catch()
try(magmaNode.setNodeInput node5 1 node7 1)catch()
try(magmaNode.setNodeInput node5 2 node9 1)catch()
try(magmaNode.setNodeInput node5 3 node15 1)catch()
try(magmaNode.setNodeInput node4 1 node1 1)catch()
try(magmaNode.setNodeInput node4 2 node12 1)catch()
try(magmaNode.setNodeInput node8 1 node1 1)catch()
try(magmaNode.setNodeInput node9 1 node8 1)catch()
try(magmaNode.setNodeInput node9 2 node11 1)catch()
try(magmaNode.setNodeInput node12 1 node11 1)catch()
try(magmaNode.setNodeInput node13 1 node14 1)catch()
try(magmaNode.setNodeInput node14 1 node8 1)catch()
magmaNode.setNodeInput node14 2 -1 1 
try(magmaNode.setNodeInput node15 1 node13 1)catch()
magmaNode.setNodeInput node15 2 -1 1 
--------------------------------------------
)

Oh interesting, Noise, very cool.

That is good to know for sure about the script eval, I kinda figured that when I saw my earlier attempt and all of the particles moved to the same position. I wasn’t positive though.

So, and as it should, all of these particle do have an index then. Another positive confirmation :slight_smile: I tried something vaguely similar the Index but I obviously did something wrong as I was able to induce any change in position.

This copy/paste is sweet :wink: I for some reason had a few troubles in 2012, I’d add a new magmaMod, open the editor, ctrl+v, and it would just beep and not paste. I tried it through the Edit menu and it paused a little bit then did nothing. It seems to be working Ok now, just thought I would mention that.

BTW PRT Designer? A nice little custom interface I presume? Does it work with a magmaFlow? Details details :slight_smile:

Can we pump in controller driven values? Like attach a noise controller to a Floats value? Ya know animated parameters but in magmaFlow. I check on the Input Value Float value spinners and no but is there another way? This seems like you should since you can have an animated TexMap.
SCRATCH that, you can animate the value you just can’t see it via trackview not outright anyway. hehe cool, check this out:

The Index channel is available only as Input. It is NOT really a channel that exists in particle streams, it is a channel exposed by the Magma system and is incremented for each particle.

It is a BAD idea to replace the controllers of InputValue nodes in Magma 2. It might work, but since the saving/loading/copy/paste/undo try to include the controller in the MagmaScript, it might lead to problems. The way to do it is to create a scene object with a Noise controller track somewhere and use PropertyQuery to read that external value. This way you will also have a visual cue of the controller’s value, for example if you assign it to the Z Position of a Point Helper and watch it jump up and down.

An early version of the PRT Maker Designer is in last week’s build, but it is not nearly as powerful or cool as this week’s version (we replaced the PRT Maker’s fractal code completely, so they will be incompatible). A new build should be posted today or tomorrow. So wait and you will see the Real Thing soon.

This Index remains constant unless modified though doesn’t it? I seem to recall using the Index channel with PRT Volumes to bring it into pflow.

LOL, I kinda figured it wasn’t something I should be doing when I saw the “??” label. I like the idea of borrowing a property from a ref. object much better, I am sure you do to hence the PropertyQuery node, very box#3 like, I will use that from now on.

The index is a read-only channel. It WOULD change if you change parameters in the source, since it simply counts each particle that comes along, from 1 to N and depends on what N is. But it is a good reference.

The ?? was a bug that should be finally fixed in today’s build which I am about to upload (testing it right now).
It has nothing to do with whether you can change a controller or not.

So this is somehting only related because I am playing with PRT Maker at the moment but is there a good rule of thumb when using Particle Count, Final Pass Density, and the Emission Strength Density controls. One obviously can drastically change the result of the others. I have really been unable to find an easy closest guesstimate to get started with, it is always a result of default/render, tweak/render, tweak/render, ect.

Do you have any method to figure a good quick starting point?

Nope, I do the same. The problem is that when rendering in Additive mode for example, the count and density AND image resolution affect the result.

When rendering with Emissive particles plus Alpha, the rule of thumb is to check “>Ignore Scene Lights”, start with a Final Pass Density around 5.0/-2, enable >Use and set Emission Strength to slightly less (say, 3.0/-2). Then if it is too solid, start going down one order of magnitude in both until you like the result. If you increase the particle count 10 times (say, from 1M to 10M), decrease both Density and Emission by another order of magnitude.

Gotcha thanks, I shall continue using the tried and true method :slight_smile:

Deadline based design galleries?

Can you go into more detail what that means?

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CBsQFjAA&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.164.6135%26rep%3Drep1%26type%3Dpdf&ei=sAq8TteQF-Lc0QGStOjeCQ&usg=AFQjCNGHm9a2wNIV3zB5SNCJ3gy_qh4O6Q

http://www.merl.com/areas/dg4vg/

http://my.arch.ethz.ch/kehoeger/projects/dg/index.htm

I’m almost certain MERL actually made this into a plugin for 3D Studio Max in the late nineties. It would add a light to your scene, then randomly change parameters on it and render them out as thumbnails. Then you would look at all the rendered results and select the ones you liked, then it would run another batch of renders and repeat the process until you liked the result. You could also keep some of the settings so you end up with 3 lights and you could preview it by adding the renders together.

The application with PRT Maker is pretty obvious, but consider how you could also use this with any parameter in Krakatoa. Heck, this would be great with PFlow or FumeFX, too. Actually… There was a recent SIGGRAPH paper about using Design Galleries for fluid sims… Lemme see if I can find it.

  • Chad

The “Wedge” approach where you select one or more parameters and specify a range and step to change each one of them might be better than “random”.
The Random part is done inside the PRT Maker Designer - you get random designs and can save presets from the shapes you like. But then if you want to know what Density settings work best for a design, specifying a range from 5.0/-1 to 5.0/-5 with step of 0.5 would produce wedges you can compare.

I will put this on the list for a future update. It is unlikely to happen for 2.0, but 2.1 might be a good candidate.

it is funny you mention this, we are all pretty much on the same page.

I was tooling with the desginer, me being lazy, I tried different seeds, and seeing the obvious inconsistency from one seed to the next I thought of writing a script that would use a step value and increment through some x number of random parameters.

Wedges can be done with a KCM super easy. Just convert the position to the camera space, step through in X or Y or both and modify the density. You get your wedges in one render… Yay KCM’s!

The Design Gallery would be potentially helpful in coming up with the right shapes from the Maker Designer. You make say 100 randomized version (heck, incrementing the seed in the Designer would be enough). Then the user picks one, and then you make 100 more renders by randomizing the values for the transform with some Gaussian noise. Then the user picks one or more of those that they like and various blends could be tried.

Actually, the way you use it is this:

You RESET the Design to Seed X (any keyframes are removed).
You move the time slider to frame 100 (or whatever).
You APPLY the Design of Seed Y on that frame only.

Now you have 101 increments of Design X to Design Y.
Scrub the time slider and if you like any of the steps, save to Preset.
Repeat with new seed.
Once you have enough Presets, you can do this by RESETTING to a preset, then keyframing to other Presets using the MERGE button on different frames to create an animated design. Then you can save any frames of that design to new Presets and so on…

Not sure if that was explained anywhere, but it already does manually what Chad wants done automatically.
And you can also open the Fractal Design dialog and tweak parameters on any frame to keyframe one Design into something different…

I will look into an automatic way to create galleries, but there is plenty of room for “genetic engineering” in the current tools already!

If only there was some way to have a bunch of other computers do a lot of computations and return the results to your computer… Somebody should sell that. :laughing:

Privacy | Site terms | Cookie preferences