How do you make these?
The 3D stuff (with shadows and such) was created using the excellent, free raytracer POV-Ray.
The rest were created using a custom-made PHP library that uses GD for graphics. The library adds a whole lot of functionality that isn’t present in GD or PHP: drawing anything with alpha blending, geometry and math primitives, 2D and 3D rotations (including quaternions), better anti-aliasing, object-oriented interface, etc.
Wait, what? PHP?!
Yes. I’m aware it is not what you’d expect. I just haven’t found a better system for this yet given the circumstances. PHP just kinda works out of the box, and I managed to find my way around GD’s limitations.
I’ve looked elsewhere (Python, Processing, C++, etc.). They always failed me on some important aspect, or I failed to get things working due to some stupid limitation.
For instance, Python with PIL is very limited and low-level. I’d have to rewrite all the features I need, starting from an even more basic level than I did with GD. I’d rather move to something that won’t require me a lot of work to get to the feature set I currently have on PHP. Cairo isn’t bitmap-based so it invalidates some of my rendering tricks. I’m still trying to get some version of ImageMagick to work for me, but people seem to be mostly interested in image processing, not drawing. So those features are missing in several ImageMagick libraries.
Processing is too focused on real-time. I need the liberty of taking as long as I need to render a frame and dumping it into a PNG. C++ has a few great libraries, but developing C++ under Windows is horrible. I’m not going to bother with it.
Sadly, I’m a bit stuck with my current software and hardware for the time being, but I’ll keep on looking for alternatives. I hope I find something soon.
Can’t you just use some existing math software, like matplotlib?
These don’t give me the artistic freedom I want. For example, most existing software renders 3D surfaces as triangle meshes. When these are partially transparent, different layers tend to mix in visually ambiguous ways. I try to avoid this sort of thing.
I’m better off with a raw drawing API. I know how to get around with some bare bones drawing tools, and I can have total control.
Can you release the source code?
I release the source for all the complicated POV-Ray animations.
As for the rest, things are a little bit trickier. For one, the animations are created using a custom library that’s ever changing, so compatibility is often broken with time. While I am trying to publish the library sometime in the future, I’m not terribly enthusiastic about it because I’m probably the only person who would use such a thing for PHP.
Additionally, my code renders a series of PNG frames that need to be assembled and timed, and text must be added on top of it, etc. I use several different programs to achieve all of that.
This is because dealing with typography using code just doesn’t work. Also, the GIF support of most software is horrible, and the color optimization is pathetic at best. I go through a lot of hoops to ensure the highest quality possible on the GIF files. It’s hard work, but it pays off to have smaller files and super crisp images.
Can you make an animation about [some topic]?
Maybe. I’m always looking for cool ideas and topics.
Send me a request through my Wikipedia talk page or through the tumblr form. I cannot guarantee I’ll be able to make the animation, due to time, complexity and knowledge constraints. But I will think about it.
What are your current projects?
In the next few months, I plan to tackle a lot of vector calculus material (mostly the del operator and related theorems). Still a lot of planning to do.
But most of the ideas come out of nowhere, especially the stuff that I won’t be uploading to Wikipedia.