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
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.
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.
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).
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.
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.
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.
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.