Qual è la logica dietro le scene di "caricamento" nei giochi?


8

Sto realizzando il mio primo gioco, è un tipo di gioco di difesa della torre, usando il motore di gioco Unity e prendendo Fieldrunners come riferimento. Vorrei sapere di più sulla funzionalità dietro le scene "Caricamento" nei giochi.

Fino ad ora sto istanziando / creando oggetti in fase di esecuzione e non sto affrontando alcun ritardo o problemi simili nel farlo. A cosa servono le scene di "caricamento" in altri giochi? C'è qualche funzionalità o istanziazione di oggetti specifici per il prossimo round o fase? Se sì, perché ne ho bisogno se non ricevo ritardi?


6
Le risorse richieste da altri giochi potrebbero essere molto più elevate delle esigenze del tuo. Pertanto, il caricamento delle scene è necessario per mascherare il periodo in cui queste risorse vengono caricate (forse da un HDD lento).
rallentato fino al

2
A quale "tutti i giochi" ti riferisci? Esistono molti giochi senza schermate di caricamento.
Nicol Bolas,

Risposte:


10

Fondamentalmente, direi che durante il processo di "Caricamento" il gioco tenta di caricare e precompilare tutte le operazioni che non possono essere eseguite in fase di esecuzione. Ad esempio, il recupero di immagini (da utilizzare come texture) per il disco rigido è in genere un processo lento. Nel passaggio "Caricamento" queste immagini possono essere copiate nella memoria RAM, che è molto più veloce nella memoria di accesso, consentendo l'accesso in tempo reale alle immagini in fase di esecuzione.


1

Una schermata di caricamento può anche essere utilizzata come "scena tagliata" (http://en.wikipedia.org/wiki/Cutscene) per dare all'utente la possibilità di riprendere fiato, per saperne di più sulla storia e le caratteristiche del tuo gioco, oppure per provare a vendergli una versione a pagamento / un acquisto in-app


1

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:

  1. Carica le proprietà di base del mondo di gioco. Script globali.

  2. Carica la posizione del giocatore.

  3. Carica il nodo gridcell / BSP di quella posizione.

  4. Carica solo le caselle di delimitazione degli oggetti in quella cella.

  5. Elaborare ciò che verrebbe effettivamente visualizzato (test sui box di delimitazione, forse test di rendering dell'occlusione)

  6. Carica le maglie delle cose che sono rese.

  7. Carica i materiali le trame delle maglie.

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

  9. Una volta caricato tutto ciò che è visibile, avvia il rendering.

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


2
Purtroppo non è possibile per molti giochi. Una singola area può avere abbastanza trame per adattarsi a malapena alla memoria video di una GPU di fascia media, quindi non è possibile precaricare sia l'area di inizio che l'ultima area di salvataggio (e che dire di qualsiasi altro salvataggio che l'utente potrebbe selezionare?). Anche con streaming di mondi continui come in Skyrim, cosa succede con portali o script che teletrasportano il lettore in un'altra area? Con 8 GB di dati compressi - molti dei quali sono dati di trama - anche i moderni PC di gioco di fascia alta non possono precaricare tutto.
Sean Middleditch,

1
Inoltre, direi che i giochi hanno un interesse acquisito a non poter caricare più aree in memoria; impedisce loro di mettere quanto più contenuto possibile in ciascuna area. Per molti giochi questo non è un problema, ma per i titoli open world che vogliono offrire un'esperienza tanto ricca quanto fattibile, qualsiasi circostanza in cui non ci si imbatte nelle proprie limitazioni è quella in cui non si sta offrendo tanto il giocatore come potresti essere.
Steven Stadnicki,

0

In Unity, le scene sono una combinazione di più oggetti di gioco. Quindi, se non vuoi specificare tutti i tuoi oggetti di gioco separatamente e caricarli uno per uno, puoi semplicemente caricare una scena completa .

Quando si carica una scena in Unity, gli oggetti già esistenti vengono eliminati e quindi viene caricato un livello completamente nuovo. Puoi indicare quali oggetti vuoi conservare con il metodo DontDestroyOnLoad .

Nelle impostazioni di compilazione durante la pubblicazione di un gioco, puoi anche indicare quali scene vengono utilizzate nel tuo gioco e includerle nella build corrente . Ciò consente di distinguere tra più piattaforme che contengono livelli diversi, ma la stessa logica di codice.

Domande specifiche sull'unità possono essere poste anche sul forum di risposta di unità . Questi utenti sono più specificati su Unity, anziché su domande generali sui motori di gioco.


Questa risposta non sembra rispondere alla domanda: non "come carico i livelli?", Ma "perché il giocatore vede" Caricamento in corso ... "?"
Kevin Reid,

@KevinReid Ah sì, probabilmente hai ragione. Probabilmente non ho colto bene i punti interrogativi.
Marnix,

0

Una scena grafica 3D richiede tempo per essere configurata e la sua manutenzione può spingere un computer oltre i suoi limiti. I contenuti richiedono memoria estesa. I contenuti visibili richiedono molto tempo. E mentre l'osservatore si ingrandisce e guarda l'orizzonte, una parte terribile del contenuto totale può diventare visibile. (Hai mai notato come alcuni giochi funzionano meglio se non esegui lo zoom indietro troppo lontano? Hai mai notato come alcuni giochi non ti consentono di eseguire lo zoom troppo lontano o di guardare l'orizzonte?)

La soluzione è impostare scene individuali con contenuti limitati. Ora il gioco funziona bene fino a quando l'osservatore lascia una scena per un'altra. A quel punto, la vecchia scena viene scartata e viene creata una nuova scena, che richiede tempo (e una schermata di caricamento per cercare di evitare che l'utente si annoi). I motori 3D di solito cercano di fare il maggior lavoro possibile durante l'installazione per rendere la grafica il più fluida possibile in seguito.

Ho visto giochi che sembrano consentire una rapida, libera circolazione e zoom su un intero mondo. C'è probabilmente molto genio e molta programmazione laboriosa e abilità artistica lì; non hanno semplicemente scaricato alcuni software di grafica gratuiti.

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.