Monstrous terrain

Today, I want to discuss a strange experiment. While the results are not particularly impressive, I feel that there is something there in the method that could be salvaged and used for other purposes.


At first, it might look like just another Perlin noise rendering, but the shapes it generates are strangely sinewy and odd. But the true monstrosity of this sort of terrain can only be appreciated across iterations:


I might finally have cracked the nut to generating unique, alien terrains that are truly dissimilar, and not a single line of code has been added to create diversity. The diversity is inherent within the monstrous algorithm.

What is the monstrous algorithm, then?

Usually, you would generate a heightmap with this kind of formula:

height(x,y) = noise(x,y)

One of my favourite evolutions of this algorithm is distorted Perlin noise, which would instead look like this:

height(x,y) = noise(x+noise(x,y),y+noise(x,y))

The monstrous algorithm is then the continued evolution of this, completely dropping the original x and y values:

height(x,y) = noise(noise(x,y),noise(x,y))

This means that there is no linear relation between coordinates on the screen and coordinates within the sampled Perlin noise. Instead, coordinates are determined fully by Perlin noise. This means the same honestly kind of small area of Perlin noise is being sampled repeatedly from strange directions by the noisy x and y coordinates. This remixing of the original terrain is what causes each individual rendering to be so different.

I'm a big fan of creating animations that try to show off the methods at work. I tried to do the same thing with the monstrous terrain. It shows an interpolation between first the plain Perlin noise sampling using actual coordinates, to last, the fully monstrous terrain.


It just does not make any sense. The animation is strange, the method is strange, the result is strange. But I am intrigued. Endlessly intrigued. I wish I was intelligent enough to really understand what I am seeing; however, I am not. Like a mathematician working with 4 or more dimensions, I must accept that I am intellectually blind to this. Blind, wholly blind.

Let's see it in 3D. Hijacking my code used for Isle Terrain, I can render a 3D landscape and see what these, er, monstrous mountains, look like with volume:


Huh. Sort of alien, yeah, but also...


It actually looks okay. I mean, this is just the simple, unadorned heightmap without added mountain peaks. But it looks both normal, interesting, fluid, I don't know. I am pretty intrigued.


Ignoring how strange the colours for the water looks, this is actually a well-looking landscape. And this is why I continue to be fascinated by this monstrous terrain. Some day. Some final day I will be able to use it for something useful.

Code can be found here, but it really is just the above line that's important.


Edit: Apparently this is called Domain Warping and is an even stronger method than I could have imagined. Especially interesting is the possibility of using higher-dimensional noise. /u/Tailcaller has an excellent elaboration.

Comments

  1. Cool! Have you considered a wind / erosion simulation algorithm? That might make it lookk even more interesting.

    ReplyDelete
  2. That's actually a great idea. The problem with Perlin noise and this sort too is the much too gentle curves, and erosion might solve that, creating natural mountain peaks and such. However, I have been trying to add erosion to Isle Terrain and repeatedly failing, so not for now, I guess

    ReplyDelete
  3. Something to ponder for a future time :-)

    ReplyDelete
  4. This is sometimes called "perturb" or "warping" and you find it in some noise libraries:
    https://github.com/Auburns/FastNoiseSIMD

    ReplyDelete

Post a Comment