Come posso identificare le aree caratteristiche in un mondo generato proceduralmente?


26

Sto costruendo un'isola. Uso la classica soluzione della mappa dell'altezza: con la funzione di costruzione di una collina, evitando gli angoli della mappa, faccio altitudine. Quindi, il rumore del perlin mi dà alcune variabili climatiche per gestire i biomi. Ora sto affrontando due sfide che sono, in qualche modo, connesse:

  • In Dwarf Fortress, uno degli aspetti chiari della generazione del mondo è come il gioco sembra "conoscere" le aree e dare loro nomi, anche se non sono forme rettangolari. Vorrei poter "riconoscere" le mie foreste, i miei fiumi, le mie colline ... hai idea di quale tipo di algoritmo potrei usare per scansionare la mia mappa e interpretarne le aree? E come lo memorizzeresti? Sto usando un grafico C ++ di base fatto di un vettore di vettore di "oggetto piastrelle".

  • Quest'isola dovrebbe essere divisa in aree politiche, non solo in regioni puramente naturali. Potrei usare montagne e fiumi per creare "confini naturali", ma la mia mappa generata proceduralmente non garantisce che avrò belle "enclavi" che formerebbero un regno; Mi ritrovo ad avere una gigantesca area politica "a forma di nastro" circondata da micro-regni. Un'altra possibilità sarebbe quella di cercare aree appropriate per una città o un castello. Quindi, "far crescere" un'area politica attorno ad essa. Ma di nuovo, mi piacerebbe avere alcuni algoritmi ben noti prima di provare a inventare i miei.

Questa domanda potrebbe essere interpretata come un po 'troppo vaga, quindi un modo per riformularla sarebbe: come dividere (senza modificare!) Un mondo generato proceduralmente in aree adatte al gameplay? Grazie in anticipo per il vostro aiuto.


Grazie per la correzione e scusate per la cattiva qualità del mio inglese :)
Raveline,

Il tuo inglese è eccezionale, è solo che il "titolo" è preferibilmente espresso come una domanda sui siti StackExchange.
dlras2,

Risposte:


21

Amitp suggerisce di utilizzare spartiacque per definire varie regioni, come spiegato nel suo post sulla generazione di mappe poligonali . I bacini idrografici si vedono meglio generando una mappa usando la sua demo . Il vantaggio di utilizzare i bacini idrografici per aiutare a suddividere i continenti è che fornisce confini perpendicolari al litorale, mentre le montagne di solito forniscono confini paralleli.

Se avessi suddiviso le regioni geografiche, avrei usato una combinazione di montagne, spartiacque e rilevamento dei bordi sui vari biomi sulla mia mappa.

Sottolineerò inoltre che le regioni politiche generalmente si estendono su molte regioni geografiche. Genererei prima le regioni geografiche, quindi assegnerei a ciascuna regione un punteggio di desiderabilità (è una costa? C'è l'oro? Buona terra agricola?) E i costi di viaggio (terreno ripido? Boschi pesanti ?.) Quindi, usando il tuo algoritmo di percorso preferito , genera un mappa termica del viaggio tra regioni desiderabili. Queste finiranno per essere le tue strade e puoi costruire i tuoi confini politici da lì. Questi confini avranno generalmente molte strade al loro interno e meno strade tra di loro.


1
Grazie per l'aiuto. Conoscevo già la soluzione di Amit e, sebbene la trovassi abbastanza elegante, non conosco abbastanza la matematica dietro (dovrei studiarli, che prima o poi farò, ma non ora!). Pensare in termini di spartiacque potrebbe sicuramente aiutarmi e modificare l'algoritmo di generazione del fiume non dovrebbe essere troppo difficile. Adoro la tua soluzione per costruire strade e confini politici, devo considerare come la realizzerò esattamente, ma l'idea è fantastica!
Raveline,

@Raveline - Se usi la generazione dei confini politici, commenta qui e fammi sapere! Mi piacerebbe vedere come risulta.
dlras2,

13

Per aggiungere alla risposta di Dan Rasmussen :

Uno dei motivi principali per cui sono passato da Perlin Noise ( questo progetto ) all'utilizzo di poligoni ( questo progetto ) è che i poligoni forniscono una bella struttura per assegnare aree più grandi (regioni politiche, foreste, deserti, aree nominate, confini, ecc.). Iniziare con la struttura e quindi generare la mappa è simile al rendering poligonale - qualcosa di relativamente semplice. Iniziare con la mappa e quindi inferire la struttura è simile alla visione del computer - qualcosa di relativamente difficile, ma possibile. Voglio sia la struttura che la mappa, quindi ho deciso di intraprendere il percorso relativamente semplice di costruzione di una mappa in cima alla struttura (nodi e bordi).

Anche allora, ho scoperto che volevo strutture più grandi di quelle che avevo generato. I bacini idrografici erano un tentativo di costruire quelle strutture più grandi, ma ho bisogno di provare più approcci per raggruppare i poligoni. Non ho trovato qualcosa di cui sono felice.

Non sono sicuro di come lo faccia la fortezza nana. Dato quanto sono brillanti quei ragazzi, non sarei sorpreso se avessero un sofisticato algoritmo di "visione artificiale".


Capisco il ragionamento, anche se non sono sicuro che il tuo percorso sia così facile ... Dato che il mio progetto è piuttosto umile, proverò a correggere qualcosa di non troppo sofisticato, ma senza poligoni, dal momento che significherebbe studiare molto di più gli algoritmi implicita. (PS: il tuo sito web è una straordinaria fonte di ispirazione e lo adoro!)
Raveline,

3
l'articolo sulla generazione di mappe poligonali è stato superbo.
Raine,

3

Per la tua prima domanda, la mia ipotesi migliore sarebbe quella di utilizzare un algoritmo di rilevamento dei bordi per trovare i limiti delle tue regioni naturali (foreste, colline, ...). Esistono molti algoritmi per questo tipo di problema.

Per la seconda domanda, potresti usare la tua idea per generare un castello (di solito in cima a una collina per una buona difesa e vicino all'acqua dolce), quindi utilizzare un algoritmo voronoi per avere regioni intorno a ciascun castello. Puoi usare il rumore o i limiti dei tuoi biomi per rendere i confini più realistici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.