Perdido Street Posted May 30 Report Posted May 30 (edited) Maybe another approach to generation would be starting with the water-table (the underground plain at which moisture collects because it can descend no further). This, with seasonal variation, usually happens where the deepest soil layers meet bedrock *(though Aquifers -layers of porous Carbonate or Basalt rock types- can also absorb water, and Aquitards -soil rich with clay or too steeply angled- tend to resist absorption). Since terrain generation already takes into account geology + biome, it should be possible to generalize where its water table forms: in a desert chunk, for example, it would be a single block thick at bedrock level, whereas in a jungle chunk the table could be several blocks tall from bed rock. Any open air spaces that intersect the water table would fill with water (be they caves or river beds). Implementing the water table creates a basis for saying where rivers should start (a chunk with a higher water table abutting a lower elevation chunk). That wouldn't in itself solve the issue of creating realistic erosion paths or consistent volumetrics, but, assuming that (due to gravity) water always wants flow down to be, or fill up to, as close an elevation with the water-table as possible, that provides us a context (alongside knowing what materials form Aquafers vs Aquitards/Can vs can't be easily eroded) for where the river would wear a channel through the land vs where (having reached the local water-table, or erosion resistant barrier) it would spread out into a pond/lake. Going further, with the Water table's height tied to seasonal variation (temporarily up during rainy season, or down during a dry spell), it would be possible to simulate flooding and drought. There is already a water saturation mechanic for cropland, by averaging this measure at a chunk/layer level, it could even be possible to track the change in the water-table day by day as a result of rainfall + temperature. (Maybe it's a pipe-dream, but imagine seeing puddles in the ditches after a rainstorm, then watching them vanish as the saturation transfers block layer by layer down to the water table) Besides its benefit to the river generation project, the water table (specifically being able to dig down to it) is the entire basis of making wells, which would, as is the case in real life, significantly open up inland/dry-region living. Edited June 2 by Perdido Street grammar + better explanation 2
DeanF Posted May 31 Report Posted May 31 (edited) On 3/26/2026 at 1:38 PM, Bruno Willis said: I would say, I'm pretty sure rivers almost never split once they start flowing, it's more likely you get streams converging as they flow down hill (which your model also does). Yes, this is true. The folks at cartographersguild.com, where they make fictional maps, are quite dedicated about criticizing this mistake. They call them the River Police. With extremely rare exception, rivers combine, they don't fork. Another thing that trips up amateur cartographers for some inexplicable reason is the fact that water flows downhill. I still get boggled when I see that one violated. Given the way that VS worldgen proceeds in chunks, I can see a lot of difficulties with generating rivers. They sort of have to flow downhill, and how can that be predicted for a downstream chunk that hasn't generated yet? You might have to recreate the whole worldgen process to include an erosion mechanic. Steal it from a program like Wilbur?. (Wilbur works by moving voxels downhill scaled for slope and rainfall.) I suspect that is why all of the mods that add "rivers" result in some pretty odd geography, like holes punched through mountains. That's just a problem with any game that descends from that other voxel game, y'know? The basic worldgen that got inherited is problematic. It really should be erosion-based instead, but crap that's practically starting development over again completely. The little streams and rivulets that we have now are a lot easier- they just need to end in ponds in low areas instead of magically dissipating. Edited May 31 by DeanF 2
Sunny_Sometimes Posted 35 minutes ago Report Posted 35 minutes ago I was going to comment on another river-gen thread but did a search and found this one as well, which seems more extensive. On 4/20/2026 at 4:08 AM, Bruno Willis said: Yeah, I think vintage story could do amazing things if it did planned world generation. Imagine if the game sketched out certain key things, mountain ranges, large rivers, oceans, and then placed significant terrain into the world based on those landmarks: mountain passes, mountain forts, overgrown quarries forming in the mountains, the second story location forming near one of the rivers, and on other rivers maybe large ruined cities, or just old bridges with ruined roads leading to other locations and landmarks. The game could start of placing these large bits on a vague map, and once the biggest land features were set, the parameters for the next most significant features would become clear, and the game might work its way down from there. We'd end up with an interconnected world (even if it would lose some of that random generation charm). This does feel like a radically different way to generate a world, and I'm not sure it would support the re-playability of a noise map as well, but who knows? This is more-or-less the train of thought I've been going down. Big-picture systems like geology and hydrology seem like the biggest bottleneck, to me, aside from general performance. A larger-than-default world height would help too. Perhaps, for performance's sake, worlds could be divided into two layers: "visible" chunks and "macro" chunks. Visible chunks would be closest to how chunks currently operate, handling anything block-scale like minor terrain generation, foliage placement, etc., generate as the player approaches them, and dynamically load and unload. Macro chunks--possibly containing 4x4 visible chunks--would generate at world creation and be the simulation layer ("sim chunks" might be a better name) that visible chunks derive their attributes from and that large-scale world systems operate on. Some broad geologic processes might even be simulated during world generation at the macro-chunk level (1 macro chunk would = 1 pixel on a global heightmap, for example). This could cover sediment deposition from erosion, marine sediment deposition from a previous high sea level (local minima that "dry up" when the sea level lowers again could receive halite as their final deposition layer), mountain formation and volcanic activity from continental movement, glacial scouring near the poles, etc. These deep-past geologic processes would become fixed once the initial generation is complete but would dictate the general shape and rock structure of the terrain, as well as the locations of things like hot springs. Systems like weather patterns and hydrology would also function primarily at the macro-chunk scale, especially for unexplored and unloaded regions. Aside from all this water stuff, that might also mean accurate weather representation in distant chunks, even ones not actively being rendered. The ability to go from completely clear skies to heavily overcast thunderstorm and back again, just from hopping over an invisible line, is a pretty immersion-breaking aspect of the game currently, though I'm not sure if that's stemming from a shader limitation. When it comes to something like water tables, for example, a given macro chunk would have data for the quantities and directions of its hydrologic inputs and outputs based on its net geologic properties, precipitation experienced, and the states of the other macro chunks around it, and would derive a net height and inclination of the chunk's water table (as a plane) as well as of runoff intensity based on that. When loaded, visible chunks could then apply that net reality to their local (tangible) terrain features, with springs appearing in hillsides, wells filling, etc. Loaded visible chunks might then have some degree of agency, meaning that terrain changes like a landslide inhibiting flow or a canal being dug by players would alter the macro chunk's outputs, which would in turn ripple out to other macro chunks adjacent and down/upstream of it of it. For river generation more simply, a flow path could begin from all four sides of the highest-elevation macro chunk on every landmass that breaches sea level. It would then propagate downhill from there until reaching the ocean (or one of the other paths) by flowing into the adjacent chunk with the lowest elevation, with a strong preference for flowing through softer rock. If it reaches a local minimum (no downhill), it might pool into a lake, increasing the water level until a new lowest chunk is found to overflow into. The delta between one chunk and the next would determine the presence of waterfalls, rapids, etc. Once the primary flow paths are mapped, it will search for the next-highest local height maximum and do the same with it, propagating flow paths until they either reach the ocean or an existing flow path. This process could be capped after a certain number of iterations or vary depending on terrain roughness. A rough weather/climate model could then assign a maximum rainfall value to each macro chunk, which would go on to contribute that water to the nearest flow path at or below its elevation and add it to the flow from upstream. River size, speed, etc. might also inform some sort of erosion algorithm at this point to cut channels and gorges for the rivers and fill in tiny lakes. If rivers are not going to change seasonally, the contribution process might be repeated for minimum rainfall values and an average flow state could be reached. When visible chunks are generated in that location, they would already know where the river gorge should enter and exit the macro chunk and its size and fullness at those points, as well as where any tributaries are coming from. Small-scale terrain could then generate backwards from that information in a manner dictated by the world seed. All that might require more under-the-hood work than is realistically attainable, but it makes some form of sense in my head lol.
Recommended Posts