The Story Behind Fr0st – Introduction

August 26, 2008

I sat down to write about this subject, and it just struck me that it’s acually a pretty large and complex topic, hard to write about without leaving things out. So I decided to blog about it little by little rather than in one fell swoop.

First of all, in case you don’t know, fr0st is a fractal renderer I’m in the process of building. You can get a copy here, if you don’t mind working with pre-alpha software. There are some significant technical and design differences between it and implementations of the fractal flame algorithm (such as Flam3, Apophysis, and a handful of others), but I will get more into detail on these aspects at some other time.

Right now, I just have a little anecdote to tell about how it all started.

I can pinpoint the exact moment the idea came into being. It was on an ordinary day just like this one. I was tinkering with Python, having just started teaching myself to program, more out of curiosity than any practical application I could have drawn from it.

And then, all of a sudden, an idea struck me: What if there was a fractal renderer that acted completely in real time, slowly blending one frame into the next as you changed the flame’s parameters? It was very curious, because from one moment to the next, the idea was just there. Popped into my head out of nowhere.

I could wrap up the story now, because on the exterior, there is really nothing more to it. But I think it’s important to go a bit more into the why and how.

So, I was sitting there, with this idea in mind, which seemed curious but was not realistic at all to execute considering my limited skills. And then I felt a really strong urge to just leave it at that and go on with my (mildly boring and unispiring) life. But that’s not how it ended, obviously. The idea started nagging me, haunting me, making me feel bad for not doing anything about it. You see, I value creativity very highly. And I was taking this little gift my muses had brought me and throwing it right into the garbage.

So I did what anyone who dares to call himself an artist, a spiritual and creative being, would have done: I sat down and made it happen. I don’t know how, but after a sleepless night involving a lot of hacking around and banging my head against the metaphorical wall while blankly staring at the flame paper, at 7 a.m. I suddenly had a Sierpinski’s Gasket looking back at me from the monitor, one that I had built myself using nothing but lifeless numbers and a lot of ifs and fors. And it was exhilarating.

The point of this little story is that it’s very easy to convince yourself to avoid doing silly things like that. There are supposedly more important things in life, more responsible ways to act, more relevant activities to spend your time on. But if you don’t go that extra mile to turn your ideas into reality, even if doing so doesn’t make any logical sense, what’s the point of it all? I could easily have let Fr0st disappear before it even came into existence, but I didn’t, and here it is. What for? I’m still finding out 😉

Next, I’ll talk about the design of fr0st itself, and the most important lesson I learned from doing it.

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?

It’s all about the filter radius

August 23, 2008

I’ve just realized that I’ve been using this very basic option all wrong. The filter radius setting in Apophysis applies a small blur to each individual pixel, helping smooth out jaggy edges and noisy areas (in some cases). But one fundamental thing I had failed to understand until now is that this setting needs to be directly proportional to your render size, regardless of how much you think the particular fractal you’re working on needs it.

The reasoning is simple: In a large image, typically used for a print, there are just too many levels of self similarity, too many little distractions everywhere, taking away from the whole rather than adding to it. These details reside at the sub-pixel level in normal render sizes, and so don’t get proper attention. But they do distract from the lines, texture and sense of direction in your piece. The opposite happens for thumbnails and smaller images, which tend to lose focus and crispness. Supersampling helps there, but it can’t work properly if you’re just blurring over it.

The rounding errors introduced by small buffer sizes tend to naturally blur the image. Counteract this effect (or lack thereof) according to your render dimensions.

What’s an Apophysis Power User (and how to become one)

August 21, 2008

A power user is one who, generally speaking, knows each and every feature a program has to offer. But Apophysis doesn’t even have that many, so what’s up with the term? Well, I have to give it a slightly different meaning in the context of fractals. An Apophysis power user is one who doesn’t only know what everything does, but also how it’s done. He’s not a victim of the chaos game, barely hoping to get something useful out of its depths. Knowing all the rules, riding the chaos wave, she bends fractals to her will – not the other way around.

If you’re the kind of person who’s never baffled by the program’s behaviour, who fundamentally gets how to build a grand julian without the need to look up a tutorial; if you make your images look exactly how you picture them in your mind – then, my friend, you may be on your way to become a true master of chaos. Have I reached that level? Hell no, but I’m well on my way. How to get there? It takes curiosity, persistence and curiosity. Did I mention curiosity? Never be satisfied with having things just work. Ask why. Ask how. Don’t be afraid of the math, everything’s much simpler than it appears at first glance.

If you’re there already, congratulations! Feel free to hang out, drop a comment once in a while, and be open towards discussing and learning new things. On the other hand, if you don’t believe you can reach that level, think again. I don’t have a perfect recipe, but if you stick around I’ll show you everything I know, little by little. That should give you a headstart.

To keep up wth this blog just grab a subscription. It’s free, of course, and comes in RSS and e-mail flavor.