Come si salva un mondo procedurale?


17

Di recente ho letto su come creare mondi procedurali ... ma come posso salvarne uno?

In giochi come Terraria o Minecraft gli utenti possono modificare liberamente il paesaggio, ma quel mondo non può essere ricreato dal seme iniziale. Quali tecniche vengono utilizzate per salvare mondi procedurali ma modificabili?

Risposte:


21

Salva il seme che hai usato per generare il mondo e le modifiche o come "comandi" atomici o i risultati di quelli.

Quindi, quando carichi il gioco salvato, esegui le seguenti operazioni:

  1. Generare proceduralmente la parte del mondo che stai visitando.
  2. Applicare i comandi salvati o sovrascrivere gli elementi generati con quelli salvati.

Aggiornamento: E, naturalmente, c'è la possibilità di salvare il tuo mondo generato proprio come un mondo normale, se le risorse sono disponibili (come visto in Minecraft). In questo caso, dovresti salvare solo le parti del mondo che sono già state visitate (altrimenti la generazione procedurale sarebbe praticamente inutile), tessera per tessera. Ciò consuma più risorse HDD e / o database, ma richiede meno potenza della CPU durante il caricamento di un gioco.


2
Oltre alle modifiche, probabilmente ha anche bisogno di salvare il seme utilizzato per costruire il mondo procedurale ;-)
bummzack,

@bummzack Sì, certo, ho dimenticato di menzionarlo, perché è ovvio :-) Modificherò la mia risposta.
Marton,

10
Non sono del tutto sicuro che rigenerare il mondo dal seme sia la migliore idea. Generazione mondiale di solito comporta algoritmi complessi e quindi richiede tempo: generiamo mondi casuali non per risparmiare spazio in generale ma per beneficiare della casualità. Considererei quindi che salvare il mondo intero in un formato binario sarebbe più efficiente.
Jonathan Connell,

2
Quindi stai dicendo di salvare un mondo generato proceduralmente, lo generi, quindi lo salvi? Questa non è una risposta molto completa.
MichaelHouse

2
@ Random832 Minecraft fa salvare il mondo in un formato binario, piuttosto che rigenera dal seme e riprodurre le modifiche. Per aggirare il problema di salvare il mondo intero, Minecraft salva solo i pezzi che sono stati generati finora. Mentre esplori ulteriormente il mondo, il tuo gioco di salvataggio diventa più grande.
Joseph Mansfield,

8

Salvare un mondo generato proceduralmente equivale a salvare qualsiasi dato della mappa delle tessere.

Probabilmente vorrai salvare il mondo in formato binario, supponendo che il mondo sia costruito con diversi tipi di tessere, dovrai:

  1. Decidi il numero totale di diversi tipi di tessere (a seconda di ciò avrai bisogno di più o meno bit per rappresentare ogni tessera)
  2. Definisci la larghezza e l'altezza del mondo visitato (modificato).
  3. Rappresenta la tessera mondo per tessera dalla tessera più in alto a sinistra (incluso il cielo) riga per riga alla tessera in basso a destra.
  4. Se desideri risparmiare spazio, usa DEFLATE o un algoritmo simile per comprimere questo 2d-array (rappresentato come 1-d) http://it.wikipedia.org/wiki/DEFLATE
  5. Utilizzare l'I / O di file appropriato per l'API per archiviare i dati su disco.

Puoi usare lo stesso metodo anche per salvare una mappa basata su voxel.

La memorizzazione di un modello di mappa basato sui vertici è più complessa.

Vorresti che approfondissi quell'argomento?


Se lo desideri, potresti essere in grado di salvarlo in un file png codificando i colori per ogni riquadro. Ciò ti consentirà di visualizzare rapidamente il risultato senza utilizzare un visualizzatore specializzato.
Wolfdawn,


3

Qualunque struttura di dati stai utilizzando per archiviare il mondo in memoria, può essere utilizzata come modello per la scrittura e la lettura dal disco. La parte procedurale del gioco riempirà queste strutture di dati la prima volta, se non sono disponibili dati dal disco. Quindi, quando sei pronto a scaricare un'area dalla memoria, scrivila sul disco come è stata generata o modificata.

Ogni volta che sei pronto per caricare una nuova area in memoria, controlla prima se è stata generata prima e salvata su disco. In tal caso, caricalo dal disco anziché dagli algoritmi di generazione procedurale.

In genere ciò si farebbe con pezzi di terreno. Puoi salvare ogni blocco nel suo file o creare una struttura del disco più complessa che contenga dati in un singolo file con una tabella di ricerca. Esistono altre domande su come utilizzare correttamente i dati su disco.

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.