Xaos is like inverted sculpting

June 19, 2009

You start with a base fractal that is a messy sea of intricate details. You start stripping away elements to create a bit of breathing room. Gradually, you refine the composition and reduce it to its core elements. By the end of this process, you will have revealed the beauty that was there from the beginning.


I started off with just a few transforms, like 3 or 4, and went through all xaos links to see which ones needed to be removed. Then I added an extra transform to create more detail where it was lacking, went over the additional xaos links created, and repeated the process as many times as was needed.

The final image consists of 6 transforms, for a total of 6*6 = 36 xaos links, of which only one is set between 0.0 and 1.0, one is above 1.0, and no less than 13 are set to 0. At least half of the time it took me to make the image was spent tweaking these links and other minor details such as variation weights.

In the end, this kind of effort is totally worth it. A good flame can take less than 10 minutes to make, but a truly great one (which I don’t claim this one to be!) will inevitably take hours of work, spread out over several sessions. That’s how it works for me at least – you’ll have to judge the result for yourself.

grj no xaos

This is how the fractal would look like if xaos was disabled. Of course, it never actually looked like this at any point during its making, as the transforms were built up gradually. I’m including it here just to show the huge difference xaos makes in the whole process of creating fractal flames.

Xaos in Action

September 23, 2008

Here’s a quick example of how to use xaos effectively to highlight the most relevant areas of a fractal, while keeping the background crisp and clean.

Before Xaos

After Xaos

As soon as you have more than 4 or 5 transforms, the interactions between them usually start interfering with your main image. Adding a new transform can generate a desirable enhancement, but it will invariably have some side effects which you’ll want to clean up using xaos. This also simplifies the image immensely, creating a much stronger expression.

If you want a copy of these parameters for your own use, be it educational or as a starting point for your own creations, just let me know!

Xaos Tutorial

August 23, 2008

This is a tutorial on the new Apophysis 2.08 feature chaos, a.k.a. xaos.

So, what is xaos, exactly?

(If you already know this, feel free to skip past this section towards the more advanced stuff)

In the past, when rendering a flame in Apophysis, the transform used each iteration was entirely defined by a single value: Its weight in relation to the others. Imagine that each transform is a city. There are a certain number of tourists visiting the country, and they randomly travel between cities. The bigger a city, the more tourists it gets. This is how Apophysis has always behaved – until now.

With xaos, you get more information than just the city sizes of this mysterious country (let’s call it Flamia). You see, not all roads in Flamia are equal. Some roads are broader than others, making specific pairs of cities more strongly connected than others. Sometimes the road between two cities is underdeveloped or even nonexistent, forcing the tourists to go through intermediate cities first. With xaos, you control which roads to put more emphasis on, and in which directions.

A practical example

You should consider xaos on the same level as post and final transforms. It’s not the kind of feature that is able to create entirely new stuff, but used correctly, it can finetune your work significantly.

Now, let’s do a little exercise. Copy the flame below and paste it into Apophysis.

<flame name="xaos" size="250 250" brightness="4" gamma="4" >
<xform weight="1" linear="1" coefs="0.9 -0.3 0.3 0.9 0 0" />
<xform weight="1" linear="1" coefs="0.4 0 0 0.4 1 -1" />
<xform weight="1" linear="1" coefs="0.25 0 0 0.25 -1 1" />
<xform weight="1" blur="0.2" coefs="0 0 0 0 0 0" />
<palette count="1" format="RGB"> 6088AA </palette></flame>

As you can see, there are lots of circles, big and small, scattered around the image, created by transform 4. Why does this happen, when blur itself only creates a single central circle? The reason is that each transform interacts with every other one in the flame; it’s a fundamental part of how an IFS works. You can see how transform 4 would look like alone by checking “solo” in its color tab.

Until now, you had no way to control this behaviour. Adding a transform meant accepting all the changes it caused, good and bad. With xaos, that’s not true anymore.

Follow along

Let’s go back to our flame. Go to the xaos tab in transform 4, and make sure it’s in the “to” view. Set the path towards red to 0. Huh? Nothing happened. The reasons for this are a bit too complex to discuss right now, but bear with me for a second. Now, also set the path towards yellow to 0. There’s a clear change in the image now. What happened? The upper part of the fractal is created by transform 2 and copied into a semi circle by transform 1. You just eliminated all possible paths on which the blur could have reached that area. Note that this change propagates everywhere, making the upper lines of pearls dissapear in all little copies of the fractal, even the ones in the bottom half.

Ok, now reset the image (or just paste it in again). Let’s try to make transform 2 completely invisible. The first obvious step is to go to the color tab and check invisibility. But, this only removes transform 2 directly, not all the copies spawned by the rotated red one. Let’s see if we can fix that. Back in the xaos tab, set the path to itself to 0, ditto with the path to red. If you try deleting transform 2 entirely, you can see that what we did looks completely different. Any image you get with xaos and invisibility will always be a subset of the whole flame. It will also keep its self-similar fractal properties.

What now?

I could go on and on giving examples, but instead I suggest you play around a bit yourself. I chose this flame because of its simplicity, so that the effects created and their origins are clearly visible. Go and try this kind of effect on your own flames, and see what you can achieve. Only experience will let you navigate all these new possibilities in any coherent way, and knowing the advanced stuff is definitely worth it!

If you have any questions, feel free to ask. This tutorial doesn’t even come close to covering everything, it’s nothing more than a starting point for your own experiments. If you want to know more, you can also check out my explanation of linked transforms, which has some related info.

Linked Transform Tutorial

August 23, 2008

This is a quick tutorial on Apophysis 2.08 linked transforms.

Adding linked transform is an option you get when right clicking inside the xaos tab. The curious thing is that it doesn’t actually do anything. What I mean is that it just saves you a lot of clicks to build a common use case of xaos, nothing more.

Creating a linked transform basically splits your existing transform in two: the original turns invisible and is routed 100% towards the new one, which in turn is routed to the rest of the flame the same way the old one was (with a 0 towards itself). The new transform is only accessible through the old one, not from anywhere else in the flame. It also has a symmetry of 1, so that color is not affected.

This means that any point that lands on the old transform will be funneled through the linked one before being sent back to the flame. In that sense it acts just like a post transform, only that it has all the attributes of a “real” transform, such as adding post and linked ones of its own, changing colors, variations, xaos; the whole deal.

That’s it! there’s nothing more to this mysterious feature. Do keep in mind that adding new transforms breaks the entire linking structure previously created.

This is a bug in Apophysis, as the linked status isn’t recorded anywhere in the flame, but inferred by how the xaos paths relate to each other. Adding a new transform just steamrolls over this like it didn’t exist, while the linking itself is surprisingly self-aware. If you add a linked transform to an already linked one (doesn’t matter if it’s the linker or linkee), they will nicely build a single stack of transforms through which the random sample moves.

If you actually want to create a linked tranform on top of an already linked one independently of the original, you’ll have to build it manually. I’m not crazy enough to try that one yet… or am I?