2011-09-07 8 views
6

Sono in procinto di scrivere un motore 2D full HD capace per una compagnia di artisti che speriamo possano essere multipiattaforma e scritti in OpenGL e C++.Full HD 2D Texture Memory OpenGL

Il problema principale che ho avuto è come gestire tutti quegli sprite HD. Gli artisti hanno disegnato la grafica a 24fps e sono esportati come sequenze di png. Li ho convertiti in DDS (non ideale, perché ha bisogno dell'header directx per caricare) DXT5 che riduce il numero di file. Alcune scene del gioco possono avere 5 o 6 sprite animate alla volta e possono consistere di oltre 200 fotogrammi ogni. Attualmente sto caricando sprite in una serie di puntatori, ma questo richiede troppo tempo per essere caricato, anche con trame compresse, e utilizza un bel po 'di memoria (circa 500mb per una scena completa).

Quindi la mia domanda è: avete qualche idea o consiglio su come gestire volumi così elevati di frame? Ci sono un paio di idee che ho thought've di:

  • Utilizzare il formato SWF per la memorizzazione dei telai da Flash
  • Implementare un sistema di animazione scheletrica 2D, sostituendo le sequenze PNG (ho preoccupazioni circa il essendo visibili le articolazioni)

Come giochi come Castle Crashers si caricano così rapidamente con una grafica HD eccezionale?

+1

Troppo lungo da caricare dal disco o troppo lungo per il caricamento sulla GPU? – genpfault

+0

"non ideale, perché ha bisogno dell'intestazione directx da caricare" Non hai bisogno di intestazioni Direct3D per caricare i DDS. –

risposta

2

Animazioni disegnate a mano a 24 fps? Hai preso in considerazione la riduzione del framerate? Anche l'animazione cel di qualità cinematografica viene raramente tracciata al massimo a 24-fps. Anche se si scende a 18 fps, si eliminerà il 25% dei dati.

In ogni caso, non è stato specificato dove i tempi di caricamento erano lunghi. Il carico del disco rigido è in memoria del problema o è la memoria che carica il problema? Scambia spesso set di dati di trama nella GPU o ne crei solo una serie di trame al momento del caricamento?

Se si tratta di un problema di caricamento del disco, l'unica vera scelta è quella di comprimere i dati delle texture sul disco e decomprimerli in memoria. La compressione in stile S3TC non è così compressa; è progettato per essere una tecnica di compressione utilizzabile per l'hardware di texturing. Solitamente puoi ridurlo usando una libreria di compressione standard, come zlib, bzip2 o 7z. Ovviamente, questo significa doverlo decomprimere, ma le CPU stanno diventando più veloci dei dischi rigidi, quindi di solito è una vittoria generale.

Se il problema è nella larghezza di banda della trama, non ci sono molte soluzioni. Bene, a seconda del tuo hardware di interesse. Se il tuo hardware di interesse supporta OpenCL, puoi sempre trasferire i dati compressi alla GPU e quindi utilizzare un programma OpenCL per decomprimerlo al volo direttamente nella memoria della GPU. Tuttavia, il supporto di OpenCL avrà un impatto sul livello minimo di hardware che è possibile supportare.

Non ignorare le animazioni scheletriche 2D così rapidamente. Giochi come Odin Sphere sono in grado di ottenere una migliore animazione di scheletri 2D avendo diverse versioni di ciascuna delle posizioni del braccio. Quello che viene disegnato è quello che corrisponde al più vicino alla parte del corpo a cui è collegato. Inoltre usano l'arte intelligente per nascondere tutti i difetti, come i vestiti a zampa d'elefante e così via.

+0

hmnn grazie per il consiglio, nel mio caso sembra che sia la larghezza di banda di upload della trama. Ho usato zlib per impacchettare le trame e anche optipng per ottimizzare le trame png. Lo ha reso un po 'più veloce, ma potrebbe dover ricorrere alla riduzione del frame rate. Grazie ancora! – GracelessROB

4

Bene, la prima cosa da tenere a mente è che non tutte le piattaforme supportano DXT5 (cellulari in particolare).

Oltre a quello hai considerato di utilizzare qualcosa come zlib per comprimere le trame? Le trame avranno probabilmente un buon grado di autosimilarità che significherà che comprimeranno molto. In questi giorni la decompressione è economica a causa della velocità dei processori e il tempo risparmiato per scaricare i dati dal disco può essere molto più utile del tempo perso per la decompressione.

Vorrei cominciare da lì se fossi in te.

+2

+1 per la migliore libreria di compressione che ho visto, zlib – Prime

+0

La maggior parte dei cellulari non è in grado di gestire 500 MB di dati di trama, quindi suppongo che quelli non gli importi;) –

+1

@Nicol: è possibile con compressione zlib e streaming. – Goz