Penso che i giochi moderni avrebbero dovuto essere in grado di abbandonare le schermate di caricamento.
Immagino che il vero motivo per cui abbiamo ancora schermate di caricamento è che la maggior parte dei giochi sono progettati per funzionare su hardware Xbox 360. In quanto tali, saranno limitati nella quantità di ram in cui possono caricare roba e nella quantità di thread che possono fare. Se non si dispone di RAM sufficiente, sarà necessario eliminare molta memoria dalla memoria e ricaricarla dal disco. Inoltre è più semplice caricare tutto in una volta.
Ci sono anche momenti in cui cose come l'hard disk potrebbero bloccarsi. Cosa succede se l'utente esegue l'antivirus in background. Se non stai precaricando roba, potresti dover mettere in pausa il gioco mentre attende che la mesh si carichi o che le cose appaiano spontaneamente.
Giochi come Skyrim possono offrirti un mondo spalancato che puoi attraversare quanto vuoi, ma non appena apri una porta per caricare un dungeon relativamente piccolo rimani bloccato con una schermata di caricamento.
L'unico motivo per cui ho potuto vedere che è necessaria la schermata di caricamento del dungeon è se usano un'illuminazione pre-forno extra pesante usata per scene indoor che se abbastanza grande da caricare (fatta da 1 mesh gigante o ha mappe luminose dettagliate) o ha bisogno di alcuni calcoli da fare in fase di esecuzione. Credo che i sotterranei di Skyrim siano costruiti solo da mesh modulari piuttosto che da una mesh gigante (almeno penso che Oblivion sia dove).
Non c'è alcun motivo reale per caricare più cose che puoi effettivamente vedere quando entri nel livello. Allo stesso modo in cui i giochi non visualizzano le cose che puoi vedere, puoi eliminare immediatamente ciò che ti serve per essere caricato. Puoi anche attaccare molti oggetti segnaposto fittizi. Quindi puoi usare il threading per caricare in modo asincrono oggetti nelle aree circostanti, le loro mesh, le trame e così via mentre il giocatore si muove nell'ambiente.
Il modo in cui vorrei abbandonare le schermate di caricamento è il seguente:
Carica le proprietà di base del mondo di gioco. Script globali.
Carica la posizione del giocatore.
Carica il nodo gridcell / BSP di quella posizione.
Carica solo le caselle di delimitazione degli oggetti in quella cella.
Elaborare ciò che verrebbe effettivamente visualizzato (test sui box di delimitazione, forse test di rendering dell'occlusione)
Carica le maglie delle cose che sono rese.
Carica i materiali le trame delle maglie.
Preforma più test per vedere se più aree sono visibili e devono essere caricate (ad esempio, esegui il rendering di un'intera cella della griglia come cubo gigante).
Una volta caricato tutto ciò che è visibile, avvia il rendering.
Carica il resto delle cose nelle celle e carica altre cose come richiesto. Carica le regioni vicine e fai alcune previsioni di base sui movimenti dei giocatori per scegliere quali regioni devono essere caricate per prime. Continua finché la memoria non si riempie.
Ci sono alcune altre cose che devono essere prese in considerazione. Ad esempio alcune cose devono essere caricate anche se non sono visibili. Ad esempio, un nemico che si trova dietro il giocatore fuori dalla regione dovrebbe essere attivo in modo da poter correre verso il giocatore e attaccarlo. Probabilmente il test di occlusione non è essenziale poiché vorrai immediatamente caricare qualcosa vicino in modo che sia lì quando il giocatore si muove e diventa visibile ma potrebbe radersi un secondo per arrivare direttamente al rendering (ma se il tempo è così vicino, allora sei rischia di avere problemi con le cose che appaiono).
Se possibile, tali passaggi dovrebbero essere avviati prima che siano necessari, interrotti in background. Ad esempio, se ti trovi nel menu principale del gioco, allora dovrebbe iniziare a precaricare l'area di partenza i carichi dopo aver scelto "Nuova partita" (o non appena appare il menu) e l'ultimo salvataggio per continuare. Altri salvataggi possono precaricare quando si sposta il mouse su di essi. Quando ti avvicini a una porta del dungeon, dovrebbe iniziare a caricare il livello successivo (anche se se riesci a farlo, non hai bisogno di una porta del dungeon speciale poiché in realtà sono solo per attivare una schermata di caricamento). Carica in background mentre il video viene riprodotto. In questo modo non avresti nemmeno bisogno di una breve schermata di caricamento iniziale.
Puoi saltare molto di questo se non ti dispiace che le cose "saltino fuori" nell'esistenza. Qualcosa come Second Life ti lascia solo apparire, dal momento che viene recuperato da Internet non c'è molto che puoi fare al riguardo. Assassin's creed ha quell'effetto in cui le cose si insinuano nella scena, quindi potresti essere in grado di cavartela per motivi artistici.