compressione può avvenire in molti modi su molti livelli diversi, e quando, dove e come la sua utilizzati sono totalmente dipendenti quali sono i suoi obiettivi & obiettivi sono (compressione non è sempre di risparmiare spazio su disco).
In pratica, su un livello superiore, tutte le risorse potrebbero/potrebbero essere compresse in un archivio di massa (questo accelera le letture, poiché c'è meno da leggere dall'HDD, ma si sta sacrificando la potenza di elaborazione per questo, come indicato per usare DMA per leggere i file non compressi, che non usano affatto la CPU), la lettura indietro viene quasi sempre fatta memoria per la memoria, la lettura dell'HDD distruggerebbe le prestazioni e causerebbe una serie di problemi (e in alcuni casi sarebbe impossibile, come nelle console di vecchia generazione).
Un secondo livello può/può essere eseguito sulla risorsa stessa, ad esempio, le trame possono essere compresse in MOLTI modi diversi, ma principalmente la compressione a blocchi (S3TC/DXTn, BCn) viene utilizzata in questi giorni in quanto la sua decompressione è supportata in hardware (o emulato dal driver), quindi quando viene letto per l'archivio/disco, non è necessario eseguire ulteriori decompressioni.
Le strategie di compressione variano anche per piattaforma, soprattutto su console, che sono molto sensibili al layout della memoria, hanno risorse limitate e hanno piccole cache ecc
utilizzando una libreria come zlib (o qualsiasi altro) con C++ , come viene eseguita questa decompressione runtime?
in genere si desidera utilizzare i file mappati memoria dell'archivio e decomprimere direttamente sulla RAM, un buon esempio di un sistema di archiviazione AAA che è ben documentato che fa questo è il MPQ format (usato da Blizzard Entertainment, maggiori dettagli here), utilizza una varietà di algos di compressione, come deflate per Diablo I, zlib per Warcraft III, bzip2 in World of Warcraft e recentemente hanno aggiunto LZ e compressione sparsa per i loro nuovi giochi come SCII.
La tesi di Jan Wassenberg (Optimizing File Accesses via Ordering and Caching
) presenta una buona interruzione della gestione dei file, che potrebbe anche essere di interesse.
non so cosa 'asset' significa qui in particolare, ma se hai molti file compressi separati, potresti provare a decomprimere su richiesta + un po 'di cache. Quindi un file viene decompresso in memoria solo quando è necessario, quindi viene memorizzato nella cache e, se non è necessario per un certo tempo, viene scartato dalla cache quando altri file devono essere decompressi, per evitare che la cache diventi troppo grande. – sashoalm
per asset intendo i file necessari per il gioco, cose come immagini, mesh, materiali, shader quel genere di cose – Constan7ine
In "Game Coding Complete" c'era praticamente il metodo descritto da satuon. – risingDarkness