Come posso generare mappe casuali che somigliano a mappe casuali di Age of Empires II?


18

Mi piace il modo in cui Age of Empires II ha generato mappe casuali (buona varietà, transizioni di biomi decenti, mappe sentite casuali senza sentirsi caotiche), ma sto lottando per replicare lo stile. Ho provato ad usare ad esempio il rumore di Perlin, ma tutto risulta troppo omogeneo o, in caso contrario, il valore di Perlin -> l'euristica del terreno è troppo sensibile e fragile per creare una varietà di tipi di mondo.

Ricordo che il tipo di mappa AoE2 "The Unknown" pubblicizzava "100.000 possibili mappe", suggerendo un uso dei numeri dei semi, ma non sono sicuro di come utilizzare i numeri dei semi per produrre la varietà che ho visto.

Quali algoritmi ed euristica potrei usare per produrre mappe casuali che sembrano mappe casuali AoE2?

Modifica per essere più specifico:

Pensando ulteriormente al mio problema e studiando cosa mi piace del motore di mappe casuali di AoE2, credo che il mio problema più grande sia la gestione della distribuzione di acqua e vita vegetale sulla mappa . Ora vedo di averlo anche legato alla mente con "transizioni di biomi sensate", ma questo è un problema diverso (anche se mi aspetto che il mio uso continuo del rumore di Perlin renderà difficile risolvere).

Ho aggiunto diverse mappe casuali AoE2 che evidenziano ciò che mi piace del loro motore di mappatura, che i miei sforzi non riescono a riprodurre. Tutti gli screenshot sono presi dal tipo di mappa casuale, "Personalizzato" -> "Lo sconosciuto". Non ho dato istruzioni al gioco di utilizzare aree geografiche specifiche come gli arcipelaghi.

Più sotto sono le immagini dal mio motore di mappe. Ogni pixel corrisponde a un riquadro della mappa AoE2.

Una complicazione per il mio progetto è che voglio che le mappe siano molte, molte volte più grandi delle mappe AoE2. Pertanto, qualunque sia il motore che utilizzo deve essere in grado di creare l'intera gamma di biomi in ciascuna mappa e non un insieme ristretto di biomi per mappa, come utilizza AoE2.

Mappe di Age of Empires II

Laghi interni

Ecco un esempio che presenta laghi interni e una sorta di cose fluviali. Mi piace il modo in cui la mappa include una grande quantità di acqua sparpagliata, ma quell'acqua è ancora un po 'concentrata - ci sono ampie strisce di terra che sono disponibili per costruire il tuo impero. Non devi passare l'intero gioco a pianificare la tua città in acqua.

Isole collegate

Ecco un esempio simile in cui il gioco è stato abbastanza intelligente da connettere isole con paludi attraversabili. Non riesco a immaginare come un algoritmo basato sul rumore creerebbe la palude lì, e solo quei luoghi. Inoltre, nota come il gioco ha creato la terra in modo tale che ogni giocatore abbia la propria porzione di terra privata per cominciare. Non ha creato patch casuali di terra, quindi ha una migliore ipotesi su quale sarebbe il meno terribile per ogni giocatore da cui iniziare.

Isole

Mi piace il fatto che questa mappa usi anche pesantemente l'acqua, ma non include molti laghi interni. Contrasta con la prima immagine. Mi piace il modo in cui AoE2 crea aree geografiche completamente diverse utilizzando gli stessi elementi costitutivi. Il mio tentativo di usare il rumore del Perlin qui fallì: o ottengo enormi oceani tentacolari che sminuiscono la massa terrestre o la Terra dei 10.000 laghi. Ho anche trovato difficile ottenere entrambe le isole e i continenti collegati (pensa Nord / Sud America).

Secco, lussureggiante Secco, deserto

Contrasta questa immagine con quella sopra di essa. Mostrano che l'aridità di una mappa non dipende dal livello dell'acqua. La prima immagine presenta una mappa che è quasi priva di acqua, ma contiene foreste ed erba. La seconda immagine ha una moderata quantità di acqua, ma è un deserto. Mi piace che sia possibile (pensa di avere sia il New Mexico o il Sahara e la Costa Rica nel tuo mondo).

Le mie mappe

Ho letto in molti punti che un buon modo per costruire mappe è sovrapporre più livelli di rumore Perlin, ognuno dei quali rappresenta una diversa dimensione dei dati. Seguendo i consigli popolari, sono andato con l'elevazione e l'umidità, selezionando i tipi di terreno dalla tabella Whittaker qui .

Ho preso due mappe perlin, ho quantizzato i valori di ciascuno in interi tramite un semplice if perlin_val < x { i=some_int } else if perlin_val < y..., quindi ho mappato le coppie di interi (elevazione, umidità) su una tabella di tipi di terreno (ad esempio, [1,0] -> deserto tropicale, [1,1 ] -> prati). Gli oceani sono stati inclusi in questo sistema - elevazione = 0 oceano definito.

g1_success

C'è una buona variazione, e per molti versi sembra un mondo reale, ma ci sono alcuni problemi:

  • In primo luogo, non c'è motivo per le profondità oceaniche. Ti aspetteresti acque poco profonde vicino alla riva e acque profonde più lontano, non c'è rima o ragione su dove sia

  • In secondo luogo, tutta l'acqua è concentrata negli oceani; non ci sono laghi o fiumi, perché il rumore di Perlin non scende improvvisamente a un valore inferiore nel mezzo di un continente.

  • Creare un equilibrio tra quantità di ciascun bioma è molto, molto difficile. Attribuisco questo a:

    • Il rumore di Perlin segue una distribuzione normale, quindi è difficile stimare come regolare la probabilità di ciascuna mappatura dimensionale

    • Cercare di bilanciare più dimensioni è difficile - forse ne voglio di più (2,3), quindi ho le probabilità di ottenere (n, 3). Bene, ora ne ho troppi (3,3) e tutto sembra sbagliato.

    • Quando ho ingrandito il rumore abbastanza da avere dati fluidi, non ottenevo un campione molto completo dei valori di Perlin. Quindi ottimizzerei le mie distribuzioni per la mappa di fronte a me, ricaricherei una nuova mappa casuale e otterrei risultati molto diversi.

x-separata-acqua

Ho cercato di risolvere il problema dei fiumi / laghi creando acqua da un terzo insieme di valori di Perlin. Una decisione binaria acqua / terra, quindi applica tutte le cose sopra alla terra. Ciò rende drasticamente più facile controllare la distribuzione dell'acqua (ancora non perfetta, ma migliore), ma introduce il problema che ci sono molte transizioni di biomi che non hanno senso. Ad esempio, chiazze inspiegabili di deserto in mezzo a prati lussureggianti, neve sulla spiaggia, ecc. È anche difficile controllare le proporzioni dei biomi terrestri, per le ragioni sopra menzionate.

Fallimento unidimensionale

Osservando i problemi di cui sopra, ho provato un algoritmo più semplice che ha mappato il rumore di Perlin solo su una dimensione. Ora ho una serie di tipi di terreno che si innalzano da 0 = oceano profondo -> 1 = oceano poco profondo -> 2 = spiaggia ... -> N = neve. Mentre questo produce isole e continenti e rende molto più facile bilanciare la proporzione di ciascun terreno, i tipi di terreno sono troppo raggruppati. Ogni massa terrestre sembra una mappa di elevazione, generalmente senza tipi di terreno sparsi sulla sua superficie. Ogni massa terrestre ha approssimativamente le stesse caratteristiche, sempre nello stesso ordine e sempre nella stessa forma ad anello.


Non sono sicuro che chiunque non faccia parte del team di sviluppo originale possa davvero rispondere alla tua domanda, ma suggerirei che il seme sia molto più basso di quanto ti aspetteresti. Il seme genera quasi sicuramente mappe diverse per tipo di mappa di base e includerle tutte in qualsiasi combinazione è molto probabilmente ciò che gli consente di raggiungere 100.000.
Magus

Questa domanda sembra fuori tema perché richiede dettagli di implementazione su uno specifico gioco già esistente, piuttosto che sulla creazione di un gioco.
Trevor Powell,

@TrevorPowell Dopo aver esaminato le linee guida per le domande sull'argomento per questo sito, ho riformulato la domanda.
spiffytech,

Hai pubblicato quella modifica circa dieci secondi dopo il mio commento. Questo è servizio! ;)
Trevor Powell

1
-1 Penso che sia ancora troppo ampio. Devi essere specifico su ciò che significa "mappe che sembrano". Per rispondere a questa domanda sono necessari esempi specifici di ciò di cui stai parlando. La generazione procedurale è più artistica di quanto la gente pensi spesso. La creazione e la percezione dell'arte è un argomento soggettivo. Scegli una cosa specifica su cui vuoi concentrarti e chiedigli solo. La portata di questa domanda è attualmente molto ampia.
MichaelHouse

Risposte:


9

Dai un'occhiata all'eccellente articolo di Amit Patel che ritengo sia una risorsa per eccellenza per la generazione procedurale del terreno ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

La cosa chiave che fa è usare la struttura del grafico per modellare il suo terreno, non verso l'alto le mappe del rumore (Perlin et al). Non incorporerò le sue illustrazioni, ma leggerò l'articolo e penso che ti sarà utile farti pensare a un approccio diverso.

Se stai realizzando un gioco di tipo CIV / AOE, il posizionamento delle risorse sarà importante. Non è possibile che le risorse chiave siano troppo rare o che quelle di valore elevato siano troppo comuni. Se supponi che ogni poligono sia una zona con una determinata caratteristica (vedi le illustrazioni dell'articolo, avrà più senso), potrei vedere l'assegnazione di risorse a ciascun poligono in base ad un algoritmo di tua scelta. Puoi diventare piuttosto intelligente rendendo le risorse in un poligono polarizzate statisticamente dai vicini in modo che una foresta vicino a un deserto possa essere rara, ma la foresta vicino alla prateria, ad esempio, è più comune.


2
La guida di Amit produce terreni troppo realistici per Age of Empires. :)
Seth Battin,

Hehe sì, vero. Ma il concetto di base dell'utilizzo di celle di varie dimensioni (dove ciascuna è un tipo di terreno specifico) funzionerebbe bene come un approccio penso. Rimuovi l'idea dell'altezza del terreno dall'equazione.
Tim Holt,

Ho recensito l'articolo di Amit, ma è ottimizzato troppo strettamente per avere un'unica isola. Rendere l'elevazione una semplice funzione della distanza dalla costa produrrebbe risultati imbarazzanti con più isole o continenti più grandi, e il suo metodo di distribuzione dell'acqua assume un picco prominente nel paesaggio che alla fine scorre verso l'oceano. Se dovessi rimuovere l'altezza del terreno dallo schema di Amit, non sarei sicuro di come adattare la sua idea di distribuzione del bioma al mio progetto.
spiffytech,

5

Creo script di mappe casuali per Age of Empires 2 . Il mio più recente è per la versione HD.

Se stai cercando di capire come creare mappe per Age of Empires 2, c'è questa eccellente guida a RMS (Random Map Scripting) .

Age of Empires utilizza un sistema esperto, che consente agli script di scrivere routine per le regole di generazione, dalle quali puoi imparare molto. Per quanto riguarda le regioni, immagino che sarebbe semplicemente un caso di mascherare le aree e applicare di conseguenza diversi script / routine alle aree mascherate. Puoi facilmente vedere le regole di generazione degli script delle mappe esistenti aprendoli in un editor di testo. Scrivo il mio nel Blocco note

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.