## Project Frontier #4: Dr. Seuss, Geologist

By Shamus
on Jun 13, 2011
Filed under:
Programming
 ← Project Frontier #3: Adding Variety Project Frontier #5: Stitching Time →

As I said at the start of the project, I’m not aiming for realism. I’m looking for whimsical, retro, and fantastic. My goal is to have something interesting, as opposed to something realistic.

I mentioned before the detail layer of the terrain. It adds the continuous rolling hills across the world. These hills are irregular, but for the sake of illustration let’s imagine they are perfect sine waves:

These hills produce a landscape that is attractive, but lacking in variety:

That’s kind of nice to look at, but seeing that stretch all the way to the horizon would be boring. We need to mix it up. However, we can’t do anything too fancy. Anything we do here is going to be happening while the game is running. We don’t have time to muck around with erosion or operations that need to analyze large sections of terrain. We need something cheap and fast which gives attractive results.

Let’s try messing with the detail map. If we take values above a certain height, and invert them, we can easily turn hills into craters:

Which ends up looking like this:

So, occasionally we can flag a region to produce craters. We have to keep them rare, obviously. This is exceptionally “cheap” from a processing standpoint. It’s just a filter. As points are created, it checks if the point falls inside of a region with craters. If so, it does a couple of very simple math operations. No need to check neighboring points or perform some sort of recursive operation. Set a flag, do a subtract. Boom. Done.

There are a lot of these sorts of operations we can do. We can take values above a certain point and pull them up even more. This…

Ends up giving us landscape shaped like this:

If we take values from a narrow range and pull them down…

We can produce cracks in the earth:

You get the idea. A couple of simple flags and some basic math and we can make a huge variety of different shapes.

Also, if you squint at the screenshots you might notice it’s displaying information like “moisture” and “temperature”. Those don’t DO anything yet, of course. Those are placeholders for the climate system I have in mind. Let’s work on that now.

Currently the program generates only dry land. If you keep going, you eventually end up at the edge. (The world is only a couple of kilometers right now, although I can make it much bigger by just changing a single variable.)

I like the idea of making the world a single continent, so that the “edges” of the world are all ocean. That’s so much more pleasing than the Oblivion / Fallout 3 / New Vegas approach of “invisible wall”. (Fie!)

So, I make our island by measuring the distance from the center of the world. Elevations fall off on a curve. I have it generate a little map of the place. Check it out:

Note that each pixel represents a single region, which is a large-ish area. (I change this often as I experiment.) Right now regions are 48 meters on a side. The green ones show what grass color is used in the given region. The beige ones are obviously coastal areas, where points close to sea level will have sand applied. Blue is ocean, darker = deeper.

This stretch of coastline represents two regions – two pixels in the map above. The water itself is a super-simple single polygon that stretches from one end of the world to the other. I just put it there so I could see what I was doing. I don’t know what the ocean will look like in the final product, although I’m reasonably sure it won’t look like a swimming pool.

Aside: In an earlier entry Tizzy said that not all coastline should be sandy beaches. Using the detail-modifying tricks I talked about earlier, this is no problem:

Anyway, I imagine you have noticed that in some cases, natural continents and islands come in shapes other than geometrically perfect circles. Well, remember that cool elevation data I created back in step one? We can use that on any scale we like. I can just add it to our circle island and get something like…

If I want a different island, I just need to draw from a different spot on the detail map.

See?

Now we want to add some climate. For climate, we have two goals:

1. Variety. We want a bit of everything. The world should be visually diverse.
2. Visual plausibility. We do NOT want to simulate an entire planet of tectonic plate shifts, jet steams, and ocean currents. At the same time, we don’t want to see a foggy swamp directly adjacent to a Sahara-style desert, or tundra next to a tropical beach.

So what we need is a very simplistic simulation, just something to give us numbers in the right ballpark.

We can assume the wind comes from the west, carrying moisture from the sea. The further you move in, the drier it will be. I average out these results (blur them) so that coastal regions can be wetter and so you don’t get overly abrupt changes in climate. Here is a map showing the moisture. (Green = wet. Red = dry.)

I add a few spots on the map to block rainfall. (Eventually these will be mountains.)

Now we calculate temperature. Arctic at the top of the map. Tropical at the bottom. (We’re going for variety, not realism, remember.) The ocean has a moderating effect on temperature.

In a later version I might randomize the direction of rainfall / temp, but this should work for now.

The next step is to take this climate information and put it to use. I start with making the grass color trend towards the yellows as it gets drier. It’s not an absolute shift. You’ll still find green in the desert, but I want reds and yellows to prevail. (At least, when it comes to grass.) Wet areas should be deep green.

Next up, I have things trend towards pale green / blue-green in colder climates. I doubt this is strictly correct, but it seems to look right.

Now that we have our data, we can put it to use.

Right now, the program has some hard-coded thresholds for slopes. Once they get too steep, it will color the ground as dirt instead of grass. A little steeper, and it changes from dirt to rock. If I lower this threshold as it gets drier, then arid climates will look like barren scrublands:

In hot, humid areas we can have deep greens:

I tried adding snow. The colder it is, the more grass gets replaced with snow.

That still needs work. Part of the problem is the golden yellow sunlight shining on the snow, making it feel “warm” here. I’ll need to shift the palette to blue as it gets colder.

Unrelated, but while zipping around looking for screenshots I found this bay, which I thought was pretty cool:

There’s a lot of work to do, but I’m happy with how it’s going so far.

 ← Project Frontier #3: Adding Variety Project Frontier #5: Stitching Time →

1. Ayegill says:

The snow totally looks like sand as it is now.

• Alexander The 1st says:

It is a bit golf-course bunker-y, but I think part of it is also that it’s completely flesh. If possible, perhaps try upping the height map a few pixels for snow as well (So it looks like it’s actually on top of the grass).

But now you’ve got me curious – is this more “Un-explored Tropical island” procedural, or are you planning on putting largely industrialised groups here as well, with roads/cities, etc.?

• Gilf says:

I was thinking he’d have far too much work added to the project if he decided to include industrial areas (a road generating system, not unlike the one he had before), but then I realized that (just as I said in my last parentheses) he’d pretty much done both roads and buildings before. The terrain project, and Pixel City. (Also: God bless parentheses)

So now I’m pretty curious, too. Do you plan to include some human-affected areas, Shamus? I doubt it would be necessary; the thing looks striking and creative enough without them, but hey, more variety never hurt anyone. Except viruses. Variety sucks pretty bad for viruses.

• Alexander The 1st says:

YES! ONE UBER PROJECT!

Now we just need gameplay.

The story’s already being written from the book (Tie in game to the book? I can hope, right?).

2. chiefnewo says:

This already looks pretty damn awesome. I know it’s fairly early on in the project, but any plans for what you’re going to be able to do on the island? I’d love to be able to ride a dirtbike or something around it.

• Airsoftslayer93 says:

An excellent point, what is the final plan for this? a first person game like minecraft? or a rts like Civ V?

• Herrsunk says:

Survival horror.

• Nick Bell says:

One man, stuck on an island all alone. No trees, no animals, just open land. Will he survive? Or will the loneness drive him mad? Find out on Survival Island, coming next holiday.

• James says:

and you could randomly add noises, and after a bit of exploration a few abandoned randomly generated houses BAM! a very loud monster noise, maby a zombie, but show nothing yet. then we find a cave, and a corpse then we reveal a zombie, you fight it off, and its night time outside suddenly and its foggy, you run to the house and take shelter but during the night more zombies arrive and try to break in, you find a gun but limited ammo. its you against the zombies and your shit out of luck without regenerating health, and only 1 health pack and 12 rounds. and a 2×4 piece of wood. now the game starts and all you have to do is live and find goodies in other houses. (the first house is kinda like plot centric so its always near your spawn and on the route to the cave. the world could eb scripted to start spawning zombies after you’ve been to the cave or have left aera 1, or you’ve dicked about for too long, and then your really fucked.

• Alexander The 1st says:

Then in the sequel, zombies drop like flies as they surround you as such, and drop shotgun ammo like it’s hot.

• James says:

and in the uber delayed third game, you have regenerating health, and can only carry two weapons.

• Fists says:

Rally car maybe, although not in Shamu’s normal interests, but I’ve never played a game with decent bike controls so probably not something he’s going to tackle

• Eddie says:

I’ve got a hunch that it’s going to be a dystopian cover-based shooter. I bet the next step is to apply a filter to reduce all that childish cover variation. Oh, maybe you can add more muscles to the grass.

• Shamus says:

I’m having trouble making it brown enough. Maybe I need more pixel shaders.

• Hal says:

Lens flare. When in doubt, more lens flare.

• Kdansky says:

And double jumps and a grappling hook. Can’t be current without these.

• Gravebound says:

Lens flare is for suckers! Turning bloom up to 50% so your eyes strain to focus is where it’s at.

Nothing like a blurry mess of brown and gray…

• Simplex says:

And motion blur and depth of field. With a little ambient occlusion on top.

• Eddie says:

You could make the sunlight brown, that would at least fix the problem with the snow. Oh wait, actually, I guess you would need to have two suns, one brown and one grey; that’ll make it look realistic.

• Irridium says:

Ask all the big-name developers. They seem to be pretty good at creating brown environments.

ZING!

• Moriarty says:

really looking forward to those procedurally generated chest high walls Shamus!

3. Sean Riley says:

Hey, nifty! It’s finally beginning to come together! That looks really cool, Shamus. I love the way that the edges of terrain are blocked off graphically. Looks interesting.

4. Amsus says:

I really like the idea of a procedurally generated continent to explore. Seems to me like it would add some really cool variety if it was possible to incorporate flora beyond just grass. Now, admittedly i don’t know if this is really possible, maybe it’ll eat up too much processing power or just be impossible to do in an interesting/mechanically relevant way. I remember reading about programs for procedurally creating a variety of trees some time back. Seems to me that something like that could be integrated in the terrain generation, though my knowledge of programming is admittedly shaky ;)
I guess it’s different becuase it isn’t just a texture like the grass ,as i understand it, but i still think it would be cool

• psivamp says:

Well, there’s SpeedTree as a professional solution, but I strongly doubt that Shamus is going to integrate closed source stuff like that.

Miguel Cepero over at Proc World is doing procedurally generated trees in his procedurally generated world. Again, not something I see as likely to be integrated into this project. Miguel’s using voxels for his world generation and also doing some serious GPGPU heavy lifting.

I look forward to seeing Shamus’ approach. It’s always enlightening to see how multiple people tackle similar problems coming from different backgrounds.

5. William says:

looks incredible shamus. Airsoftslayer, i think shamus mentioned earlier it was going to be in first person so we can probably rule out RTS, unless he’s going the Brutal legend approach (which was terrible). Also, Amsus did you perhaps read about the trees here? because I vaguely remember Shamus saying he’d written a program to do just that ages ago, maybe on his post about kkriegger

• psivamp says:

First person and RTS, you say? What about Battlezone II, that wasn’t awful? Or was it?

• Felblood says:

Why does it seem like I’m the only person who enjoyed Brutal Legend for what it was (A quirky action-RPG, with a really weird party system for tactical battles), instead of demanding that it be Starcraft with an ill-conceived camera system?

I’ll confess that it was a game that was terrrible at teaching you how to play it, but once you figure out how you’re actually supposed to play, it get’s a lot less frustrating and repetitive.

I’ll also confess that the bloody pipe organ is overpowered to all get-out.

• krellen says:

I liked Brutal Legend. Driving around in the Druid Plough with the radio blaring is still one of my simple pleasures.

• Falcon says:

Considering I’m a bit of a metalhead (OK more than a bit I suppose) this alone was worth the price of admission for me. Hugely enjoyed playing through the story, and driving around looking for secrets. Had no interest in continuing beyond that, sorry the multiplayer had no draw for me.

Your female companion returning to ‘Mr Crowley’ though +100 awesome points.

• burningdragoon says:

I liked Brutal Legend. In fact everything that wasn’t the RTS stuff I thought was awesome.

What’s that you say? The RTS was kinda the main game mechanic? I’m sorry I guess I was too busy melting people’s faces off to mind.

• krellen says:

I dunno if I’d say “main”. It was like one of three mechanics (the other two being the action-y Eddie parts and the explore-y driving parts.) And the RTS, while not the best, was certainly playable (and a pretty decent implementation for a console; RTS isn’t really a genre that works on a console anyway.)

• Max says:

I’d pretty much agree that Brutal Legend has three main mechanics, action, driving, and action with back up, or strategy if you prefer. This might not work on harder difficulties but on normal, I didn’t really think too deeply about what units to make, or where to position them, I pretty much had a random mix of units, had everyone follow me, and we walked around the battlefield kicking ass. There’s a small bit of strategy in capturing fan geysers before attempting to take on the enemy stage, but aside from that, the strategy parts played almost the same as the action parts, except I had people helping me. That was my experience anyway.

• Jarenth says:

I’ll also publicly confess my enjoyment of BrĆ¼tal Legend on this here website.

Even if I did spent an hour trying to find out how to unlock those history secret things, followed by ten minutes of cursing at the game for not actually telling me how to do it.

• Amsus says:

No, i don’t think it was on this site. I vaguely remember reading about on the escapist. It was in relation to Fallout 3, explaining why it saved so much time and resources during development compared to manually crafted trees.

In retrospect i think it was the SpeedTree thing Psivamp mentioned.

6. CrushU says:

This looks pretty cool. I think he was talking about making an RPG or somesuch in this terrain.

7. Fists says:

Grey blue plants in cold areas may or may-not be a global trend but in Kozciusko (Australia’s only snow fields) its accurate.

• Esteis says:

Tangent: A.B. Paterson’s description of Kosciuszko in āThe man from Snowy Riverā.

He hails from Snowy River, up by Kosciuszko’s side,
Where the hills are twice as steep and twice as rough.
Where a horse’s hooves strike firelight from the flintstones every stride,
The man who holds his own is good enough.

[…]

And dowm by Kosciuszko where the pine-clad ridges raise
Their torn and rugged battlements on high,
Where the air is clear is crystal, and the white stars fairly blaze
At midnight in the cold and frosty sky,
And where around the Overflow the reedbeds sweep and sway
To the breezes, and the rolling plains are wide,
The man from Snowy River is a household word to-day,
And the stockmen tell the story of his ride.

8. DanMan says:

Do you have any plans to release the source code for this at all? I know you may have plans to actually use this yourself, so it’s understandable if you want to hang on to it, but I would love to dive through the code and see what’s going on underneath the covers.

• Bryan says:

I don’t want to speak for Shamus, but in the past (for both the Terrain project and Pixel City), he linked to the source from one of the final couple of posts in the series. I ended up trying to port both to Linux, although the terrain port failed pretty badly because I decided to use plain old C at the same time, and the single use of polymorphism (in rendering, IIRC) broke pretty badly. Pixel City remained C++, which worked a lot better.

Anyway, I hoped for something similar for the hex map project (and was looking forward to spending a weekend or two porting it as well — although that will go a lot faster now that Shamus has discovered SDL). But then that project sort of died, and then it mutated into this. So hey, whatever, close enough; we’ll see what happens. :-)

9. Orteil says:

Dear sir, regarding the climate aspect of things I think you might find this article quite interesting.

Also that terrain is starting to look mighty good, I especially like the hot-humid one; it could totally be a jungle. Add some trees next !

10. Jordi says:

I think this already looks very good. Except for the snow. I don’t really understand why you made the sunlight golden-yellow though. I’m not an expert on why the sun appears yellow when you look directly at it (it has something to do with the light being reflected by air molecules I think), but I think that the light it shines on the earth’s surface is actually pretty white. How else could we perceive snow as white if a yellow sun is shining yellow light on it?

• Shamus says:

It’s a common technique to use yellow sunlight to set mood. World of Warcraft varies the sun color all over the place to make the different areas feel distinct. Using yellow sun with blue ambient light is rather striking, and also useful for testing. It’s also common in movies. Blue is cold. Oranges and yellows are warm.

Eventually I’ll have the lighting change based on where you are.

• psivamp says:

And green is the Matrix! No, seriously, I watched the commentary.

The trouble I see with changing the lighting color during play is that in many cases it is a distinct line and how does that work with multiple terrain/lighting areas? (for an example of the jarring lighting change see Fallout: New Vegas Brotherhood of Steel bunker area)

• Andrew B says:

Also, the whole “perceiving white as white” thing is one of the reasons that human perception is complex. Essentially, our brains adapt what we see to what we expect, relying heavily on context. In essence, we see the whitest thing around as “white” until proven otherwise. (Try getting three different shades of very light grey paper and comparing them, working from only the darkest, then darkest vs midrange and then mid-range vs whitest. You’ll see each one as “white” at some point.) If you were actually looking at snow in yellow light (common at sunset) then you’d almost certainly see it as “white” because it’s the whitest thing around and you know snow is white.

This is also (one of) the reason(s) that photos often look different to how you remember the view in real life. You see what your brain thinks you should be seeing. The camera sees what’s actually there. (No, I have no idea why your brain doesn’t “correct” the photo later. Something to do with field of vision perhaps?) That’s what the whole “white balance” option in photo processing software is for. You are essentially mimicking what the mind does automatically.

• psivamp says:

This aspect is why fire always looks wrong in games. Getting the right shape of the flames is, I guess, relatively cheap computationally, but to get the colors to look right you have to change the whole lighting model to make everything darker when you look at the flames.

• Felblood says:

Plus you can’t get the right level of brightness and saturation, if you want to give them the proper translucency.

Of course, you couldn’t make them properly bright anyway…

• BlackBloc says:

The brain doesn’t change the photo because it takes its color cues from the environment around you, and it is different from the photograph. When you put a person in a VR-style headgear and show them photos in a way that fill their entire field of vision, their brain does this extrapolation.

11. jokermatt999 says:

That last screenshot looks quite nice! I’d love to play a game with terrain like that.

12. Nathon says:

Is the haze just something OpenGL does for you, or did you have to add it? What exactly is it that gives it the hazy look?

• droid says:

Fog is one of the oldest tricks in the book for setting mood and hiding the far clip distance. It is hardware accelerated and fairly simple to set up.

• Simon Buchan says:

OpenGL will do it for you, but if you are doing shaders, you should (have to?) do it yourself. It’s pretty simple, just mix the original color with the fog color by ‘e^(-d*z)’, where d is the fog density and z is the depth at that point (e is a mathematical constant), and the mixing and exponentiation are provided for you:

color = lerp(color, fogColor, exp(-fogDensity * in.Pos.z));

13. Ithilanor says:

This really looks cool! One of my favorite parts of Minecraft is exploring, and this takes that aspect and makes a larger-scale version.

• Kell says:

Exploration is one of the fundamental motivations and experiences of games, that has been crimincally underused by designers since the technology was there to make it possible. The nerd conceit of ‘interactive storytelling’ and the adolescent obsession with ‘bling’ has driven the development of games as a medium off into the undergrowth.

I can’t count the number of times I’ve seen posts like yours on a game-related forum expressing enjoyment of exploration, often along with sentiments to the effect that the story/characters/writing/plot were largely to be avoided. Guild Wars is a prime culprit.

I share your enthusiasm, which is why I posted in the last thread that what Shamus seems to have in mind is exactly the game I and my GF have been wanting to play for a long time. I am convinced many other people feel the same way.

14. lazlo says:

Might want to invert that temperature gradient. It’s starting to look like you’re building Australia.

now all you need is to add a bazillion plants, animals, and insects, all trying to kill you.

But I do think it’s kinda cool to have the world as a continent, and it gives you the flexibility to expand the world nigh-infinitely by the simple expedient of adding a boat.

• Kell says:

No. Expanding the world infinitely is exactly what NOT to do. There is no benefit in having an effectively infinite world, because it leaves the player without any sense of overall mastery of that world. All games – whatever the mechanics – are essentially about creating a world with certain rules and handing control within those rules to the player so they can come to master that world.

This is a major problem with Minecraft, beause although its world can be approximately 8 times the size of the earth, there is simply no entertainment to be had trying to explore as much of it as possible. The world is so homogenous that within a couple of horizons of travel, you’ll have seen everything on offer; everything else is mere variation of those elements. And the gameplay mechanics are almost totally disconnected from the features of the world.
If e.g. iron was found most commonly above ground, rather than below, it would be worthwhile exploring to find hills or high mountains, because the chances of there being a lot of iron there would be high. Instead, there is absolutely no difference in choosing to dig down at 45Ā° from wherever you spawn, compared to anywhere else.

• Fists says:

sarcasm? This is typical northern hemisphere climate pattern

15. Kell says:

Ha! This is exactly what I’ve been pondering for a while. Both FUEL and Minecraft lack these elements – a finite, distinct landmass, and a rudimentary climate system. The other systems to be placed on top of the terrain are a rudimentary economy, and a rudimentary ecology.
After your last post on this project, I spent an evening mucking around with Terragen to produce similar procedural continents.
The thing is to create a world large enough to feel intimidatingly large when you first spawn in that world, but small enough to be explorable within a reasonable number of game sessions. Crossing from one coast to the other should be a lengthy journey not undertaken lightly, but getting somewhere interesting wthin a minute or so should be easy enough.

• Shamus says:

This is exactly my thoughts on how big things should be.

I notice that I’m gradually making the world larger as I go. When I started, I looked at all those miles of green hills and thought “too much”. But each new layer of variety justifies making the world a bit larger.

• Kell says:

Exactly. Variety, based on descernable procedural rules, is what makes an open world. It’s something I’ve realised about game mechancis, and procedural generation is the best example: the commmon misconception seems to be to try and ‘hide’ any systems responsible for creating a world. But in practice, allowing the players to experience those rules subjectively – dense forests harbour more zombies and fewer buildings, bigger roads attract more bandits, deserts have the least features of all but are therefore safer to cross – allows the player to feel more immersed in the world, not less.

I am ridiculously excited by this project Shamus. You can probably tell :P

• Actually, deserts should probably have wildly varying terrain (erosion is crazy in deserts) but almost no animal life (or all of it should be quite small). If you concentrate all the life around a few puddles of water, then you’ve got an interesting desert.

Add in some survival mechanics to your game, like the need to drink water and sleep and eat food, and deserts could potentially become an interesting multi-layered obstacle. Do you swing wide around it and waste a lot of travel time? Do you try to go straight through knowing that you’ll need food and water and may find it difficult to locate places to sleep? Not to mention that the terrain may be impassable in many places so you may have to backtrack a lot?

Shamus, have you considered adding swampy terrain with dark green foliage?

• Kell says:

Well, when I said “features” I meant general gameplay features like buildings, NPCs, and monsters. Indeed, deserts tend to have very rugged geological features, and that would provoke the sort of gameplay choices you describe.

• Falcon says:

Too much is right, unless of course you were trying to model Wisconson or Michigan. Real land has only about 10% of that many hills, and is mostly flat in between.

Jeez Shamus what kinda crazy alien terrain are you tying to make here? The world* looks nothing like that cool thing you did ;)

*Illinois / Indiana

• Lord Nyax says:

….I don’t know about that. I live in Western Washington and let me tell you, you drive from Graham to Dunsmiure (about 500 miles) and its almost nothing but hills. In my experience a region is either flat, or its hilly. Theres not a lot of hills with nothing but flat land around them.

Still, its all subjective I guess. Never could stand flatlands though. There so….flat. Feels like you’re going to fall off the planet.

• krellen says:

No joke: in Ohio, they call a rise of 100 feet a “hill”.

• aldowyn says:

Most people don’t? What would you call a rise of 100 feet somewhere else?

Of course, I live in Oklahoma, so… yeah. At least I’m in the NE part of the state, not far from the Ozarks, so it’s … relatively hilly here.

• krellen says:

Around here, we call it “that little rise before the actual hill”.

• NeoSonic says:

Yeah, I live in the foothills of the Georgian Appalachians. It was a real eye-opener to visit Kansas and see what they consider ‘rough terrain’

• MrWhales says:

Here it just looks odd and hilly. Of course most things here are heavily altered by people (Northern Tennessee) But there are some crazy hills, I have never been a good judge of heights bigger then a person. But I do know that downtown in my city is about 200ft above the river that is at sea level, and walking up that is about the mirrored image of this line:
/

• Jarenth says:

Here in the Netherlands, we’d probably call that an enormous mountain. Then we’d stick warning signs all over it and form an oversight committee.

• krellen says:

Living in the shadow of mountains that tower thousands of feet over your head constantly on the horizon kind of shapes your view of the world.

• Zagzag says:

I live in what, I am informed, is the hightest cathederal City in Europe! We are used to hills here. There is literally no flat ground at all, you are either going uphill or downhill, no matter where you are. To me this project doesn’t look unusual.

• uberfail says:

What is this ‘flat land’ you speak of?

• Kaeltik says:

I grew up in the Rockies. A visit to my grandma’s place in Kansas would trigger intense agoraphobia when I was a kid.

16. Henebry says:

Shamus said:

We can assume the wind comes from the west, carrying moisture from the sea. The further you move in, the drier it will be. I average out these results (blur them) so that coastal regions can be wetter and so you donāt get overly abrupt changes in climate. Here is a map showing the moisture. (Green = wet. Red = dry.)

In Hawaii, if I recall, the rain patterns are determined by the mountains: somehow as moist winds travel over mountains, clouds form and rain happens.

But even if the scheme you’re using isn’t precisely right, it gives good results. I’m really impressed with the way that this project looks.

• Kell says:

“somehow as moist winds travel over mountains, clouds form and rain happens. ”

This is caused by the effect of altitude. Water vapour diffused in the atmosphere is forced to rise on air currents meeting mountains. As the vapour rises higher, the air cools, causing the water to condense into droplets too large to remain suspended. Rain results. The territory immediately downwind of the mountains then recieves the most rain. The territory further downwind than that is refered to as a ‘rain shadow’.

I remember during Stephen Brigg’s creation of the Discworld Map, Terry Pratchett – who knows a bit about geography – pointed out that where Briggs had placed a damp swamp was actually in a rain shadow and should therefore have been dry scrub. Briggs went back to the drawing board.

Fictional world-building has always been closely related to games and other nerd interests. I find it fascinating that technology is now available that can produce work of that sort, not by automating creativity out of the equation, but by encoding it into the end result.

• Erm, it’s the terrain immediately UPWIND of the mountains that receives the rain, e.g. Seattle. The clouds usually can’t make it over the mountain peaks without dropping the water. That’s why the area directly downwind of the mountains tends to be desert or at least very dry–it’s in the rainshadow of the mountains.

You can see this effect really dramatically in the Pacific Northwest. The west side of Washington State is balmy and moist. The East side is really dry with sharp weather swings.

• Kell says:

Yes you’re right. What I meant was the area where the terrain is high gets the rain, and the area after that in the direction of the prevailing wind gets little to no moisture. I didn’t word it very well.

• mac says:

Depends on the height of the hills. Near where I used to live, there is a hill (few hundred metres) near the coast, and I used to lie on the hilltop and watch clouds appear – but they only appeared as the air passed over the hilltop, and when they did decide to drop the rain they did so on the downwind side of the hill.

• Mayhem says:

That cloud forming on the far side of a ridge is a characteristic of Lenticular clouds.
http://en.wikipedia.org/wiki/Lenticular_cloud

Also known as hogsbacks, they’re always an indicator of strong winds at altitude. A scary sight as a mountaineer, means a storm is coming.

• droid says:

In SMAC you can use a teraformer to make mountains upwind of your “allies” to take all their moisture. But it is kinda tricky since if you actually elevate their territory it counts as an act of war. But then you just terraform their bases down into the ocean with a sea former. Then they have plenty of moisture.

• psivamp says:

I didn’t realize you could do that, and I played that game until it could barely work.

You had different types of terraformers? I just built them on a hovercraft and they could go everywhere. Of course, the AI would only pick out 4 things at a time on the entire world map that it wanted my terraformers to do and send all 40 or so units toward those spots until the first one arrived and did the job in one round, then pick a new spot…

• Jarenth says:

Lowering un-Domed NPC bases into the ocean still remains one of the funniest things to do in Alpha Centauri.

I’d still award a higher rank to ‘Planet-Bustering five cities at once into an iridescent ocean’.

17. MaxDZ8 says:

It’s very effective!

18. EĆ¤rlindor says:

Wow! I love what you’re doing here, Shamus. That’s so cool!

19. Dev Null says:

I live in Northern Arizona, and spent the weekend camping down in the desert. As we drove back up from the dry scrublands into the pine forests around the peaks, I of course immediately thought about your terrain-generator (because I am that geek.) As we transitioned from one ecosystem to another, it was completely obvious that the higher, wetter climate intruded down into the lower drier one along the bottoms of gullies – plants there are more protected from the wind, and get more water, so the wetter-climate plants can survive further down. I don’t know if you’re planning on building trees into this thing Shamus, but if you do you could probably re-use some of your erosion code to find the bottoms of watercourses and places where more rain runoff will collect; those places count as one step “wetter” than the surrounding area (which might mean more bushes or trees at the edge of a desert, or deeper snow up in the arctic.)

You could also combine your rainshadow map above with your erosion routine to work out whats going to be a creek and whats going to be a dry riverbed.

20. BeamSplashX says:

I like this very much. Yes indeed.

21. Mogatrat says:

I’m reminded a LOT of the game Sacrifice. That game had a similar sort of colorful, simplistic aesthetic going in its terrain and its creatures.
God, that was a good game.

• Jarenth says:

It does look a bit like Sacrifice, doesn’t it? All it needs is a few incredibly towering mountains and an unsubtle reference to Earthworm Jim.

22. Atarlost says:

What about using a voronoi texture scaled slightly smaller than your continent size to define plate tectonics? That makes nice irregular patches. The edges could then have an amped up height and zones that cross them could have a predilection for some sort of cliff effect.

That would get you continuous mountain ranges that would have big climate effects.

23. Alan says:

Heh, you have those different types of hills and inclines, when you get to mountains, how about you add one which turns into a volcano?

24. Eric says:

It’s amazing what adding a few things like canyons can do.

Any plans for trees, rocks, grass and shrubbery?

• bucaneer says:

At least one of those things can be requested in the form of a Holy Grail reference, and it should.

25. Knut says:

Looks very good, I must say.

I have a question about the moisture system. Will you make a map describing the moisture patterns(and I assume the mountains blocking), or will you have the system itself find mountains and determine if the deflect the wind upwards so it rains? (I’m thinking maybe horizontal ray tracing…wind tracing? :) )

• Paul Spooner says:

I’d like to know the answer from Shamus as well, but here’s my take on it.
When writing a procedural system, there is always a tempation to over-simulate. This can come in two flavors: Throwing away information, and Simulating too deep.

Throwing away information is when you have the computer generate mountain and hill regions, and then do a simulation on the vertex data. The system just made the mountains, so it should do the simulation on the general “this is a mountain area” information, not the “here’s a vertex that’s higher than that one” info. When you have the computer perform this kind of amnesia, the simulation tends to get too picky and detail oriented (and takes a lot longer). Therefore, I suspect that Shamus will not be doing any weather simulations directly on the vertex data. He’ll use the regions instead.

Simulating too deep is similar, but it happens when you start accounting for the effects of things like wind turbulence, sunlight incidence angles, and shadows from nearby mountains on the evaporation rate of coastal ocean water so that- Augh! Once you put details like this in the simulation you’ll just NEED to make their effect large enough to be noticable. And when you crank up the effect, the tail starts wagging the dog. Minor effects drown out major ones, and the simulation stops feeling relistic. For this reason, I suspect Shamus will do a simple uniform wind direction, with moisture subtraction for high altitude regions. Doing wind deflection off of individual slopes would be both labor intensive and unneccesary.

But that’s just my take.

• Shamus says:

You have nailed it.

• Kell says:

Great post.

I think the critical factor is the degree to which any given procedural element can be percieved by the player. I guess that’s what you meant by “noticeable”. If creating a simulator, that’s a different set of goals. For a game, what the designer is trying to create is an experience. For each element that could be added to the generator, the designer must consider whether the processing demands are justified by what that element will add to the player’s subjective experience of the game.
You don’t want a simulator, what you want is an illusion. The trick is, it must be a sufficiently convincing illusion. Establishing what constitutes “sufficient” is a large part of game design.

Something I realised recently working with the Source engine; all engine features are essentially various attempts to depict natural phenomena. Even adding rust to a wall texture is an example of that.
A dynamic day/night cycle, while more costly, can completely change the experience of being in a game. Minecraft is a great example.
Global fog has appeared in most engines since the late 90s, and is now a relatively simple feature to add that nonetheless greatly affects atmosphere and immersion. Bling mapping on the other hand…

• Knut says:

Yes, I agree, it’s important to show constraint when developing systems like this. Unless you are developing a simulator of course :)

I was just wondering if Shamus had any plans or thoughts about this, to use procedurally generated patterns, or hand made ones. And I started thinking out loud myself (my mind does that, sorry).

I guess you know about the great world generation of Dwarf Fortress, which has this step (also animating the world generation, which is a great way to have what is essentially a loading screen).

26. SteveDJ says:

So where are the clouds? The wind? The blizzard? The LIGHTNING?!?

27. Cybron says:

This is a very cool project. I can envision any number of highly interesting systems built on this generator.

28. somebodys_kid says:

I feel I must state that what you have shown us with these images surpasses the quality of the landscapes found on some of Mass Effect 1’s random planets to explore.

• aldowyn says:

some of? Those kind of REALLY SUCKED. They did their job, but god they were boring. The different planets really only varied by color and a little bit of difference in elevations i.e. some had more flat areas (which you quickly learn to dread) and some had nigh-impassible mountains…

But yeah, these look really good.

• krellen says:

It would have been a lot better if they hadn’t put a Thresher Maw in every single one of the flat spots. Just a couple that were actually safe would have increased the tension a bit.

• Jeff says:

It wasn’t that they put one in a flat spot. The maws were put down with a stamp, providing the flat area necessary to support the encounter.

Any flat spots was a break from their (horrible) random terrain generator.

• krellen says:

I don’t like the way they designed the topology of the planet landings in ME1 (everything else, however, I did like), but I would be much more forgiving if they were actually random; however, they were generated randomly, but then fixed in the game, so every time you land on planet X (even in successive and alternate playthroughs,) planet X looks the same.

This means a level editor just took the random crap and left it as is, rather than taking the random crap and cleaning it up a bit for improved play. Even just a few minutes per map smoothing out the roughest bits would have gone far to make more people enjoy the Mako bits like I did.

For the record, that last screenshot is most definitely a fjord.

30. Kale says:

It will be interesting to see if you make those canyons, plateaus, offshore islands, etc. explorable. It might just be the scale but they don’t seem that way currently.

I’m in favor of the randomized wind and temperature directions. I was strangely disappointed when I saw that the north was going to be cold and the south warm. More-so when I realized basically every game I’ve ever played takes the same north of the equator approach.

Since you’re doing weather and temperature will you do rivers, runoff, or seasons? With the exception of the last (perhaps the middle one as well to an extent) they don’t seem like additions that would necessarily require a bunch of tiny mechanics like Paul mentioned up there. Granted you haven’t gone into water features at all aside from ocean, so I’m probably just getting ahead of the updates there.

31. Dude says:

Oh God. The first thing I thought of watching all these terrain shots is… Alpha Centauri! Did you deliberately choose those colors, Shamus? Because this needs to happen! Like, NOW!

32. Usually_Insane says:

just dropping by to say: “IMPRESSED!”

‘kay, said what I wanted to say :)

*this post has earned the Milop seal of Approval, not this post but Shamus’s post… argh…*

33. Nersh says:

Shut up and take my money, Shamus.

34. Zak McKracken says:

Wow, this is pretty simple and pretty … pretty!
How do you determine whether to invert mountain tops or generate mesas or cliffs? Simply another randomly distributed variable with large wavelength?
I think I’d have great fun just playing with the thing and seeing what happens if one variable was dependent on others or not and so on … anyways, I didn’t think this could work out so well so quickly.

Two things come to mind:
1. Of course geological simulation is out of question, but still it would probably create more believable large-scale topology if there was some sort of anisotropy. Most islands are either volcanic (round, cone-shaped, like Hawaii) or have a mountain chain somewhere (like … most mountains. The Andes may be a good example. So maybe it would be a good idea to distribute the mountains not arbitrarily but throw in one or two seismic lines along which the mountain amplitude is larger, and mountain chains are forming. That would maybe also make the island/continent less round (like Japan or the Americas)
2. proper snow-capped really big mountains: You could apply a shape factor to the sine curve of the hills. Since you know the sine amplitude, just use a good old gamma function*, and it becomes pointed. If gamma then is a function of the hill’s height (and maybe the tallest mountain in the mountain range?), and maybe some noise factor, you’ll have steep pointed large mountains and rolling small hills.

Ohh, the possibilities!

*(h/amp) = (h_sine/amp)^(gamma), with h ranging 0 to 1, and gamma in [1;infinity] gives pointy hills, gamma < 1 gives … plateaus?

• Kaeltik says:

Adding my vote for volcanism. Fresh pahoehoe is just so lovely, especially when it meets the sea. Also, nothing like the occasional lava flow or eruption to liven things up a bit.

Google image search: molten pahoehoe ocean

Other interesting terrain:
1) Giant’s Causeway (Vorronoi Minecraft)
2) Zhangjiajie mountains (inspired Avatar’s Hallelujah Mountains)
3) Putangirua (LotR Paths of the Dead)
4) Craters of the Moon National Monument, specifically Devil’s Orchard
5) Arches National Park
6) Grandidier Baobab Forest (Dr. Seuss goes to Madagascar)
7) Fimmvorduhals (fun to light fire and ice)

35. TigranTheMetz says:

When you start to go into detail with these things, such as with the temperature mapping and climates, I just get these visions of a completely amazing game.

I’ve never been so excited for a one-man project that is barely a game (just procedurally generated world). It must be my love of game worlds, which is furthermore enhanced through that FUEL video you did a while a go which goes so well with this project.

If you could ever implement some sort of gameplay, it would be brilliant. I really think that this has a future that you’d want to think about in terms of advancing it.

Maybe the gameplay could tie-in with the world exploring? So none of the general fantasy quests and all that – instead quests and missions to do with observing the world and exploring it?

I’m getting too ahead of myself, but this is such an awesome thing.