V'è un grande problema che nessuno qui affrontato: l'enorme differenza tra la memorizzazione su disco e l'archiviazione in memoria.
Supponendo che tu stia parlando di un gioco world come hai detto, questo significa che sarà molto grande. Non hai intenzione di memorizzare l'intera cosa in memoria in una volta, ma invece memorizzerai immediatamente le immediate vicinanze e lo aggiornerai man mano che il giocatore va in giro.
Quest'area vicinanze dovrebbe essere il più semplice, facile e veloce accesso possibile. Dovrebbe essere sicuramente un array (o una serie di matrici che vengono scambiate mentre il giocatore si muove). Si farà riferimento spesso e da molti sottosistemi del tuo motore di gioco: la grafica e la fisica gestiranno il caricamento dei modelli, il disegno, il mantenimento del giocatore in cima al terreno, le collisioni, ecc .; il suono dovrà conoscere il tipo di terreno sul quale il giocatore è attualmente in piedi, per riprodurre il suono appropriato del passo; e così via. Anziché trasmettere e duplicare questi dati tra tutti i sottosistemi, se li si mantiene in array globali possono accedervi a proprio piacimento e al 100% di velocità ed efficienza. Questo può davvero semplificare le cose (ma essere consapevoli delle conseguenze delle variabili globali!).
Tuttavia, su disco si vuole sicuramente comprimerlo. Alcune delle risposte fornite forniscono buoni suggerimenti; è possibile serializzare una struttura dati come una tabella hash o un elenco di sole posizioni compilate. Potresti sicuramente anche archiviare un octree. In ogni caso, non si desidera memorizzare posizioni vuote sul disco; secondo la tua statistica, ciò significherebbe che il 66% dello spazio è sprecato. Certo, c'è un tempo per dimenticare l'ottimizzazione e farlo funzionare, ma non si vuole distribuire un file vuoto al 66% agli utenti finali. Inoltre, tieni presente che i dischi non sono macchine ad accesso casuale perfette (ad eccezione delle unità SSD); i dischi rigidi meccanici dovrebbero essere ancora circa altri anni, e funzionano meglio in sequenza. Verifica se è possibile organizzare la struttura dei dati in modo che le operazioni di lettura siano sequenziali, in quanto si esegue lo streaming di più terreno di prossimità mentre il giocatore si muove e probabilmente si troverà una differenza notevole. Non credermi sulla parola, non ho ancora provato questo genere di cose, ha senso, giusto?
Penso che la scelta migliore del metodo per archiviare il mondo dipenda molto dal tipo di operazioni che devi eseguire nel mondo di gioco. –
E cosa faresti per ogni posizione quando li attraversi? Hai bisogno di guardare le celle vicine? –