Come posso ridimensionare la pixel art?


14

Esistono molti algoritmi per ingrandire la pixel art. (Io preferisco hqx , personalmente). Ma ci sono delle notevoli algoritmi di scala esso verso il basso ? Il mio gioco è progettato per funzionare a una risoluzione di 1280x720, ma se si gioca a una risoluzione più bassa voglio comunque che abbia un bell'aspetto.

La maggior parte delle discussioni sulla pixel art sono incentrate su 320x200o 640x480e l'upscaling per l'uso negli emulatori di console, ma mi chiedo come i giochi 2D moderni come Monkey Island Remake possano apparire bene con risoluzioni inferiori?

Ovviamente ignorando l'opzione di avere più versioni di risorse (cioè mipmapping ).


Il mipmapping non richiede più versioni di risorse; può essere fatto automaticamente durante il caricamento del contenuto da OpenGL o DirectX. Ciò soddisferebbe i tuoi obiettivi?
Seth Battin,

@SethBattin non sono sicuro. Sto pensando di lanciare un gioco realizzato per 1280x720, ad esempio 1024x576. Cosa usano OpenGL e DirectX per ridimensionare se gli do un'immagine che è 128x96 e dovrebbe essere visualizzata in 102x76? (che è anche un problema di arrotondamento poiché dovrebbe essere 102,4x76,8 pixel)
Michael Stum

Il mipmapping offusca molto l'immagine. Non lo vorresti per pixelart.
Kromster dice di sostenere Monica il

5
FYI: Monkey Island Remake non ha richiesto il ridimensionamento. Il gioco funzionava su EGA e aveva una dimensione effettiva di 320x200 pixel. Non è necessario creare versioni ridimensionate di questo per i dispositivi mobili, dal momento che è già inferiore alla risoluzione di questi dispositivi al giorno d'oggi.
bummzack,

2
Come appare la tua pixel art? Ci stai chiedendo di rispondere nella cecità.
aaaaaaaaaaaa,

Risposte:


14

Attualmente sto realizzando un gioco che deve essere eseguito su una vasta gamma di dimensioni di visualizzazione e proporzioni, e non è stato un processo molto semplice. Inoltre, se stai realizzando cose in pixel art e vuoi mantenere la sensazione di pixel art supportando molte risoluzioni, stai camminando in un mondo di dolore, quindi preparati.

Secondo me, ci sono diverse cose che puoi fare (alcune sono esclusive, altre no)

  1. Definisci una risoluzione minima e esegui l'upscaling (tutto) solo in termini interi con il vicino più vicino. In questo modo puoi mantenere la sensazione di pixel art. Non penso che il downscaling sia una buona idea, poiché perderai i dettagli e l'intero scopo di usare pixel art accuratamente realizzati verrà sconfitto. Se la risoluzione minima supportata è troppo piccola per i tuoi sprite, modifica la risoluzione minima supportata o ridisegna tutte le risorse per supportare questa risoluzione minima.

  2. Quando si incontra una risoluzione, o proporzioni non sufficienti a coprire l'intero schermo, estendere il gioco (mostra più riquadri), mantenendo intatte le risorse. Dovresti creare il tuo gioco in modo che sia comunque giocabile con il rapporto risoluzione / aspetto minimo.

  3. Se non è possibile estendere il gioco, riempire di nero le sezioni non di gioco dello schermo; strisce nella parte superiore e inferiore, sinistra e destra o una cornice nera. Questo è ciò che fa l'iPad quando si eseguono app per iPhone in modalità ingrandita. Questo è anche ampiamente usato negli emulatori.

  4. Rinuncia a rimanere fedele alla griglia dei pixel. Ma devi smettere di usare le risorse pixel art con angoli acuti. Quindi esegui l'upscaling / downscale usando il filtro bilineare (o ottimamente bicubico, se la tua piattaforma lo supporta). Questa è la scelta migliore per massimizzare l'utilizzo dello schermo, mantenendo l'esperienza utente simile su tutte le risoluzioni supportate.

Per il mio gioco, ho finito con l'opzione numero 4 e sono piuttosto sorpreso di quanto sia bello sui dispositivi che vanno da 320 pixel in verticale (un vecchio Android 2.3) fino a 1536 pixel in verticale (un iPad del 2012 con display Retina). Le risorse originali sono pensate per 600 pixel in verticale (originariamente per display 800x600 su un PC Windows). Sebbene per i giochi successivi, penso che una migliore risoluzione verticale logica sia di 720 pixel.

Il gioco utilizza una risoluzione virtuale virtuale di 600 pixel, ridimensionata in base alla risoluzione nativa del dispositivo con filtro bilineare. Ciò significa che tutte le coordinate Y nel codice vanno da 0 (parte superiore dello schermo) a 600 (parte inferiore dello schermo).

Per le dimensioni orizzontali, suppongo che la larghezza massima sia di 1080 pixel, che è più che sufficiente per coprire anche le proporzioni 16: 9 più ampie. Le mie coordinate x sono centrate, quindi x = 0 è il centro dello schermo e le coordinate x vanno da -540 a sinistra a 540 a destra. Mi assicuro che tutto si adatti tra -400 e 400 per supportare i display più stretti (4: 3)

Tuttavia, se dovessi mantenere la sensazione della pixel art, utilizzerei sicuramente le opzioni 1 e 2. Ciò significa che ridimensionerei solo in termini interi per mantenere la sensazione di blocco della pixel art e progettare il gioco in modo che la quantità di visibile le tessere non sono fisse e possono adattarsi a qualsiasi risoluzione dello schermo / proporzioni.

Quindi, al fine di (non) rispondere alla tua domanda. Penso che ridimensionare la pixel art sia una pessima idea, quindi non dovresti farlo. Esistono altri modi per supportare diverse risoluzioni dello schermo che forniranno risultati migliori rispetto alla semplice macellazione della tua arte creata con cura.


Sono nella stessa situazione e mi sta facendo impazzire. Il nostro gioco è pixelart realizzato per schermi con altezza di 600 px. Ma se ingrandisco gli schermi a 720p (PC), si ottiene un aspetto davvero orribile, leggermente sfocato. Non so davvero cosa fare qui. Ho anche pensato di creare una mappa più grande per gli schermi a 720p e di mantenere la pixelart così com'è, ma poi ho lo stesso problema per gli schermi a 1080p. Penso che avremmo dovuto fare pixelart a 360p (o più piccolo), quindi avremmo un perfetto ridimensionamento x2 e x3 per schermi a 720 e 1080p. Adesso è troppo tardi per quello. Qualche ulteriore idea o consiglio?
Damian,

8

Prendi in considerazione l'idea di generare le versioni ridimensionate al momento dello sviluppo e di includerle direttamente nel gioco come risorsa. Fallo con Photoshop o qualsiasi altro strumento che trovi crea ciò che ti piace. Quindi fai in modo che il gioco selezioni dinamicamente il giusto set di arte appropriato alla risoluzione corrente.

Ecco un paio di motivi per cui potresti farlo ...

Salva il lavoro di elaborazione

Se hai eseguito la ridimensionamento programmato in fase di esecuzione, il tuo software probabilmente creerà e memorizzerà comunque in cache la grafica. Quindi perché non includere solo le versioni ridimensionate nel bundle di risorse artistiche? Suppongo che se ha reso il download più grande di quanto vorresti possa importare, ma risparmierai un po 'di carico della CPU, scritture del disco, ecc.

Maggiore controllo artistico

Se ridimensioni tu stesso l'arte, avrai un maggiore controllo sull'aspetto finale. Ciò potrebbe non fare la differenza se si ridimensiona una piccola quantità, ma quando si arriva a risoluzioni molto più basse, si potrebbe desiderare di avere un migliore controllo artistico sull'aspetto finale. Ad esempio, se gli occhi di un personaggio specifico dovevano essere enfatizzati, potresti effettivamente disegnare le versioni a bassa risoluzione con gli occhi non ridimensionati così tanto da conservare l'effetto - qualcosa che il ridimensionamento programmatico non può fare.

Il ridimensionamento dinamico non è perfetto

È possibile prendere decisioni artistiche distintive che non funzionano con il ridimensionamento dinamico. Ad esempio, supponiamo di voler mettere un bordo, un contorno o una luce intorno a un'immagine. Se visualizzato a una risoluzione più elevata, questo può sembrare soddisfacente, ma la versione ridotta può essere fangosa o perdere completamente l'effetto. Ma se fatto a mano puoi applicare l'effetto in modo specifico a ciascuna dimensione e garantire di mantenerne l'impatto.

Altri pensieri

È inoltre possibile adottare un approccio ibrido, con un set di risorse specifiche per la risoluzione che vengono utilizzate dove trovato, e un set generico che viene ridimensionato dinamicamente se non viene trovata alcuna versione specifica per la risoluzione. Questo è un po 'come funziona la piattaforma Android. Alcune informazioni al riguardo su http://developer.android.com/guide/practices/screens_support.html


0

Ridimensionare è più facile che ridimensionare perché stai scegliendo informazioni da buttare via piuttosto che dover inventare nuove (e possibilmente errate) informazioni per colmare le lacune. Con questo in mente, probabilmente non hai bisogno di nulla di speciale qui e la maggior parte degli algoritmi di ricampionamento standard dal regno dell'elaborazione delle immagini dovrebbero funzionare abbastanza bene per ridimensionare un'immagine: bilineare, gaussiana, Lanczos, ecc.

Lanczos in particolare potrebbe essere una scelta interessante in quanto affina l'immagine, probabilmente preservando i dettagli che altrimenti andrebbero persi se si combinano diversi pixel in uno. Ovviamente, ciò comporta il costo di introdurre artefatti indesiderati.

Alcuni confronti visivi qui: /gis/10931/what-is-lanczos-resampling-useful-for-in-a-spatial-context


3
-1, perché il ridimensionamento della pixel art (che di solito è pixel per pixel, ad esempio , realizzato a mano ) non avrà mai un bell'aspetto con nessuno di questi algoritmi. Con l'approccio del vicino più vicino perderai importanti segmenti di linea. Con l'interpolazione otterrai immagini sfocate. Temo che non ci sia una risposta soddisfacente alla domanda dei PO se non farlo manualmente.
bummzack,
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.