Ridimensionamento del mio platformer pixel art da 720p a 1080p


12

Sto sviluppando un platform 2D pixel art per PC e smartphone, ma sono bloccato su un problema tecnico.

Ho scelto di avere una risoluzione dei riquadri 32x32 e una risoluzione sprite di 64x64 caratteri. I livelli sono divisi in sezioni che io chiamo "schermi", e in ogni schermo ho tessere 40x22,5, approssimate a 40x23, quindi la risoluzione minima è 1280x720.

Nel gioco, ho una meccanica a doppio salto, quindi ho bisogno di avere una buona visuale verticale su ogni "schermo".

Ecco il problema: 1280x720 non è una risoluzione molto alta. Sui monitor HD la finestra non sarebbe grande, e se ingrandissi la risoluzione di 2x, sarebbe 2560x1440 e la finestra sarebbe molto più grande di un vero monitor HD. Se provo dimensioni tra 1280x720 e 2560x1440, la grafica inizia a balbettare o è deformata.

Come posso risolvere questo problema? C'è una soluzione che non mi richiede di ridisegnare tutte le piastrelle e gli sprite in formato 16x16?


Ridurre la risoluzione ma far muovere lo schermo con una telecamera è una scelta accettabile? cioè la risoluzione ora è 640 x 360 ma i tuoi schermi sono ancora 1280x720 ma devi muoverti nella stanza, un po 'come Metroid o Axiom Verge?
lozzajp,

Sei nel posto sbagliato, anche se si tratta di un gioco 2d, devi definire una videocamera. Quindi la fotocamera definisce la risoluzione, il fov e gli angoli di visualizzazione e tu presenti i dati semplicemente alla fotocamera. In questo modo il tuo gioco è indipendente dalla risoluzione
Yosh Synergi,


Sto solo cercando di essere sicuro di quale sia esattamente il problema. Stai dicendo che, poiché la visualizzazione della tua mappa 1280X720 è più piccola di quella di un monitor 1920X1080, desideri che la visualizzazione della tua mappa sia ingrandita il più possibile? Sono confuso poiché il disegno di tessere 16X16 non risolverebbe il problema (come ho capito) comunque.
RobM

@DMGregory, se puoi fornirmi alcuni esempi di artefatti nel ridimensionamento quando uso la scala frazionata, sarebbe fantastico in quanto non riesco a immaginare un singolo scenario in cui quando ridimensiono un'immagine in entrambe le direzioni lo stesso importo non è inferiore se l'importo è un numero intero o frazionario, che compaiono gli artefatti. con artefatti intendo cose che non dovrebbero esserci, che sono diverse dalla sfocatura, che si verificano su un ridimensionamento elevato senza abbastanza pixel.
Yosh Synergi,

Risposte:


16

Per chiunque si chieda perché questo è un problema per la pixel art, ecco un breve esempio usando una scena di Super Mario World:

Esempio di scena pixel art ridimensionata, che mostra artefatti

Se ridimensioniamo un gioco di pixel art da 720 a 1080 in fase di esecuzione (come potrebbe fare una tipica videocamera per giochi), otteniamo artefatti a causa del rapporto non intero di pixel dello schermo per texel sorgente. Scopri l'incoerenza dei numeri dall'esempio in scala a destra e come appaiono confuse la foglia e l'orecchio di Mario.

È giocabile, ma ha perso quell'affascinante nitidezza dei pixel art. E in movimento questi artefatti possono strisciare attraverso uno sprite , facendolo sembrare luccicante.

L'uso di una modalità di filtro che fonde i pixel adiacenti eviterà le increspature, ma invece spalma e sfoca la pixel art, quindi non è anche molto desiderabile.


Purtroppo il rapporto 1,5x tra 720p e 1080p è lo scenario peggiore che possiamo incontrare.

Come noterai, il ridimensionamento 1x è troppo piccolo e 2x è troppo grande, con un margine altrettanto ampio in entrambi i modi e non c'è un rapporto di ridimensionamento con numero intero tra di noi per scegliere.

Le tue opzioni si riducono a:

  • Tollera la scala 1x , mostrando il tuo gioco in una finestra 1/3 più piccola dello schermo, aggiungendo bordi decorativi se devi riempire lo spazio.

    • Potresti essere in grado di estendere il ritaglio, mostrando più scena alla volta su schermi ad alta risoluzione. Ciò riduce il riempimento / letterbox necessario, ma dovrai valutare se influisce sul modo in cui il gioco gioca

      (ad es. dà ai giocatori su alcuni dispositivi un vantaggio sleale o lascia loro individuare segreti che non dovrebbero vedere così facilmente?)

  • Scala di 2x e ritaglia la scena , in modo che il giocatore veda meno scena alla volta (circa 3/4 per quanto potevano vedere prima).

    Anche questo può influenzare il modo di giocare, ad es. rendendo difficile per il giocatore vedere i luoghi in cui deve saltare in doppio.

    • Puoi compensare ciò con la logica della videocamera, avendo la panoramica per seguire o anticipare il lettore, quindi il contenuto importante è ancora visibile in uno schermo con il ritaglio più piccolo, ma non esiste una migliore videocamera universale da usare.

      Se decidi di seguire questa strada, prova a condividere alcuni dettagli del tuo gameplay e della videocamera attuale e una scena di esempio. Con ciò, potremmo essere in grado di aiutare a mettere a punto il comportamento della fotocamera per compensare (o il tuo gioco potrebbe richiedere una maggiore visibilità)

  • Crea risorse alternative a una risoluzione diversa . (Sì, questo è un sacco di lavoro, ma ti dà il maggior numero di opzioni per controllare l'aspetto del gioco)

    Ciò non significa che devi buttare le tue risorse esistenti che sembrano grandi su 720p. Questo articolo descrive lo scambio contestuale tra diversi set di risorse per supportare una gamma più ampia di risoluzioni target (in Unity, ma il principio può essere applicato anche in giochi non Unity).

    • Come noterai, ridisegnare tutte le risorse a metà grandezza ( tessere 16x16, carattere 32x32 ) ti permetterà di gestire 720p in scala 2x e 1080p in scala 3x, con lo stesso numero di tessere mostrato come hai ora. Tuttavia, è possibile che la risoluzione delle piccole tessere sia più restrittiva visivamente.

    • Potresti anche disegnare un set di risorse "di grande formato" alternativo più grande del 150% ( 48x48 tessere, 96x96 caratteri ), che gestirà 1080p su scala 1x. (Utilizzereste le risorse esistenti per 720p o 1440 ecc.). La risoluzione più grande dovrebbe aiutarti a mantenere la fedeltà della tua arte attuale, quindi non devi sacrificare lo stile e i dettagli che hai ora.

      Esempio di un asset ridisegnato in scala 150%

    • Una terza opzione è quella di disegnare un set di risorse solo leggermente più piccolo ( tessere 24x24, carattere 48x48 ), in grado di gestire 1080p su scala 2x, e di nuovo potrebbe significare meno sacrificio di dettagli rispetto a dimezzare tutte le dimensioni delle risorse.

      Tutte e tre queste opzioni ti permetteranno di mantenere l'inquadratura e il gameplay esattamente gli stessi a 720 e 1080, ma a costo di circa il doppio del lavoro delle risorse.

Quindi, sfortunatamente non c'è vittoria facile qui, solo diversi compromessi.


2
menzionate il mantenimento della scala originale e l'uso dei bordi decorativi. A seconda del contesto, questo potrebbe essere il posto perfetto per inserire elementi della GUI, come punteggio e vite. Se questi bordi sono abbastanza grandi da adattarsi adeguatamente a tali informazioni, possono renderle meno "riempitive" e più "piene di contenuti" e pertinenti al gioco.
Gnemlock,

3

Elaborazione specifica dell'opzione di @ DMGregory di creare risorse alternative a risoluzioni diverse:

La migliore soluzione che conosco è probabilmente il meno utile a questo punto: sviluppare le risorse artistiche in un formato vettoriale e rasterizzarle come necessario in seguito. Questo non è un proiettile magico; la maggior parte delle volte scoprirai che dovrai apportare alcune piccole modifiche artigianali dopo la rasterizzazione.

La prossima migliore opzione che conosco è quella di provare vari algoritmi di ridimensionamento delle immagini, in particolare, algoritmi di ridimensionamento pixel art . Come prima, questa non è una pancea; la selezione di un algoritmo di ridimensionamento specifico è altamente specifica al contesto. Ha molto a che fare con la 'sensazione' del tuo gioco come con l'arte stessa e anche con un buon algoritmo + arte abbinata, probabilmente dovrai modificare alcuni sprite a mano.

In entrambi i casi, l'idea è quella di utilizzare uno strumento per fare la maggior parte del lavoro per te e concentrare lo sforzo umano sui dettagli rimanenti. Come ha detto @DMGregory, "non c'è vittoria facile qui, solo diversi compromessi".


Modifica per quanto riguarda il ridimensionamento frazionario: la maggior parte degli algoritmi di ridimensionamento pixel art aumenta solo di numeri interi. A parte il lancio del tuo algoritmo di ridimensionamento personalizzato, probabilmente dovrai combinare l'upscaling e il downscaling per ottenere il cambiamento 1,5x che stai cercando. Come riferimento, ecco il risultato della combinazione dell'algoritmo scale3x per l'upscaling e l'algoritmo fant per il downscaling del 50%:

Originale:

inserisci qui la descrizione dell'immagine

Scaled:

inserisci qui la descrizione dell'immagine


Sfortunatamente la maggior parte degli algoritmi di ridimensionamento della pixel art che ho trovato tendono ancora a gestire solo l'upscaling di numeri interi (2x, 3x, 4x di solito), quindi non aiutano molto con il caso 720-> 1080. (Forse si potrebbe usare un upscaler di pixel 3x quindi declassare della metà ...? Non sei sicuro che sembrerebbe migliore o peggiore di un upscale diretto)
DMGregory

Punto valido. Modificato un po 'per affrontarlo. Mi sono anche imbattuto in questo shader che sembra supportare il ridimensionamento frazionario .
Pikalek,

+1 alla soluzione vettoriale. Devi rendere le tue risorse davvero grandi e ridotte.
Mark Aven,
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.