Friday, July 13, 2012

Project[Chaos]

Back in ~2005, I learned about fractals and Mandelbrot sets for my first time from a friend of mine. I became interested, and started working on my own fractal rendering program. After some time I had an interactive program that could render Mandelbrot sets, Julia sets, Buddhabrots, Anti-buddhabrots, and my own tweaked version of a Buddhabrot. I called this program Project[Chaos] (until I could choose a proper name for it).

Project[Chaos] is pulling a phoenix right now. The first version was more of a prototype, and I haven't worked on it for years. I'm rewriting the entire program, with the following goals:

  • High Scalability. I want to take advantage of every core, and eventually handle distributed computing.
  • Unlimited Zooming. I've worked on an arbitrary precision arithmetic library before, and now I want to rewrite it and be able to properly handle any precision for unlimited zooming (within the limits of your memory, of course).
  • Highly Optimized. It needs to be fast. I've got several ideas about this, but really I'm just excited to learn some assembly and SSE.
  • Really Flexible. It's my goal to render any type of fractal (2D, 3D, 4D, IFS, L-system, whatever) and allow for user-defined fractals and provide input parameter controllers.
  • Cross Platform. Windows, Linux, and OS X.
  • Pretty. Gradient support (with some suggested gradients (kuler, anyone?)) where gradients can be edited and results are shown in realtime (for fractals where gradients make sense); PNG output; video output (with full parameter tweening between "keyframes"); customizable rendering; etc.

This project is currently in the "womb" it's so young—it is still in very early deveopment. As this project progresses, I'll update this page and shift from focusing on my goals to what the project actually is (and probably discuss how it works too). I'll also post plenty of screenshots as they become available.

Currently, there's only support for L-systems, Mandelbrot sets, and Buddhabrots, with none of the cool features above. I'm still prototyping the software's architecture (flexible, optimized, and distributed are tricky to all pair together while keeping a clean architecture). I'm getting a feel for what it takes to support several very different types of fractals (next I'm doing Lorenz systems, quaternion Julia sets, IFS (rendered with bitmaps or vector primitives), and some others I've forgotten).

A note on what won't be supported: There are some cool things you can do with fractals, like large scale landscapes. I don't have any plans on competing with Terragen. I haven't worked on large fractal landscapes with vegetation or things like snow, and I currently do not plan on supporting them. I also do not plan on allowing 3D geometry to be generated and rendered in a traditional way via OpenGL. We'll see where things end up once the above goals have been properly met.

Until I make more progress, I'll post some screenshots of my old program. Remember, these are several years old.

1 comment:

  1. Don't know much about the technical stuff, but it looks really cool!

    ReplyDelete

Note: Only a member of this blog may post a comment.