Qual è lo stato dell'arte nella spedizione di grafica di giochi come molti piccoli file BMP? [chiuso]


9

Abbiamo molti piccoli file BMP che penso sarebbero più facili da copiare se li avessimo combinati in un grande TAR / ZIP / qualunque cosa.

Qual è lo stato dell'arte nella spedizione di grafica di gioco?

Stiamo usando C # e siamo a conoscenza di zlib. Basta fare un brainstorming per vedere se ci sono altre soluzioni migliori di zlib.

Risposte:


7

Potresti anche guardare SharpZipLib o DotNetZip - DotNetZip ti dà accesso Streamdirettamente a, il che è utile in quanto la maggior parte delle librerie C # là fuori può caricare da flussi (al contrario di file). Inoltre DotNetZip utilizza Ms-PL (BSD-Like), anziché GPL con un'eccezione giuridicamente discutibile.

Un'altra opzione è quella di usare gli atlanti delle trame , invece di avere molte immagini piccole ne hai alcune grandi. Questi in realtà si caricano leggermente più velocemente e sono leggermente più veloci in fase di esecuzione se diventi intelligente con il modo in cui li disegni.

Infine, è possibile eseguire ciascun tipo di risorsa attraverso il relativo compressore lossless (PNG, FLAC, ecc.) E archiviarli in un file flat (sostanzialmente un file zip con compressione disabilitata). Ricorda di evitare di comprimere i dati compressi, in quanto ciò aumenterà la dimensione nella maggior parte dei casi.

Qualche arte nota:

  • MPQ : probabilmente per quanto riguarda le risorse di gioco, le ricerche sono progettate per essere veloci (tabella di hash basata su disco, ecc.). Ogni tipo di file (supportato) ha un compressore univoco.
  • Quake PAK : questa è fondamentalmente una struttura di file piatta.
  • Doom WAD : in qualche modo specifico per Doom, ma vale la pena esaminarlo.

1

Un'opzione è quella di archiviare le immagini nello stesso formato di compressione utilizzato per creare trame compresse. Ciò ha il vantaggio di non convertire da un formato con perdita a un altro, tuttavia i dati vengono archiviati in un formato con perdita. A seconda delle trame potrebbe esserci ancora qualcosa da guadagnare archiviando tali file in un archivio compresso.

Vedi questa risposta per ulteriori informazioni sulle trame compresse: https://gamedev.stackexchange.com/a/5177/3505


0

ZLIB potrebbe essere una buona risposta, ma se sei a conoscenza di persone che aprono afferrando le tue risorse, potresti anche creare il tuo formato di file per archiviare le tue risorse, ma non è poi così difficile.

Ecco come puoi farcela.

È in C, ma non dovrebbe essere così difficile da imparare, in quanto C # è come C e C ++.

Naturalmente, le persone che hanno ancora una conoscenza più elevata possono catturare le tue risorse, puoi aggiungere poca crittografia se vuoi, non troppo difficile.

Questo può essere molto utile, ma unirà solo i tuoi file. Anche per la compressione, hai due opzioni.

  1. Crea l'intero file di risorse, comprimilo e spediscilo.
    Questo metodo è semplice, ma non molto buono, dovresti decomprimere tutto se vuoi prendere solo una risorsa.

  2. Comprimere ogni risorsa e aggiungerle compresse nel file di risorse.
    Anche questo è abbastanza buono, avrai un leggero aumento delle dimensioni accanto al metodo 1, perché ogni file è compresso separatamente, ma è meglio se vuoi flessibilità.

Ogni metodo ha i suoi svantaggi, dovresti scegliere saggiamente. In generale, se il tuo gioco ha un numero piuttosto basso di risorse, il metodo 1 dovrebbe essere migliore, se hai MOLTO, il metodo 2 dovrebbe adattarti a te, perché la dimensione di tutte le risorse insieme supererà il extra che guadagni.

Per le librerie di compressione, hai:

  • Il mezzo più famoso, Zlib
  • Quello con la decompressione più veloce, LZO
  • L'ottimo rapporto di compressione, 7-Zip

Vorrei andare con LZO se volevo un accesso rapido in gioco, quindi non devi temere di decomprimere in tempo reale, 7-Zip se voglio che i file vengano ridotti MOLTO o Zlib stesso se voglio un rapporto di decompressione e dimensioni bilanciati.
A te la scelta: D

Ah, certo ci sono altri algoritmi per comprimere i dati, e puoi trovarli su Google .

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.