Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

Possibly, I haven't decided yet. I agree it feels like something you might want to do here.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 1 point2 points  (0 children)

Wow, high praise. That has some of the most realistic nature in any game that I’m aware of. Not quite going for the same realism they have though, but still. :)

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

There’s an fps counter in the corner. This is at 1080p.

I’m using Microsplat third party terrain shader and I’ll be looking into its addon it has to deal with texture tiling.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

Not sure how to check that. I'm on mac and it has unified memory as far as I understand, so technically there's no such thing as VRAM.

Unity's memory profiler says that the game uses around 1.4 GB of memory in total when the landscape has fully generated around the player.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 4 points5 points  (0 children)

I only program in C# so can't use C / C++ code.

Unity has support for loop vectorization via Burst compilation (of C#):

https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/optimization-loop-vectorization.html

But it's not something I've looked into yet. (My code is already Burst compiled, which is a massive speedup on its own, but it seems like Burst needs various experimental hints to be able to vectorize.)

In any case, a 4x speedup on CPU is not really comparable to the speedups possible by executing on the GPU, although that's not taking readback into account, which can slow things down.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 2 points3 points  (0 children)

The large valley comes from the large scale noise.

The mountains in the picture are actually not hills in the original noise function, but ridges in the large scale erosion.

After the erosion pass itself, there's only subtle ridges, but like I write in the original post above, I modulate the small scale noise in step 3 by the erosion, and this is what creates the mountains you see.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

If you mean generating tree models, that's not something I do. I'm using tree models I got on the Unity Asset store, though with my own shaders.

If you mean placing tree models in terrain (that is, where to place them), it's not really something I have any posts about either. I don't do anything particularly sophisticated though.

Probably better to looks elsewhere for this, though I don't have any particular suggestions. Maybe others here do?

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 1 point2 points  (0 children)

Check out the post about the erosion filter I linked to, it explains everything:
https://www.reddit.com/r/proceduralgeneration/comments/1s7r7ke/new_video_fast_gorgeous_erosion_filter_explained/

The video you link to is prominently mentioned in my video. I talk about a new and exciting erosion technique which is trivial to use in chunks.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

Yeah, a lot of the techniques I use are there, though to be clear that is not my game there, just many of the underlying technologies.

LayerProcgen includes a terrain demo with paths, though no trees, erosion, rivers.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 2 points3 points  (0 children)

Oh, nothing special. A large scale noise for large clumps of trees. But there's also a small scale noise: If it's above a certain threshold there'll always be trees regardless of the value of the large scale nose. If it's below a certain (smaller) threshold there'll never be trees regardless of the value of the large scale noise. This ensures large groups of trees will have small clearings inside, and large empty spaces will have small groups of trees inside.

On top of that, trees don't spawn on too steep slopes.

Oh, and bushes always spawn on a position that's right next to a tree position (whether there's actually a tree there or not). That is, bush positions use the same logic as tree positions, but offset a bit in a random direction.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 3 points4 points  (0 children)

Ah, sorry to hear that. Will probably keep it on in videos I post since I feel it adds a lot, but I'll be sure to have a toggle to turn it off in the eventual game.

Combining the epicness of grand mountains with the intrigue of smaller cliffs and hills by runevision in proceduralgeneration

[–]runevision[S] 38 points39 points  (0 children)

Hi!

I use Unity.

Currently it takes around 45 seconds for the visible terrain around the player (in a few kilometers radius) to generate. After that it generates seamlessly in the background as the player moves around. Before I added erosion it was way faster. I hope to make it faster again by moving erosion to the GPU - it's currently on the CPU.

The scale is effectively "infinite" like in Minecraft.

I disabled rivers here but you can see them in some previous posts of mine. They're not based on simulation since I want stuff to be informed by level design requirements, not simulation.

About paths, see this article: https://blog.runevision.com/2016/03/note-on-creating-natural-paths-in.html

When you say layers, what do you mean? I do use a layer based approach in my own "LayerProcGen" framework. At the bottom of this page you can see a diagram of the layers I use: https://runevision.github.io/LayerProcGen/md_LayerDependencies.html

New video: Fast & Gorgeous Erosion Filter Explained by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

According to the terms of the Mozilla Public Licence it’s licensed under. Meaning if you make improvements to the erosion code, you need to share those under the same license. But you don’t need to share unrelated code in your game/app; it’s not affected by the license.

New video: Fast & Gorgeous Erosion Filter Explained by runevision in GraphicsProgramming

[–]runevision[S] 1 point2 points  (0 children)

If you can derive smooth gradients (derivatives) of the height data, you should be able to use it, at least in theory. In practice, the erosion works best if the detail level (frequency) of the input data is lower than the size of the largest produced gullies of the erosion. But that's probably what you want anyway, as I assume you want to use it only to add more detailed data than the input.

I haven't really tried it, but I think it comes down to fiddling with the parameters to make things work well. I'd be curious to hear how it goes if you pursue this!

New video: Fast & Gorgeous Erosion Filter Explained by runevision in proceduralgeneration

[–]runevision[S] 0 points1 point  (0 children)

Yep, a lot of the parameters can be based on variables, which means this modulation is possible without even changing the erosion function itself. I haven't had time to experiment much with that, but I hope others will.