I've quietly made my LayerProcGen framework public:
https://github.com/runevision/LayerProcGen

It's a framework (C#) that can be used to implement layer-based procedural generation that's infinite, deterministic and contextual.

Nobody else have tried/tested it yet - if you're up for taking it for a spin, let me know how it looks; what's clear or confusing, if you think there's low hanging fruit improvements I could make, etc.
#ProcGen

GitHub - runevision/LayerProcGen: Layer-based infinite procedural generation

Layer-based infinite procedural generation. Contribute to runevision/LayerProcGen development by creating an account on GitHub.

GitHub

The value of layer-based generation is not just the implementation, but also a certain way to *think* about how to define spatial dependencies for large-scale generation.

I've put a lot of effort into the documentation and its illustrations (examples here), which explain the high level concepts of the framework as well as the details.
https://runevision.github.io/LayerProcGen/

LayerProcGen: LayerProcGen

Procedurally generated open-world games tend to use "the functional approach" which essentially requires embracing sandbox gameplay.

LayerProcGen points the way towards making open-world procedural games based on "the planning approach" instead, which is normally only seen in "finite space" games such as rogue-likes.
#ProcGen

@runevision (Psst I think you meant "functional" on the first one and not "planning" on both.)

Really curious about this stuff!

@SonnyBonds Yeah indeed, just fixed that, thanks!

@runevision I love your thought process on this, and every diagram has me thinking "yes!"

It's the proper route to emergent surprises for the player

@runevision My recent project used something like this to build the world generator. Multiple different template/layer systems at different scales and neat maze generator algorithm to create mostly non-blocking navigation at player level.
@mikeful Cool! Is this one of the projects on your website? Would love to learn more about it :)
@runevision I have it on Github. Built it for Cyberdeck Cafe Discord tamagotchi/virtualpet contest where everyone used same development board. https://github.com/mikeful/load-cyberpet
GitHub - mikeful/load-cyberpet: "Legend of the Adventure Dude" entry for Cyberdeck Cafe virtual pet contest using Heltec WiFi LoRa 32 V3 devboard

"Legend of the Adventure Dude" entry for Cyberdeck Cafe virtual pet contest using Heltec WiFi LoRa 32 V3 devboard - mikeful/load-cyberpet

GitHub
@runevision Finally ended up going through this proper, and realised I’ve taken basically the exact same approach! I just think of it as “cone-based” instead of “layer-based”, so I didn’t recognise it at first. :D Very happy to see someone write about this, and with such care!
@jonikorpi Ah, cone-based as in the shape of the dependencies? Or maybe the shape of loaded data from consecutive layers? I’d love to hear more about your approach, possible differences, insights you’ve gained using it, what you’re using it for exactly etc. :) If you have time to tell about it sometime.

@runevision It was for world generation. Each layer “zoomed out”, forming a kind of pyramid or cone if you rendered and spaced them out a little: just like many of your illustrations!

Managed to revive a bad old prototype. The “levels” on the right are the layers. Each hex depends on a group of closest hexes from the next layer. https://old-gamedev-experiments.pages.dev/worldgenerator/

World Generator

@runevision For my PhD thesis, I created a multi-layered grid generating / caching system that you could think of as the dual of a quad-tree with the grid coordinates on the odd values rather than the evens. No two LODs share the same boundary which let me amortize updates across the different levels as you move. Also, objects of any scale would be fully contained in a single cell of some detail level. I didn't get around to implementing anything using the latter.

https://cs.brown.edu/people/sdollins/world/home.html

@scdollins That's neat! I'm unsure though what this relates to? Did your system do anything based on a "planning approach"? Based on skimming your thesis it seems to be a classic "functional approach"?

@runevision I got a job offer and ran out of time, so I focused on implementing the functional terrain. Your implementation is much better fleshed out than mine would have been.

My idea was similar to yours in that coarse levels would place towns and the paths between them which would influence the terrain generation of the finer levels they overlap. Likewise, I intended to generate watersheds that would force the land to descend as needed.

Your implementation easily subsumes mine.

@scdollins Right, I'm convinced there has been many people thinking about and even sometimes implementing concepts quite similar to mine, since the basic ideas are more or less straightforward. I just hadn't seen much discussion of it, let alone any reusable implementations shared, so I felt I could contribute something there :)
@runevision okaaaaay, I think you just provided me with a Solution for my Problem as well. I'm not procedural generating, but want to convert OpenStreetMap Data in exactly the same way into 3D Data.
@runevision I try to get it to work in Godot and prototype a couple of things. Thanks for the ground work.

@Sythelux Cool! I'm very curious to hear how it goes in Godot. I've tried to make as much as possible non-Unity dependent, but some non-core things were difficult. Details here:
https://runevision.github.io/LayerProcGen/md_UsingWithoutUnity.html

I'd be open to including Godot-specific parts and wrappers (similar to the Unity ones) if someone wants to implement it, and we can find a good way to make it work in the repo.

LayerProcGen: Using Without Unity

@runevision how did you do the upm branch is it simply branched out and then files moved around or is there some file referencing magic going on? because I would do something similar in Godot with their addon system.

btw I can't promise anything, but this framework looks really well thought through so I'll at least start to make something and we see how it goes.

@Sythelux It's a separate branch (with no shared history) where the files are moved around according to this python script:
https://github.com/runevision/LayerProcGen/blob/main/upm_release.py

Currently I run the script and check in the result manually on my computer for each commit, but I might automate it with a GitHub action at some point.

And yes, there could be a separate branch for delivering to Godot as well using a similar approach.

LayerProcGen/upm_release.py at main · runevision/LayerProcGen

Layer-based infinite procedural generation. Contribute to runevision/LayerProcGen development by creating an account on GitHub.

GitHub
@runevision okay this makes sense now, because github said about the upm branch, that it is "6 commits ahead of and 5 commits behind main" which only makes sense, if you'd branch it off, but I gonna ignore what github does there.
@Sythelux Yeah I don't know how to make GitHub treat it properly as an orphan branch. It's weird, because GitHub does not say that about the gh-pages branch even though it also has no shared history.

@runevision I got one half of the SimpleSample done with no changes in the base code. I had to make an InterOpGodot of course and an extra Godot for the commons files, but that was pretty much it so far.

I had to realize that you had the exact same idea with threaded loading, but your implementation is better.

I'll try to port the TerrainSample as well and then I see if I can add it to my Digital Twin project.

my branch is here:
https://github.com/Sythelux/LayerProcGen/tree/godot

Thank you for the clean work.

GitHub - Sythelux/LayerProcGen at godot

Layer-based infinite procedural generation. Contribute to Sythelux/LayerProcGen development by creating an account on GitHub.

GitHub
@Sythelux Oh wow! I’m looking forward to having a look at this!

@runevision I got the second half of the Simple Samples as well!

I pushed it. Feel free to check it out. I'm very happy this was possible ~

@Sythelux I had a quick look and it looks very interesting so far! Let me know how it goes with the terrain sample. It's quite a bit more complex and Unity-dependent (with the terrain objects) than the simple samples, but it looks like you're already working on mapping it to (third party) terrain functionality in Godot.

@runevision thank you! and I do try to get terrain to work. I'm actually sitting in the Godot Chat rn, because Terrain3D is missing C# bindings and there is a proposal for Godot to generate C# Bindings for any GDExtension itself, but I can't seem to find how. Since no one is answering me currently I will fall back to create a makeshift binding with only the functions I need exposed.

But yes the whole Terrain API might be completely different from Unity, but I wanted to figure that out anyway.

@runevision wow really great promo video , seems like you've put a lot of work into it!
@fleeky Thanks! And yeah, I already had a system for debug visualizations for my framework, and then I worked a bit on making those visualizations more polished. I'd like to make a longer YouTube video about the framework at some point, where all this should come in handy in particular, but I've also used it for various images in the documentation.
@runevision I am definitely going to play with this when I get some free time! Great job putting so much effort into an awesome procgen framework and making it public as well!
@jargon Looking forward to hear your impressions!
@runevision Oh man, I'm just about to go on holiday for a couple weeks! Don't think I'll get a chance until after!
@jargon Of course, enjoy your holiday :)
@runevision Really amazing work! Thanks for sharing.
@runevision Was looking at building something similar myself, will take look at this for sure, thanks for sharing your hard work! Will report back with any feedback.
@runevision I love the visualization you have in the video
@runevision The sample in the repository is made with #Unity3D but I wonder if it would be possible to use it in other engines as well, for example #GodotEngine It supports C# as well and 3d is getting really good...

@lw64 Right, it's designed with that in mind; check out the "using without Unity" page:
https://runevision.github.io/LayerProcGen/md_UsingWithoutUnity.html

And also check out @Sythelux's work on getting the framework and samples to work in Godot:
https://phanpy.social/#/mastodon.gamedev.place/s/112497970064705346

LayerProcGen: Using Without Unity

@runevision @lw64 I'm on good track with that, but it will work differently from unity in Godot. I don't have burst and Unity.Mathematics package, so I'm currently building a slow version with Godot Native Array to get a hang on and then maybe switch to the GodotServers pattern (I can tell more about it, if you want).

The Simple Sample is enough to get started and even make your own sample for whatever else so the "framework works in Godot", but the Terrain Sample will take me a while longer.

@Sythelux @runevision I am a contributor to Terrain3D, and in the next version there will be also foliage/instancing features available, but they are already on master, and ready for testing afaik.

The Godot native array thing is about the internals of the framework, right?

@lw64 @runevision

ah cool. If you are contributing to Terrain3D could we talk about the C# bindings? The current approach is okish, but the maker of DebugDraw3D (https://github.com/DmitriySalnikov/godot_debug_draw_3d) found a way to generate C# Bindings from code. It would be cool if that exists for Terrain3D as well.

for the arrays I just realised I have to remake that part again. I was using Godot.Collections.Array<T> (the native arrays I thought), but really need to use T[] arrays in C#

GitHub - DmitriySalnikov/godot_debug_draw_3d: Draw 3D debug graphics and 2D overlays with this add-on.

Draw 3D debug graphics and 2D overlays with this add-on. - DmitriySalnikov/godot_debug_draw_3d

GitHub
@lw64 as for the foliage. The photon scatter is actually decent enough to use. I might need better access to the splat-maps aka I think you call them control-textures. Tbh if you are good in the Terrain3D code and like to code C# you can try to help me on that end. I would submit my WIP code and concentrate on the UI debugging toggles instead for now.

@Sythelux I think you mean proton scatter, but that works of course too.

Actually I never written C# code, but it shouldn't be too difficult ;) I can look into your port if you want :)

@lw64 C# can be difficult, when it is a bit of a mess.

I submitted the latest version you can take a look and should even be able to run it. You won#t see anything as it is a heavy WIP, so it is getting stuck somewhere in the code when executing, but the skeleton is there.

@Sythelux @lw64 I added discussions support to the original repo, and if you want you're welcome to discuss the ongoing Godot support there. I added this thread myself: https://github.com/runevision/LayerProcGen/discussions/6
Status of support in Godot · runevision LayerProcGen · Discussion #6

While I only tested LayerProcGen in Unity, it was designed to be usable in any C#-compatible engine by keeping the core (and as many peripheral utilities as I could) not dependent on Unity. There h...

GitHub