Fractal PlanetThis work is a variant on the "Random Fractal Forgeries" by Richard Voss, when he was working with Benoit Mandelbrot at Yale and IBM. In that work Voss introduced the idea of zooming forever into islands around islands on a fractally generated planet, and he created a nice little film demonstrating that.
The surface texture is formed by a summation of noise functions. Portions of this summation are used in various ways to form clouds, ocean, mountains, snow, etc. The starfield that surrounds the planet is also formed out of noise functions. The planet has atmospheric haze (how else could you breathe?).
Four dimensional noise: In related work, NYU grad student Daniel Thor Kristjansson ported the planet into C++ and we got it running in real time on a 32 processor SP2, graciously donated by IBM, with each processor computing every 32nd pixel. For this, we wanted the continents to evolve interactively. So it uses a four dimensional noise function. By dragging the planet through time, you can watch planetary evolution take place. You can see gorgeous movies of this here.
Java really can't compute the planet in real-time. There is a patent-pending (yes, really) progressive rendering scheme, which renders the image as a gradually finer fractal pattern. It's "optimal" in the sense that no surface point is ever computed twice, and it provides a cool impressionist look while the planet is rendering (while actually only plotting squares).
Practically, what this gives you is a good sense of the planet's appearance in well under a second, even if you're running on a slow machine where the super-quality final rendering might take more than a minute.
Normally, rendering would become
intolerably slow as the user zooms in, since it must sum
ever more frequencies of noise with increasing magnification.
But rendering doesn't get any slower, because low
frequencies of this summation are cached into a grid of Catmull-Rom
splines, so only high frequencies need to be recomputed.
The code for the Java class used to do this splining is
Instructions: Click to zoom in, alt-click to zoom out. Click on the arrows to rotate.
You can also use the arrow keys on your keyboard to zoom and rotate.