Quick performance preview of my hobby procedural city engine (C++) on the Steam Deck
A quick preview of the performance on the Steam Deck (apologies for the youtube link but the video is 600mb and it's not practical on my data package to currently upload this >1 time): https://youtu.be/kWwDXNQ6w3Q
https://redd.it/138kkj0
@proceduralgeneration
A quick preview of the performance on the Steam Deck (apologies for the youtube link but the video is 600mb and it's not practical on my data package to currently upload this >1 time): https://youtu.be/kWwDXNQ6w3Q
https://redd.it/138kkj0
@proceduralgeneration
YouTube
Steam Deck - Performance Demo
A quick preview of the performance on the Steam Deck. Music is the Geoffrey Day remix of Arlekino by Mick Gordon (and featured in the game "Atomic Heart"): https://youtu.be/QWsTDB3gZ0A
Applying a Distorted Voronoi Map to a Perlin Noise Map
Hi! I'm completely new to game development but have a background in software engineering. I've been brain storming for a game idea that would allow a player to choose what biomes are in what spots on a finite voxel map. I have following requirements:
1. The initial height map will be generated by a low frequency/contrast Perlin noise function so that there are some small hills and shallow valleys, but not much. The idea is it's barren.
2. The map will be divided into random undeclared biome sections of relatively equal size using a voronoi map (or something similar). Whether the biome map is procedurally generated does not matter too much to me (the map bounds will be finite so there's no decisive reason it should need to be tileable).
3. The player should be able to choose one of the undeclared biome sections and choose which biome should go there. As a first pass there are no limitations on which biome can border another.
4. When the player chooses a biome, either a corresponding Perlin noise function is applied to that section of the map, or the parameters of the initial noise function are modified in that section to match the selected biome, and blended on the edges in a way that is reasonable. For example, if the user chooses to place a mountains biome, then higher hills and valleys should be placed in that section. If a Plains section is placed, then the opposite.
5. The terrain is not modifiable in any other way, no mining, building etc.
The main issue I'm having with processing all of this is figuring out how to do a look up of what section of the voronoi map a voxel vector is in when rendering, and how to preform the blend so that when a plain is placed next to a mountain, there is a reasonable blended slope for 1-3 tiles around the perimeter based on what the neighboring biome's topography is like
Any insights or ideas on how to approach this would be super helpful! I attached an image for a visual description.
https://preview.redd.it/hp7ihjetz1ya1.png?width=841&format=png&auto=webp&v=enabled&s=6fe31ae399b72eaa97c5cca9879d8fa0b885decd
https://redd.it/138wpa8
@proceduralgeneration
Hi! I'm completely new to game development but have a background in software engineering. I've been brain storming for a game idea that would allow a player to choose what biomes are in what spots on a finite voxel map. I have following requirements:
1. The initial height map will be generated by a low frequency/contrast Perlin noise function so that there are some small hills and shallow valleys, but not much. The idea is it's barren.
2. The map will be divided into random undeclared biome sections of relatively equal size using a voronoi map (or something similar). Whether the biome map is procedurally generated does not matter too much to me (the map bounds will be finite so there's no decisive reason it should need to be tileable).
3. The player should be able to choose one of the undeclared biome sections and choose which biome should go there. As a first pass there are no limitations on which biome can border another.
4. When the player chooses a biome, either a corresponding Perlin noise function is applied to that section of the map, or the parameters of the initial noise function are modified in that section to match the selected biome, and blended on the edges in a way that is reasonable. For example, if the user chooses to place a mountains biome, then higher hills and valleys should be placed in that section. If a Plains section is placed, then the opposite.
5. The terrain is not modifiable in any other way, no mining, building etc.
The main issue I'm having with processing all of this is figuring out how to do a look up of what section of the voronoi map a voxel vector is in when rendering, and how to preform the blend so that when a plain is placed next to a mountain, there is a reasonable blended slope for 1-3 tiles around the perimeter based on what the neighboring biome's topography is like
Any insights or ideas on how to approach this would be super helpful! I attached an image for a visual description.
https://preview.redd.it/hp7ihjetz1ya1.png?width=841&format=png&auto=webp&v=enabled&s=6fe31ae399b72eaa97c5cca9879d8fa0b885decd
https://redd.it/138wpa8
@proceduralgeneration
Using Voronoi polygons for simplified continent generation
Hello, I am currently doing my own work on generating continents and such using procedural methods. Sure, the easiest method would be to use Perlin Noise and such, but they don't really feel like actual continents, do they? The mountain ranges don't actually look like such when zoomed out, and it pales in comparison to actual tectonically-simulated maps.
The tectonics simulations have a different problem: Generation time. It takes forever to generate a decent map with this method, especially on less powerful computers. This may get compounded with more moving parts, as is often needed when one wants to have a good result.
I have decided to take matters into my own ambitious hands and make a solution: Edge-based tectonics abstraction. The principle works as such:
1. The map will be divided into various regions with hard borders. Voronoi Tessellation works well here.
2. Said borders will contain data, at minimum IDs, of the regions that share it.
3. The regions store data, most likely 2d vectors, representing the speed of the plate.
4. In the generation process, each border instance compares the speed vectors of its parents with their relative positions to determine whether it is a Convergent, Divergent, Transform, or None boundary. The magnitude of the differences will determine the 'strength' of said border
5. The areas immediately surrounding these borders will then be generated according to the type of boundary it is, as well as the relative strength of these features, such as island chains, mountain ranges, rift valleys, and potentially even earthquake events in and around the area.
Of course, when I set out to try and build this system to demonstrate it, I ran into some problems. My first problem is that I am an amateur programmer at best, so it would be a challenge to build a voronoi generator by myself, especially if I want the data on the borders. That latter part, from what I have heard, would be easier to get if I used Delaunay Triangulation to generate my Voronoi diagram. Unfortunately, I am big dumb in my brain hole, so I can't wrap my head around that, either.
Fortunately for me, the internet came in clutch with the Oskar Sigvardsson Delaunay Unity Library with the vast majority of the work done for me!
However, it's part of the rest of the work that stumped me, because lucky me, the program that makes the Voronoi diagram with the included edge data only includes the ID for one of the two regions it's shared with. When I dug deeper, it was made readily apparent that the intermediary struct that is used for making the edges loses that specific part of the data.
I can not possibly hope to build the solution into this, so I take to this place to get some help on this. How can I change this to incorporate the data that I want?
https://redd.it/1391ohw
@proceduralgeneration
Hello, I am currently doing my own work on generating continents and such using procedural methods. Sure, the easiest method would be to use Perlin Noise and such, but they don't really feel like actual continents, do they? The mountain ranges don't actually look like such when zoomed out, and it pales in comparison to actual tectonically-simulated maps.
The tectonics simulations have a different problem: Generation time. It takes forever to generate a decent map with this method, especially on less powerful computers. This may get compounded with more moving parts, as is often needed when one wants to have a good result.
I have decided to take matters into my own ambitious hands and make a solution: Edge-based tectonics abstraction. The principle works as such:
1. The map will be divided into various regions with hard borders. Voronoi Tessellation works well here.
2. Said borders will contain data, at minimum IDs, of the regions that share it.
3. The regions store data, most likely 2d vectors, representing the speed of the plate.
4. In the generation process, each border instance compares the speed vectors of its parents with their relative positions to determine whether it is a Convergent, Divergent, Transform, or None boundary. The magnitude of the differences will determine the 'strength' of said border
5. The areas immediately surrounding these borders will then be generated according to the type of boundary it is, as well as the relative strength of these features, such as island chains, mountain ranges, rift valleys, and potentially even earthquake events in and around the area.
Of course, when I set out to try and build this system to demonstrate it, I ran into some problems. My first problem is that I am an amateur programmer at best, so it would be a challenge to build a voronoi generator by myself, especially if I want the data on the borders. That latter part, from what I have heard, would be easier to get if I used Delaunay Triangulation to generate my Voronoi diagram. Unfortunately, I am big dumb in my brain hole, so I can't wrap my head around that, either.
Fortunately for me, the internet came in clutch with the Oskar Sigvardsson Delaunay Unity Library with the vast majority of the work done for me!
However, it's part of the rest of the work that stumped me, because lucky me, the program that makes the Voronoi diagram with the included edge data only includes the ID for one of the two regions it's shared with. When I dug deeper, it was made readily apparent that the intermediary struct that is used for making the edges loses that specific part of the data.
I can not possibly hope to build the solution into this, so I take to this place to get some help on this. How can I change this to incorporate the data that I want?
https://redd.it/1391ohw
@proceduralgeneration
GitHub
GitHub - OskarSigvardsson/unity-delaunay: A Delaunay/Voronoi library for Unity, and a simple destruction effect
A Delaunay/Voronoi library for Unity, and a simple destruction effect - OskarSigvardsson/unity-delaunay
Media is too big
VIEW IN TELEGRAM
After 4 years of developing procedural generators, I've finally released my game Vagabond in Early Access!
https://redd.it/139ik00
@proceduralgeneration
https://redd.it/139ik00
@proceduralgeneration
Springtime inspired me to try a simple approach to procedurally generated flowers.
https://youtube.com/watch?v=DwfMg4ISkvo&feature=share
https://redd.it/139t796
@proceduralgeneration
https://youtube.com/watch?v=DwfMg4ISkvo&feature=share
https://redd.it/139t796
@proceduralgeneration
YouTube
Generating Flowers
This tutorial presents a simple way to generate flowers in Java using processing.
Wave Function Collapse implementation in Java For anyone interested :)
Link to github repository
​
https://i.redd.it/9fc0p1kic9ya1.gif
https://redd.it/139ympz
@proceduralgeneration
Link to github repository
​
https://i.redd.it/9fc0p1kic9ya1.gif
https://redd.it/139ympz
@proceduralgeneration
GitHub
GitHub - heathensoft/WaveFunctionCollapse: Java implementation of the Wave function collapse algorithm.
Java implementation of the Wave function collapse algorithm. - GitHub - heathensoft/WaveFunctionCollapse: Java implementation of the Wave function collapse algorithm.
How to detect and fix isolated terrain (islands or lakes) in a tile-based terrain?
Hey, I'm making a game with procgen for the terrain. It's a boat game, so the player can traverse the water. In my generation, I sometimes get isolated "lakes", which I would like to avoid so that the player can reach all the water on the map. Here are a couple examples, with the lakes I'd like to avoid circled in red: https://imgur.com/a/GgZVsCV
I am using WFC to generate the terrain, with pretty much a copy-paste implementation of the original WFC implemented into Unity.
1. How do I detect these lakes in code?
2. How do I fix them?
3. Should I do this as part of the WFC propagation, or is it better to do it as a post-process step? My worry here is that doing it at WFC propagation might be very expensive and take a lot of time.
I thought of a couple of solutions, both being post-process solutions.
"Paint bucket tool": Essentially just take any random water, and use the same algorithms that paint (or others) use to fill images based on the tile. If there is still water that I didn't "fill", then I have a lake. This is only the detection step, but it seems fairly cheap.
A pathfinding: The unsailable terrain would just have very high costs, meaning it will only go over that terrain if it can't find another path. If unsailable terrain is then on this path, I would just replace it with water to create a pathway. Perhaps this could even be combined with the above, and use the above as a cheaper broadphase and A as the narrowphase (which I would of course need to benchmark to see if I even have to).
Are there any other solutions to this? Maybe something I can do as part of the WFC propagation. I'm not very familiar with the algorithm, so any input is appreciated.
Bonus points if you can also help me make my map non-square, but still have a outer border.
https://redd.it/13al3eg
@proceduralgeneration
Hey, I'm making a game with procgen for the terrain. It's a boat game, so the player can traverse the water. In my generation, I sometimes get isolated "lakes", which I would like to avoid so that the player can reach all the water on the map. Here are a couple examples, with the lakes I'd like to avoid circled in red: https://imgur.com/a/GgZVsCV
I am using WFC to generate the terrain, with pretty much a copy-paste implementation of the original WFC implemented into Unity.
1. How do I detect these lakes in code?
2. How do I fix them?
3. Should I do this as part of the WFC propagation, or is it better to do it as a post-process step? My worry here is that doing it at WFC propagation might be very expensive and take a lot of time.
I thought of a couple of solutions, both being post-process solutions.
"Paint bucket tool": Essentially just take any random water, and use the same algorithms that paint (or others) use to fill images based on the tile. If there is still water that I didn't "fill", then I have a lake. This is only the detection step, but it seems fairly cheap.
A pathfinding: The unsailable terrain would just have very high costs, meaning it will only go over that terrain if it can't find another path. If unsailable terrain is then on this path, I would just replace it with water to create a pathway. Perhaps this could even be combined with the above, and use the above as a cheaper broadphase and A as the narrowphase (which I would of course need to benchmark to see if I even have to).
Are there any other solutions to this? Maybe something I can do as part of the WFC propagation. I'm not very familiar with the algorithm, so any input is appreciated.
Bonus points if you can also help me make my map non-square, but still have a outer border.
https://redd.it/13al3eg
@proceduralgeneration
Imgur
Discover the magic of the internet at Imgur, a community powered entertainment destination. Lift your spirits with funny jokes, trending memes, entertaining gifs, inspiring stories, viral videos, and so much more from users.
Flaming Sword in Houdini 19.5 | Houdini Fire Tutorial | Houdini Tutorial
https://youtu.be/405sFU7kqE4
https://redd.it/13apluy
@proceduralgeneration
https://youtu.be/405sFU7kqE4
https://redd.it/13apluy
@proceduralgeneration
Media is too big
VIEW IN TELEGRAM
Animated Procedural Symmetric Patterns (Source in comments)
https://redd.it/13b2vbg
@proceduralgeneration
https://redd.it/13b2vbg
@proceduralgeneration
hey. i've made a generative universe that runs in your browser. always hit the generate button. every planetary system is retrievable by the seed you see in the input-field. try yourself - there's a lot to discover! https://pocketverse.net
https://youtube.com/watch?v=BAWI0Mgd2_E&feature=share
https://redd.it/13b6adx
@proceduralgeneration
https://youtube.com/watch?v=BAWI0Mgd2_E&feature=share
https://redd.it/13b6adx
@proceduralgeneration
pocketverse.net - the universe in your pocket - Karsten Weil
pocketverse.net | the universe in your pocket
This site is for all the space nerds out there. The whole universe in your pocket. Design, Code and Music by Karsten Weil aka rtz23.
Media is too big
VIEW IN TELEGRAM
Perlin noise + handcrafted rooms for my open-world Forest Fire game
https://redd.it/13bpej1
@proceduralgeneration
https://redd.it/13bpej1
@proceduralgeneration