Noise Ghosting

I’m attempting to make a biome inspired by @endymion’s namesake:

The general approach I’m taking is to set up a heightmap that has the rivers. I then couple that with a 3d projected copy of the exact same nodes/seeds as cave noise, to carve out the terrain between the rivers - relying on the fact that liquid doesn’t spawn in “caves” - to create open terrain below the water level.

So far, it seems to almost work, except I’ve hit a really odd snag:

For the most part, the noise that creates the rivers lines up with the 3d-projected caves for carving out the terrain. Except, weirdly, you’ll notice that there are some additional “rivers” that are not being carved out of the terrain. These “ghost rivers” are not present (from what I can tell) in the 2d node that is passed to the 3d-projection node.

I’m curious if anyone has some hints or insight into what’s going on here? (cc @lucadeltodecso)

You can check out the configs via GitHub - nevir/boundless.worlds at river-roads

17 Likes

The mountians should be a bit higer maybe

4 Likes

I’ll try to take a look sometime, but the “projected copy of the exact same nodes/seeds as cave noise” worries me a little ;p shouldn’t you just use a custom node here instead of duplicating sub-graphs?

2 Likes

Awesome, thanks!

Ha, I’m keeping it DRY - it is using a custom node to share the config :stuck_out_tongue: (still have to be careful to make sure the custom node instances have the same seed)

Wow this looks amazing and very promising indeed. Think there’s a couple of things that make this world interesting. First off of course there’s the river that seems to be above what’s supposed to be water level. It’s height alone is stunning. Then there’s the lush valley that separates the river from the mountain. And lastly there’s the even higher mountains on the sides.

I gotta say you’re close! I’d love to see this in action since honestly it’s these kind of weird abstract perspectives that make these worlds interesting. I would definitely play this one! Thanks for sharing.

Sorry forgot to get back to you on this!

I took a look at it now, and the reason it isn’t working how you hoped is that caves are not a simple noise function application, the way the caves work (and is not as it stands configurable) is that the cave noise is sampled ‘twice’ at different offsets, and then the ‘cave’ is defined to generate where noise_sample_0 < threshold || noise_sample_1 < threshold || (noise_sample_0 * noise_sample_1) < threshold. Doing it like this, you can plug in simple noise functions and get interesting looking winding caves out of it, and noting that the combined thresholding like that isn’t achieable with noise combinators defined to return floating point values…

The same happens with distortion noise, which equally samples the noise twice at different offsets to get the seperate x and z distortion amounts

2 Likes

Ah! Thanks for the explanation. Makes sense (and seems to avoid having to do perlin worms or other approaches like it?)


For this particular biome, I guess I’ll have to be ok with the extra “plateaus” - that’s a constraint I can work with! :stuck_out_tongue:

1 Like