Featured Post

Is there an indie game dev ‘clique’?

Buggered if I know. Not in Newcastle anyway, since there’s bollocks all indie devs up here so far as I can tell. Hope that helps. Love and hugs, Binky   (edit: longer post here) Follow

Read More

Simple Landscape Generation

Posted by CaptainBinky | Posted in Stuff | Posted on 26-02-2016

2

Man I love playing around with landscape generators, it’s the most therapeutic thing ever. I recommend it. It’s the weekend tomorrow, what are you waiting for?

Anyway, in a break from whinging about games and the games industry I thought I’d write a few words about some daft experiments I was doing with landscapes… uhhh… (checks date modified on these files)… blimey, was it 2 years ago? Yeah, apparently mid 2014(ish). I had intended to write this blog post then, but it seems I never got around to it ūüėČ

Here’s an example of one of the landscapes wot I generated:

landscape

A couple of things to note: Firstly, it tiles in both directions which is handy. Secondly, it’s not very Perlin Noise-y. That’s because I didn’t use any kind of noise function to generate it – well, I sort of did (I’ll get to that), but not in the conventional way.

Perlin Noise (or more accurately nowadays, Simplex Noise) is probably the world’s handiest algorithm ever for generating textures. We’ve all seen it, we all know what it is, so there’s no reason to go into it beyond this extremely crude example:

perlinnoise

Read more here

Yeah?¬†It’s basically that except not using regular sine-waves, but instead adding together interpolated random noise –¬†for every iteration the frequency of the noise goes up and the amount it contributes goes down.¬†When using Perlin Noise¬†to generate your noise values, the result of cumulative additions (each time doubling the frequency and halving the intensity) is¬†that classic¬†turbulence look which is so synonymous with Perlin Noise that we often call the texture itself Perlin Noise:

clouds

(Okay, this is Photoshop’s Cloud Filter. But it’s basically the same and, for all I know, might actually be coded using Perlin Noise)

Anyway, I bring this up not because of any of this¬†specifically, but because the principle it operates on (add together lots of things to build up interesting structured noise) is the principle my landscape generators work on. This principle can generate you really interesting landscapes irrespective of what it is you’re using to add together to produce your final result. So your source could be an unstructured random mess but the act of adding lots of it together – each time the input contributing less than the previous iteration – can produce ordered structure.

So for my landscape, what was my input? Well, I just repeatedly added¬†sine-wave strips (where each strip’s orientation – either horizontal or vertical – and its position, thickness, amplitude, and frequency were random). So the first iteration would look like this, for example:

land1

And iteration two, could look like this:

land2

Keep going, then render it with landscapey colours and you end up with something like my landscape above. It’s¬†dead simple and you can use absolutely anything for your iterative additions – sine-wave strips, filled circles, filled squares, various pictures of cows – anything. Because anything added together sufficiently, will eventually produce something which looks like structured noise – which makes playing with your inputs kind of fun ūüôā

So – now knowing that my landscape is just lots and lots of sine-strips, looking at it again it’s really really really flupping obvious:

land3

Here’s a landscape¬†where I used filled circles (with random positions, radii, and strength – where the strength also diminishes with each iteration), where the circles were filled like a crater such that in cross-section they’d look sorta like this:

circlecrosssection

landcircles

Notice the crater in the central island ūüôā

So anyway. It’s not rocket science, nor the world’s most amazing way to generate super-realistic landscapes. But it’s fun, so I thought I’d share ūüôā

edit: This is what I love most about playing with this sort of stuff.¬†How something actually works isn’t in the least bit important, all that matters is whether the results are close to what you want. I love it when the underlying nuts and bolts are stupidly simple.¬†While I don’t claim to have invented anything original with this approach, what¬†lead me to¬†this style of height¬†generation was thinking about landscapes in terms of plate structure. I¬†considered trying to simulate plate tectonics (crudely) but then decided that it wasn’t really important how I got these sorts of structures only that I got them. So the sine-wave wibbles were¬†the first toe-dip into this kind of thing. Instead of using smooth noise, using a pattern with a sharp cut-off (you’re either in the sine-wave ripple (and therefore adding a bit), or you’re not – there’s no interpolation) could yield¬†some interesting features – a curve of a bay where around that curve you may get some little atolls, or dramatic cliff edges. These little features did somewhat end up in the results – close enough, at least, to be fairly satisfying.

Comments (2)

Excellent. I have been getting started with procedural terrain generation lately as well and did the whole perlin noise thing but didn’t find it quite right, so this looks like a great next step for me. Thanks.

I should note that the biggest difference between using something like Perlin / Simplex Noise and this is… this is not fast. You’re overdrawing over and over and over again. That’s not to say there wouldn’t be appropriate applications for it, however – but it’s why I generally do this stuff just for fun.

Write a comment