fireside at November 25th, 2012 13:22 — #1
Kind of an interesting article about Malevolence, an indie game that claims to be infinite and persistent through procedural generation of basically everything in the game.
There's a game video here:
The story almost sounds procedurally generated also, but oh well.
Yes, I saw it on Slashdot.
thenut at November 25th, 2012 15:21 — #2
That game sort of looks like "Eye of the Beholder" meets "Betrayal at Krondor" in 3D. It definitely has that classic dungeon crawler to it.
It's commendable that more developers are adopting procedural content, but they have a long road ahead. Part of the problem with procedural content is that generating the base data is not hard, it's converting that into something usable. Take for instance terrain. Perlin noise is basic and lacks a lot of definition.
You need to spend a lot of time researching erosion algorithms and procedural texture generation (by far the hardest topic IMO). Even Terragen, a software dedicated to rendering realistic terrain, relies on the author to guide the engine to produce something realistic. I think procedural content is better suited for generating specific content on the fly to ease the burden on artists. Diablo's random dungeon is a good example of usable procedural content, as well as Terraria's earth. Borderland's lewt system is another example. Simple problems that can be solved with known algorithms. Terrain can be done too, but it's ambitious. Better to procedurally generate the initial terrain and have artists tweak it as needed. Procedural quests are currently poorly implemented in today's games as well, but it could be done with a well designed framework. However, this of course requires time and effort which could be allocated to just making a better linear game. Short term trade-off for long term investment, but you got to keep the funds coming in to improve on your procedural algorithms. A risky venture.
v71 at November 25th, 2012 16:39 — #3
Two months ago i was contacted by a guy who had a project going on kickstarter, a game set in a city, where you had to fight a kind of blob eating everything on his way, the guy wanted me to write the code, but after winning the kickstarter pledge , he disappeared from the known world. I thought that a game set in a city would have been cool, so i started to code a procedural city generator and this is what i have done so far
the program is composed of many step, and is intensive at 2d geometry, first step is procedural generation of terrain, filtered with a band pass filter to identify water, beach, terrain and rocks, then i triangulate all the points and i create a voronoi map , each cell is then assigned to a unique identifier so i have cells for water, terrain, beach, and rocks. After that i find the disconnected components or islands.
Each islands has a center from where the buildings are radially created using a polygon precomputed mesh, the mesh is oriented scaled and clipped accordingly to the distance and angle respect the center.
After that i trace bridges to connect each islands ( this is a still work in progress ) .
Strangely the hardest part is creating choerent bridges....
After that i will triangulate the map, will clean the map itself from all duplicated vertices , find connected 'streets' and then create a huge level , i am thinking about populating it with people , cars and a choerent traffic light system.
There are a couple of ideas for games, where the setting is a huge city.
Will keep you updated.
fireside at November 25th, 2012 21:04 — #4
That game sort of looks like "Eye of the Beholder" meets "Betrayal at Krondor" in 3D.
The difference with Betrayal of Krondor was that it was written by a professional writer. I can't imagine procedural quests will turn out very well. I think the quests individually might be all right, but the overall story will be pretty basic. The part that interested me personally was that it would have turn based, grid based fights. The graphics look dated, but I think acceptable from the screen shots, etc. I wouldn't have any problem with the game on that end. I agree, though, the optimum is a balance between procedural and human design. The idea of it being infinite, in my mind, is having no long term conflict resolution. We already have a million games that no one finishes, and they aren't even very big. I would like to look at it, and I think I would enjoy it for a number of hours if the fights are anything like Betrayal of Krondor.
v71, interesting project. I know, personally, I hate modeling buildings but do it because it's a necessity. It would be nice to choose a time period, size, and type, and have it all generated. I've seen a few things like that, but very basic and not detailed enough. I think Houdini is doing something close to it. Out of my price range, though, which is pretty much free.
v71 at November 26th, 2012 05:02 — #5
Yep that was something i was thinking too and i wouldn't be very difficult , once the buildable zone are choosen you can put whatever kind of building you want, its a matter of choosing the correct mesh, medieval, greek , western, sci-fi , you name it
stainless at November 26th, 2012 05:03 — #6
I do a lot of procedural generation, and you can do some things really well.
You can generate whole planets worth of terrain that looks lovely, you can generate plants, characters, weapons, almost everything.
You can't procedurally generate game play.
It's an area I am actively working on, but so far it's a real issue. I have written some very scary genetic code to experiment with.
The other thing that is a real problem is very clearly shown in Borderlands 2. They make a big thing of the weapon system, what do they advertise, 4 billion weapons?
What they have created is a system that makes opening a treasure chest boring. "Oh look I have found ANOTHER rifle, this one reloads 0.02 seconds faster than mine but does 1.03 points less damage." (please read that bit as if you are a health and safety officer lecturing about the dangers of pencils)
At the moment you need a human to decide when procedural generation is a good thing and when we need a human.
stainless at November 26th, 2012 05:09 — #7
Procedural city generation is a fairly simple problem.
It depends on how much detail you want to go into, but the basic system is well known.
I prefer the more intensive technique.
1) generate terrain
2) generate water
3) define usage zones (high end accomodation, to industrial)
4) generate roads
5) generate buildings
Buildings are generated by using style sheets so you can have anything you want
thenut at November 26th, 2012 07:57 — #8
V71, that's interesting. At about the same time, I too got involved with procedural cities.
I was looking to extend my SkyGen tool to procedurally create cities that you can export and then import into your fav modelling tool in order to brush up. I wasn't looking to go to far with this, just enough to create a semi-realistic city that I can use as backdrop for certain projects. I originally made the mistake of working bottom-up. Meaning I started first with the buildings, then city blocks, and then arranging the blocks to form a road network. I realize now it's much better to work top-bottom, or start with the road network first then put the buildings in. All those years playing Sim City wasted
It's interesting in your solution you built a topographical map first, but I didn't get to the point where I'm mixing both cities and terrain. The only concern I would have with your solution is that you're using voronoi to create development zones. While some cities do have a paculiar grid structure that would fit that (Paris comes to mind), won't you have a harder time producing long avenues? Highway structures? This is why I feel developing the road network first would be best and then cater the city to that.
stainless at November 26th, 2012 08:46 — #9
I found that doing the roads first created problems.
My target was futuristic cities, so they had to work. Industry had to have access to major transport hubs, so I often found that I needed a large open area near the road network, and didn't have one available. So I added a bit of recursion, and it stack overflowed. Never found out why.
So I swapped the order and it seemed to work better.
I think the ideal solution would require several iterations. After all most of our major cities have existed for a long time and gone through lot's of re-modelling.
Look at London and Berlin. Vast areas bombed out of existence.
Maybe the best solution would be to start with a medieval city plan, then have several iterations of demolition and rebuilding stopping at the desired time period.
v71 at November 26th, 2012 10:40 — #10
@TheNut , yes you are right, i first convert a texture into a voronoi polygonal map ,after using a band pass filtered preprocess, each cell is statistically assigned to a type , water, terrain, rocks, and beach, based on how many pixels of each different types the cell delimits.
The cell is now a polygon perimeter, in this perimeter i put a scaled, rotated and clipped 2d mesh , the rotation is based on the position of a randmly selected centre for each islands.
The process isn't so straightforward as it may seem, i discarded a lot of code before reaching to this solutions.
The roads comes naturally out of the same city layout, once you put all the cells into a big buffer and compute the nodes connections.
Incidentally, i don't take account of long roads, a possible solution would be select randomly 2 cells, connecting them with a long road and clip all cells encountered in the path.
Maybe this is somethign i will take care lately, currently highways only connect islands between them
alphadog at November 26th, 2012 14:10 — #11
I still think that most games are best when driven by an overall story arc, otherwise it's like the proverbial 10,000 monkeys on keyboards were not trying to recreate Hamlet, but rather ended up putting together the specs for your game.
rouncer at November 28th, 2012 05:55 — #12
whatever you can procedurally generate, you dont have to hand make, thats the other good thing here, even if you export to triangles its still useful even though you dont get the infinicy of it.