Fractal Architect 4 Help Index Fractal Architect icon

Playing with Deep Variation Group Chains


Applies to:FA 4

See Also: Variation Group Architecture

Evaluating Variation Shapes in Series and Parallel


Fractal artists are used to combining fractal variation shapes “in parallel”. That is the way for years Apophysis worked (with the exception of specialized pre and post variations).

But many new fractal shapes are possible using both serial and parallel combinations of geometric variations. When more than one variation group is added to a transform, the variations in the first group are evaluated first, then the point output from the first group become the input of the second group. Variations in the same group are evaluated in parallel by summing their outputs.

Experimenting with this capability shows that this is a very powerful tool for creating interesting fractals.

Here are a set of simple exercises to explore this new capability:

Exercise 1: Adding some nice Pre and Post Groups to Plain Old Julia Fractals

In the Random Generator, set:

Pick the Flam3 Legacy variation set.

Set Number of Random Transforms to Min:2 Max:3

Set Random Variations Per Transform: Min:1 Max:3

Set both Pre Group slider and Post Group slider to 0%.

Add just the Julia variation to the Normal Group with a weight of 1.

Remove any other variations from the Normal Group.

Run some random batches so you can see what classic pure Julia shapes look like.

Now add the the Julia variation to the Pre Group with weight of 0.5.

Remove any other variations from the Pre Group.

Set the Pre Group slider to 100%.

Run some random batches, note how the shapes change and look more interesting.

Play with the Pre Group weight and see how that changes the shapes.

Finally, lets add some variations to the Post Group.

Now add the the Csch variation to the Post Group with weight of 1.

Remove any other variations from the Post Group.

Set the Post Group slider to 100%.

Oher variations to play with are Cpow, Spherical, Modulus.

Exercise 2: A Different Combination

In the Random Generator, set:

Pick the Flam3 Legacy variation set.

Set both Pre Group slider and Post Group slider to 100%.

Pre Group: Csch with weight of 1.

Normal Group: Elliptic with weight of 1, Splits with weight of 0.5

Post Group: Julia with weight of 0.3

Exercise 3: Lets Scramble up the the Whole Variation Group Chain

We have another very powerful tool to extract an infinite number of interesting fractals from a deep variation group chain. Here the word “deep” means that we have at least 3 groups in the chain.

Click the Optional Tweak Script button.

In the Factory Scripts table, select the randomizeChains script.

Alternatively the randomizeStraightChains can be selected.

These scripts randomly move variations into different groups in the chain.

The randomizeChains.lua script also randomly inserts a new type of variation group: a Variation Matrix Group, which is inserts a transformation matrix between ordinary variation groups.

Now can you see the power of variation group chains. Look how many new fractal shapes emerge just by shuffling which group a variation instance belongs to.

It so easy to do with these scripts.

So now a Transform not only has a Pre and Post Transformation matrices, it can now have 0 to many extra transformation matrices separating variation groups.

These variation matrix groups now obsolete legacy linked transforms (using the Xaos matrix).

Linked transforms were so hard to use. Most people never understood how the Xaos matrix worked. Even if you did know, it was very painful to use.

New Matrix Variation Types:

matrix2d, prematrix2d, postmatrix2d

matrix3d, prematrix3d, postmatrix3d

These variation types represent 2D and 3D transformation matrices. In use, they augment the standard pre and post transformation matrices that every Xform has. They are best used in their own Variation Group, separating other normal variation groups.

They obsolete linked transforms, an older Apophysis innovation for linking 2 or more Xforms together using the Xaos weight matrix. In practice, they are much simpler to use and are easily scripted. FA4 still supports linked transforms.

FA 4’s Triangle editor can be used to edit a 2D matrix variation just like an Xform’s Pre and Post Matrix.

Click on the matrix variation of interest inside the Variation tab, then click on the Variation item in the Which Matrix selection.

The 2d matrix variations have 6 parameters. Though you can edit their values directly, it is recommended that you use the graphical triangle editor instead.

These matrix variations have special behavior: their variation weights are ignored. No other variation type has this behavior. Only the 6 parameter values are used.

Matrix variations are intended to be the sole occupant of a special variation group. You can include other variation types in the group, but then the group no longer functions as a “pure” transformation matrix.

Lua Support for Matrix Variations

1) Matrix variation instance is a table having: a name (which says what type of variation it is); a weight (which is ignored); and a coefs table.

2) You can manipulate the matrix coefficients using the same functions you use with an Xform’s Pre-matrix.

3) Put the variation into its own variation group

4) Add that group to either pre or post variation group chain table.

    matrix2d = { name="matrix2d", weight=1., coefs=makeCoefs() } -- create a matrix2d variation
    randomPreMatrix(matrix2d)   -- lets create an interesting transformation
    group = { matrix2d }        -- Create the variation group table
    table.insert(chain, group)  -- add the group to either pre or post variation group chain

Variation Matrix Groups

As mentioned earlier, a matrix2d Matrix variation functions properly when put into their own variation group and that group is sandwiched between 2 other variation groups.

Exception: pre_matrix2d and post_matrix2d

These are normally put into the same variation group along with other variations. The pre_matrix2d variation is guaranteed to be the first variation executed and the post_matrix2d is guaranteed to be the last one executed. (So they operation correctly as a transformation matrix.)

Cross-breeding Fractals with Deep Chains

The Cross-breeder has special support for morphing 2 fractals having different length variation chains.

As you may have found, cross-breeding unrelated fractals generally creates poor results (but not always!). One good way of finding good cross-breeding candidates is to create them from the same Variant batch.

Variants created using the Lua script randomizeChains.lua also seem to cross-breed well. Sometimes you get a discontinuity at the very start and/or very end of the morph.

Exercise 4: Bringing it All Together

Well I stumbled across some very good fractals using the following steps:

Use Scripted Random tab from the Home window.

Select Andreas Maschke’s Brokat3D as the main script.

Using the Tweak Scripts button, configure the following “List of Scripts to Run”, in this order (important):

Run a batch. Notice that not many of these fractals look very good. BUT the next few steps will bring out the jewels.

Pick the best fractal of the batch and open the Variants editor on it.

Lets run some Variants on it.

Open the Variant Editor, then select:

I am getting a lot of very good fractals from these easy steps.