[HN Gopher] Procedural Worlds from Simple Tiles
       ___________________________________________________________________
        
       Procedural Worlds from Simple Tiles
        
       Author : airstrike
       Score  : 115 points
       Date   : 2022-01-09 18:39 UTC (4 hours ago)
        
 (HTM) web link (ijdykeman.github.io)
 (TXT) w3m dump (ijdykeman.github.io)
        
       | ijdykeman wrote:
       | Author here. It's awesome to see my post on hn! Happy to answer
       | questions.
        
         | movedx wrote:
         | Amazing work.
         | 
         | I'm not a very visually creative person. I want to be able to
         | make virtual worlds but the assets are the problem for me. I
         | think this will help alleviate that issue so thank you. Bought
         | a copy.
         | 
         | (I really want a little RPG about exploring.)
        
           | programd wrote:
           | Don' let that stop you! There are a ton of free assets both
           | for Unity and Unreal. Check out e.g. the free category in the
           | Unreal marketplace.
           | 
           | https://www.unrealengine.com/marketplace/
           | 
           | Search for the RPG category. There are whole RPG systems you
           | can plug into Unreal which you can buy for laughably little
           | money. (No affiliation, I just like what Epic is doing with
           | the engine)
        
         | movedx wrote:
         | On another note https://generateworlds.com/ doesn't support
         | HTTPS. If you need help getting a TLS certificate in place I'd
         | be happy to help.
        
           | ijdykeman wrote:
           | Thanks! I _think_ I fixed it. Waiting on DNS.
        
         | gaogao wrote:
         | Did you use an constraint solver library like Z3 under the hood
         | or roll your own?
        
         | airstrike wrote:
         | Came across the post on Google when searching (out of sheer
         | curiosity) for algorithms for generating tiled wallpaper-like
         | patterns (as in real world wallpapers and upholstery).
         | 
         | This was a truly enjoyable read and such a well written article
         | that I immediately thought others here would appreciate it, so
         | thanks for writing it!
        
         | zubspace wrote:
         | This is really cool! Thanks for the article
         | 
         | 1) Is it possible that the algorithm will fail to find a
         | suitable tile and needs to restart?
         | 
         | 2) I don't understand, why or how you get those rectangular
         | ponds and lava areas in the first youtube video. I expected
         | them to be far more organic or am I missing something?
         | 
         | 3) How would do you ensure connectivity of areas or points of
         | interest? Any ideas? Would you path a way before or after
         | running the algorithm?
        
       | lostdog wrote:
       | Very cool idea, and the results look great.
       | 
       | If I were using this practically, I would add a "fuzzer" to find
       | intractable situations and add new tiles to fit them. You could
       | even add a high cost to make certain tiles undesirable, so that
       | the generator tries not to place them but can still use them to
       | get unstuck.
        
       | isoprophlex wrote:
       | Very nice writeup, i find it always a pleasure to read stories
       | from people explaining their journey towards designing an algo.
       | 
       | TLDR: This is basically "wave function collapse" that was posted
       | here as well some days ago, only it does local probability
       | updates instead of global during tile resolving steps. This makes
       | it run faster without sacrificing ability to halt, apparently.
       | Very nice.
        
       | mysterydip wrote:
       | They look complex, but are they interesting? That seems to be the
       | more difficult trick for any procedural algorithm I've seen to
       | pull off. Although inherently subjective, anything that repeats
       | too similarly too often, or doesn't logically make sense or have
       | smooth transitions feels computer generated. The best procedural
       | creation should feel hand-made IMHO.
        
         | pfortuny wrote:
         | Yes.
         | 
         | They have no global design, so in essence they are meaningless
         | because the only function of each tile is "to fill space",
         | albeit in a "coherent" way.
        
       | etherealmachine wrote:
       | This is a great write up of the problem space. I've also tried an
       | approach here that converted the tile dependencies into a Boolean
       | constraint satisfaction problem and then used the Open Source
       | clasp (https://potassco.org/clasp/) answer set solver to return
       | valid tilings. The inspiration was from the paper "Answer Set
       | Programming for Procedural Content Generation: A Design Space
       | Approach" (https://adamsmith.as/papers/tciaig-asp4pcg.pdf) which
       | is also a good read.
       | 
       | Using an answer set solver was nice because it was so easy, I
       | just had to encode the tile constraints and then the solver did
       | all the work, backtracking, etc, but it could be slow, and it
       | could also fail to return (infinite loop). I gave up because it
       | seemed like WFC and similar could return results fast enough for
       | "online" generation, like generating chunks in Minecraft and also
       | because it seemed hard to encode tile probabilities (from some
       | initial example map) like WFC does.
        
       | hypertele-Xii wrote:
       | The problem with this kind of algorithm is that it doesn't
       | generate _worlds;_ It generates infinitely tiling neighborhoods
       | of the smallest unit of space. It 's principally impossible to
       | make a locally-infinite world _globally interesting._ There is no
       | structure. It 's just _structured noise._ Fine for a bit of
       | generative art, not so much for interactive game worlds.
        
         | asiachick wrote:
         | I agree with this so much. You're not likely going to get a God
         | of War, Zelda, Uncharted, Last of US, or even GTA, Red Dead
         | Redemption experience with a randomly generated world.
         | 
         | On the other hand some games the game play itself is enough
         | that randomly generated worlds are good enough? Rogue,
         | Minecraft, Valheim, are a few that I've played.
        
           | bhaak wrote:
           | Why not both?
           | 
           | Use a procedurally generated map as a template and enhance it
           | with manually designed parts.
           | 
           | Or mix and match manually designed tiles with procgen stuff.
           | This is similar to to what OP's newer link describes.
           | 
           | Another option is to develop a DSL that let's you describe
           | the map in various degrees. "Put a random city there" vs "Put
           | a city with these types of buildings there" vs "Put a city
           | with a pawn shop at the northeast corner, an armor shop
           | somewhere south, [...]".
           | 
           | AAA games often use parts of this. For example for plants,
           | many aren't put there manually by the designer but by
           | randomized code and the designer just selects the area in
           | which they should grow.
        
             | programd wrote:
             | Indeed. Check out the stellar work Joe Garth is doing with
             | Brushify.io [1] for the Unreal engine. His procedural
             | landscape placement tools let you create beautiful game
             | terrains very quickly. Watch the videos on the site for
             | what you can do - triple AAA visuals for very little
             | effort.
             | 
             | [1] https://www.brushify.io/
        
             | k__ wrote:
             | The Diablo series follows a hybrid approach.
        
       | rendall wrote:
       | Interesting. His follow up blog post _The Constrained Tile
       | Placement Algorithm behind Generate Worlds_ (2019) seems like a
       | refinement of the idea, and I found its explanation to be clearer
       | https://ijdykeman.github.io/procedural_generation/2019/11/08...
        
       ___________________________________________________________________
       (page generated 2022-01-09 23:00 UTC)