Fit An Entire Planet In 90k
missingmatterboy points out this "interview with Dr. Ken "Doc Mojo" Musgrave, a computer graphics pioneer who worked with Benoit Mandelbrot generating fractal landscapes and who's designed custom shaders for Hollywood movies. His latest project is called MojoWorld and it uses the power of math to generate infinite-resolution fractal landscapes? one entire planet at a time. It's going to have an open SDK and, to top it all off, a Linux version is also in the works." This is a fascinating project.
Here's the Google cached copy (which isn't doing much better)
If you have to see the images, BryceWorld got a beta release and posted a gallery of images online.
And if you want to download it immediately to start playing with it, you can do it by filling out this questionairre
I am disrespectful to dirt! Can you see that I am serious?!
MojoWorld:>rebuild Earth.planet
This has been done quite a few times by quite a few people. Fractal planet 3d engines show up all the time at www.flipcode.com
I've seen some with complete weather and day/night cycles. Some really inspiring stuff.
Planets would move, trees would grow, forests and deserts would change shape, oceans would rise and recede, etc. (Taking into account that the planet is of the type to support something like forests and oceans). The variables that define a "place" as a human looking onto the universe were coordinates and time, and a perspective (direction/angle) from which to project back information. Yet the visual perspective was only minor compared to the actual number of calculable variables, like temperature, and the like. Of course, strange things like density has to be accounted for with Newtonian physics, but that was ironically easy. Choosing what was the cause (is temperature random, ie. fractalish, or a product of Newtonian; really it's a combination; random in a Newtonian'ish thermodynamic space, but random only because we wouldn't actually want to calculate that sort of thing) and what was an effect was the hard part.
It is an interesting premise, isn't it? Taking a mathematical curiosity (the fractal) and doing something useful with it like creating a universe, or planet in this case. Somewhat matrix'ish.
...he took real pride in his fjords, he wouldn't take too kindly to auto planet creation.
I'm the big fish in the big pond bitch.
Maybe one of these days we're going to find out that our planet, including ourselves, is on someones (or somethings') CD. Talk about freaking people out in a big way :0
Here's the easiest way to think of it: each parameter represents a degree of freedom; an axis you can move back and forth along, as you change the parameter's value. So, for instance, specifying a color in MojoWorld adds three higher dimensions: one for each of the red, green and blue values you use to specify the color. Each of these axes corresponds to a higher dimension in Parametric Hyperspace: it's just a different direction you can move in. You can see that, in getting all the settings right for a scene, you've set a lot of parameters, and thus traveled in many dimensions of Parametric Hyperspace.
Since the product doesn't store individual worlds, but rather parameters for a procedural system... or a point in parametric hyperspace... the data file for a single world isn't large. Each individual world only needs to be defined with a set of n-dimensional coordinates. I don't do much playing with things like bryce or whatever (can't afford it) but if I'm not mistaken that is a significantly different paradigm. What I didn't see is how large the executable was that generated the worlds dynamically from the n-dimensional parameter vector or hyperspatial coordinates. Technically the program wouldn't have to be large either, but I'm curious...
Live to Code, Code to Live!
Wow, 90K!
:-)
I bet a 'make world' will go a lot faster then
is volumetric pixels this sort of thing ?
fractals are good for storeing large amounts of information but decompression is hard and how do you then represent the information useing standard methods or volumetric pixels type approach ?
seems nice but I would like more details before makeing any jugment
anyone have details ?
regards
john jones
p.s. I am sure a game used this type of thing before
I've just checked out the sample mojo-world gallery (I'm a sucker for any web pages that claims to show me (almost) photo-realistic rendered terrain images) and while the output is quite cool, it still has ways to go before it's going to be photorealistic. On the other hand, the point of MojoWorld is that you don't need a lot of data to re-create your scenes: you just save the seed parameters (which are tiny as compared to a real height-field) and the engine re-creates the scene from these parameters.
I have been working on terraform (which is aimed more at the generation and manipulation of digial terrain rather than the rendering of it) for a while now and in the course of doing so have learned a few things about fractal terrain generation. The fact that you can regenerate the terrain from a few seed parameters is not that special (dimension, scale factor, random seed, etc); these are the kind of parameters that are typically passed to these functions anyways. The more interesting thing (to me) is that they have apparently found a compact representation of all the data needed to create a (semi)realistic scene from it. All in all, I think this is quite cool. Hopefully they (at some point) will write a white paper detailing some of the algorithms used by the (closed source) generator.
Smooth may be defined as:
- function: all genotypes code for valid phenotypes
- injective (compact, nonredundant): different genotypes lead to different phenotypes
- surjective (universal): all phenotypes are representable
- continuous: small variations in the genotype produce small variations in the phenotype
- inversely continuous: small variations in the phenotype can be induced by small variations in the genotype
Where genotype refers to the parameters and phenotype to the representation of the world.If this were true, then one could theoretically evolve (using GA techniques) a planet that is a reasonable facsimile of earth, or any other feature set. Want a detailed map of San Francisco Bay? Let me squirt my survey through my Genetic Algorithm MojoWorld Compression Algorithm. Oh good, it's done. Use these five numbers to recreate the map...
Hmmm... sounds like it's plausible, but I don't think that small changes in the genotype necessarily result in small changes in the phenotype.
I am disrespectful to dirt! Can you see that I am serious?!
Hmmm, an Elite game which uses fractal planets?
What about, for example, Frontier: Elite2 which pretty much pioneered planet wide fractal terrain gen in a commercial game and ran on a 386.
Or, its sequel, Frontier: First Encounters which added texturing to make everything look a million times more ugle.
Or any of the recent fan-made clones, Millenium3 http:://m3fe.com or even The Eternal Project http://compsoc.net/~flend/tep/.
Gamasutra had a couple of articles on the subject of (real-time) procedural formation of planetary bodies. (Free login required.)
0 1.htm
0 1.htm
http://www.gamasutra.com/features/20010302/oneil_
http://www.gamasutra.com/features/20010810/oneil_
There is a nifty demo available for download. The same code is used in the glElite project.
Being well balanced is overrated. -- John Carmack
Come on everybody and sing....
"I have the whole world, in my floppy"
Somehow I don't think this is going to make it into games right away. To get high detail, you still need massive amounts of system and video ram for all the textures and vertices. Besides, you still need designers to implement what they want. Just sitting there and hitting a "randomize" button isn't going to work too well unless you have no clue what you want.
This was one of the most amazing games I'd ever seen at the time, becuase the player is completely free to go anywhere in the "universe" and do anything. I think the discovery of "wormholes" (from a 16-bit overflow bug) also added quite an interesting element to it as well (That's not a bug, it's a feature!).
Don't forget the fractal-nature of the Frontier universe as well. I doubt they could have fit all of that data in the game! It was quite interesting how whole solar systems were created around each star, with different planet types and numbers, different political situations, random natural and manufactured satellites, different star configurations (double and triple systems). I suppose this was all seeded from the same value, or it would have been different every time.
I wish there were an upgraded game like Frontier, which took advantage of modern computer systems, but still contained all of the elements of the original. I'd love to see such a game as a massive-multiplayer-online sort of game. I'll check those links you provided and see what those are like...
Please consider making an automatic monthly recurring donation to the EFF
All we need now is for someone to encode all the world's pr0n in this fashion and put it on gnutellanet!
On the related note of fractals and their generation; A few years ago while playing around with GWBASIC (!!!) on a Tandy 1000 Color I discovered you could generate sierpinksi gadgets (there's a picture of a 3D one that I managed to find at http://www.angelfire.com/mo3/mysteriesofscience/ga mes.html) by choosing 3 coordinates on the screen (for the vertices) and then choosing a random point somewhere else. Then, choosing between 3 random numbers (or anything that has 3 equally probable events) and plotting the point halfway between the current point and the vertex corresponding to the chosen number, a sierpinski gadget slowly "fades" in.
To make it look even better, you can choose a color for each vertex. I also found you can do similar things with other shapes (pentagons, squares, etc.) Perhaps this algorithm is a well known way to generate the Sierpinksi Gadget. The amazing thing is how *small* the code is!
pseudocode (possibly with mistakes...its been a while)
Sierpinski
Choose 3 equidistant points on the screen: {x[0],y[0]},{x[1],y[1]},{x[2],y[2]}
Choose random coordinate on screen (x,y)
while no user input
choose random number n from {0,1,2}
plot ((x+x[n]/2), (y+y[n])/2))
loop
Cheers,
jw
"Has anything you've done made your life better?" - American History X
I tried zooming out to a few thousand km to try and get a good full planet view and was rather disappointed. Only two terrain features were still visible (green and snow); nearly all the lakes and rivers had vanished and there were no large bodies of water no matter how high I set the water level. Didn't look anything at all like a planet when it had finished rendering.
Dyolf Knip
Dear lord - did they have to call it Mojoworld?
I hope that Mojo Nixon doesn't decide to sue, seeing as how he's already written songs about it, and all.
These games had fractally generated universes with starsystems, planets, cities and whatnot. Because they are elite games you could literally fly anywhere you wanted. It's now possible to download the shareware version of First Encounters from the Elite Club, and the game is so popular some clever fellow went and reverse engineered the binary, fixed a load of bugs and made releases of the game engine for Windows and Linux.
Musgrave is also extremely annoying in the way he dismisses enhancements as trivia and gives the impression that he's done the hard work. He hasn't - he's done the easy bit. For example placing vegetation on his landscapes is a very, very hard problem. Lets see him place a forest of oak trees besides a river, with realistic rendering of sunlight through the leaves, the roots in the soil, and the shadows of the leaves on the ground then I'll be impressed.
There are packages that are attempting to do this - World Construction Set, WorldBuilder and GenesisII come to mind - there are many more (including the granddaddy of them all Vistapro). None look as realistic as Terragen though - again something that can probably be ascribed to the fact that terragen, like Mojoworld, chooses a particular type of landscape in which to work. Unlike Mojoworld though, Terragen is photorealistic.
Creating a general-purpose photorealistic terrain renderer is probably on of the hardest problems still available in computer graphics. And while Musgrave deserves respect for what he has achieved over the years, sadly he's one of those people who simply isn't as good as he thinks he is.
The Eternal Project - what an ironically true to form name
Oolite: Elite-like game. For Mac, Linux and Windows
But fractal landscapes? Holy shit stop the presses! Landscapes are the classic use for fractals. This is really nothing special. Sorry to be so harsh.
This Wiki Feeds You TV and Anime - vidwiki.org
What you're seeing in the mpeg videos behind that link is flyover scenes that generate a terrain grid with dynamic level of detail concentrated near the camera, overlaid onto an entirely synthetic and repeatable world which is derived from multiple pointer math on a large (16M) data file. That means FAST- it was only implemented in REALbasic and still runs reasonably fast, and is a natural for C.
I also spent some time producing universe distributions- one stumbling block that I ran into that I hadn't got around to solving was what I was keeping world space in, as the universe is very big and at the same time the actual planets would go down to roughly 1/8" level of detail using some approaches for data synthesis. In particular, one of the techniques for positioning stuff would go down to 1/8" level of detail with four pointer-like operations using no kind of higher math. The difficulty is that you don't get a list of objects- instead if you wanted to synthesise, say, blades of grass, you'd go over a ten mile view by scanning across your view grid and every eighth of an inch, would do the fairly quick lookup of whether there was a blade of grass or some similar object on that eighth-inch spot. On the bright side, it would at least be repeatable, being entirely procedural.
The thing about these projects, and I can see that many people have done them, is that you can get grandiose about them but the bottom line is: this is not a game. This is not inherently fun, or interesting. One thing I'd thought of for _my_ approach is to apply some Warcraft-like game (scaled to MMORG, of course ;) I think that's a rule for all people coding virtual worlds) and make use of the fact that you can have a world-sized area with (perpetual) resources laid out irregularly and down to an extraordinary level of detail. So you could be in a game, and have to dig for gold or iron or something, and go by people's reports of where that resource could be found- including "There's this planet out by Alpha Centauri that's loaded with it". I also had a procedural planet and location name generator that wasn't entirely horrible ;)
Like I said- you get into this sort of thing and totally forget that it's NOT FUN for anybody else, unless there's a plot. I'd suggest that the author of this more recent work, if he seriously expects to earn money off it, should treat it very much like selling an art object: 'here's a viewer through which you can explore millions of worlds much like Bryce, only with less interaction', and not be too haughty about the price, either. This isn't a set of libs that will be useful for anyone creating a game, period. For one thing, you can get the same thing cheaper from elsewhere- it's NOT a unique idea.
(MIB)
:-)
Freedom: "I won't!"
Elite used Fibonacci Numbers with a eight 6-byte seeds, plus a few dozen bytes of look-up tables, to achive this. The principle was very similar to MojoWorld's use of fractals, but Fibonacci series are considerably quicker to process, particularly on an early 80's home computer.
Andrew Oakley - www.aoakley.com
Starflight had an entire Galaxy on two 5.25" floppy disks! :P
"Everything you know is wrong. (And stupid.)"
Moderation Totals: Wrong=2, Stupid=3, Total=5.
...it uses the power of math..."
POWERmath is a system of high performance
algorithms engineered to meet your
planet creation and design
needs head on. Want to know more?
Follow the equals...
Not if they want to do well in the adult entertainment business. And don't think I'm kidding: the sex-starved portion of the population is willing to pay billions to see something like this developed.
-bugg
I have to agree with you AC, that Terragen is very impressive.
Want to know what is more impressive about it?
It is written mostly in Visual Basic (don't believe me? Email the author. I found out after having a conversation with him about using VB for 3D stuff like this a few years ago, because I noticed it installing the VB runtime during setup).
Reason is the Path to God - Anon
Generating a simple fractal landscape is both an easy and a difficult process. The algorithm is relatively easy - it is the implementation that can be difficult.
It is possible to implement a fractal landscape generation system on using only 2D graphics, which produce an image that looks amazingly 3D in scope, but isn't. Of course, it is possible to do the same algorithm in a 3D coordinate system.
I came across the 2D method first in an old Creative Computing article from around 1983 (the issue was the "graphics" issue, and in addition to the fractal mountain code done in BASIC for a couple of systems, there was an article that detailed making photo masks and combining computer graphics and real photo techniques to produce cool effects for the time - today, photoshop works wonders). The BASIC code was for a PCjr (IIRC) and an Apple IIe, but I converted it to my TRS-80 Color Computer - and it ran fine (though very slowly).
Essentially, the process is:
1. Select three random (X,Y) points on the screen - these form the "base" triangle.
2. Find the midpoints of each side of the base triangle. Split each side in half (subdivide it), and move the midpoint up/down by a small random amount (in the Y direction on screen), and join the points - the deformed triangle should now be composed of 4 sub-triangles.
3. Repeat the process on each of the resulting sub-triangles n-times.
Of course, n tends to be a small number - around 7-10, depending on the resolution of your output device. There is also a way to add "water" by deciding on an certain "Y" level to disallow drawing of "land", instead showing "water" (where "land" is green, brown, or grey, and "water" is blue).
That's the basic algorithm, and the hard part is keeping all the sub-triangle's vertices joined, so that when one is shifted up, the adjoining triangle's vertex shifts up as well. In the Creative Computing article, this was accomplished with arrays and really complex code that wasn't explained too well. Today, you would probably use a combination of linked-lists of objects (where each object represents a vertex), and of course a recursive function system. It would end up being more of a memory hog, but it would be easier to code as well.
Taking the algorithm into the 3rd dimension would be easy, since you would plot the base triangle on the X/Z (or X/Y) plane, then as you went through the subdivision process, you would simply change the height of each vertex in the Y (or Z) plane respectively.
Reason is the Path to God - Anon