Numeri addomesticanti con un punto mobile. È possibile eseguire il debug di shader per dispositivi mobili su un PC?

Nell'industria dei giochi, il lavoro sugli effetti di qualità visiva è condotto all'incrocio tra arte e tecnologia. Questo è particolarmente vero per le applicazioni mobili.

In questo articolo, parleremo dell'utilizzo di numeri in virgola mobile durante il debug di shader per dispositivi mobili su un PC. Siamo sicuri che l'esperienza di Krasnodar Studio Plarium sarà utile per te, indipendentemente dal motore che utilizzi.

immagine

Come abbiamo identificato il problema

Nel processo di creazione degli effetti, abbiamo costantemente affrontato il fatto che alcuni di essi alla fine si scompongono in pixel.

immagine

Abbiamo esaminato questo problema e determinato i motivi del suo verificarsi: si è scoperto che non tutti i gadget sono esposti a artefatti. Fondamentalmente riguarda vecchi dispositivi mobili o modelli con caratteristiche deboli. E alcuni effetti apparentemente identici hanno funzionato come dovrebbero, quindi hanno perso la fluidità dei movimenti e la pixelizzazione acquisita.

Nell'analizzare la documentazione tecnica dei processori video dei dispositivi a rischio, abbiamo scoperto che non tutti i gadget hanno il pieno supporto per i numeri a virgola mobile a 32 bit. Questo è ciò che causa problemi con artefatti e immagini.

E il sistema binario?

Ricordiamo come appaiono i numeri in virgola mobile in un sistema binario.

immagine

Puoi immaginare un numero come un contenitore per memorizzare un numero fisso di cifre significative e una virgola ovunque in quel numero. Ovviamente, i grandi numeri hanno meno precisione.

Per esempio, abbiamo un numero significativo - 123456789. Se si mette una virgola dopo la prima boa (1.23456789), possiamo cambiare questo numero fino a 0.00000001. Ma se la virgola viene messa prima dell'ultimo segno (12345678,9), la precisione sarà 0,1.

Se usiamo numeri a 32 bit, qualsiasi numero di questo tipo trasmette accuratamente 7 caratteri. Ciò consente all'applicazione di funzionare per circa 70 ore senza problemi visibili. È il momento in cui l'utente vede esattamente il gioco in esecuzione, e non in una pausa o in uno stato ridotto al minimo. Uno stock abbastanza grande, non è vero?

Ma il fatto è che molti dispositivi mobili supportano solo numeri a virgola mobile a 16 bit in uno shader di pixel (frammenti). In tali numeri ci sono solo 4 segni esatti, che portano ad una notevole perdita di precisione quando si animano le trame dopo 10-15 minuti.

Alla ricerca di una soluzione:

Abbiamo diviso le ragioni della perdita di precisione in tre gruppi:
Durante la trasmissione, il valore viene convertito da 32 bit a 16 bit.
Nel calcolo, viene effettuato un tentativo di eseguire operazioni con numeri di ordini diversi.
In caso di overflow, qualsiasi numero con un punto mobile ha il valore massimo e minimo.

Risolvere il problema su ogni particolare dispositivo non è realistico, quindi ci siamo concentrati sulla visualizzazione dell'errore sul PC mentre creavamo l'effetto e prendevamo provvedimenti in anticipo per risolverlo.

Sul PC, non è possibile emulare direttamente la modalità operativa a 16 bit. Il driver della scheda video converte automaticamente tutte le istruzioni a 16 bit in 32 bit e puoi monitorare visivamente la perdita di precisione solo dopo molto tempo. Pertanto, per visualizzare gli artefatti dalla perdita di precisione, abbiamo scritto il nostro time manager e le estensioni per gli shader.

Time Manager

Il nostro tempo di "debug" inizia prima del tempo per diverse ore. Quindi, l'artista può immediatamente vedere i problemi con l'effetto. Inoltre, il gestore reimposta automaticamente l'ora ogni volta che l'applicazione viene messa in pausa o ridotta a icona. È a questo punto che il salto degli effetti è meno evidente per il giocatore.

Con l'avvento della nuova versione di Unity sistema gestiti frame rendering processo (Scriptable pipeline di rendering) siamo stati in grado di rinunciare a un singolo script di gestione del tempo e fare tutto direttamente nella formazione del telaio.

Estensioni per shader

L'idea era di sovraccaricare il numero a virgola mobile a 32 bit nello stesso modo in cui è sovraccarico a 16 bit. Era necessario spostare la parte significativa di un certo numero di bit. Ma le operazioni di bit non sono disponibili per Shader Model 2.0 e inoltre, utilizzando un modello di shader più alto, il motore ferma gli artisti che avvertono degli effetti di calcoli troppo complessi per i dispositivi mobili e il budget dell'effetto viene superato.

Abbiamo deciso di realizzare l'algoritmo di simulazione più preciso, che ci permetterà di ottenere il risultato desiderato.

Aggiungiamo un numero elevato a quello originale. Questo numero molto grande è determinato dal numero di caratteri del numero principale.
Sottrattilo. Devi ingannare il compilatore, che accorcia automaticamente le operazioni. Per questo, introduciamo un piccolo errore nel numero dopo l'aumento.

Quindi, cambiando leggermente lo shader, otteniamo un'immagine visivamente identica per dispositivi deboli. Ciò consente ai nostri artisti di controllare lo sviluppo degli effetti e ridurre il numero di errori nel lavoro.

Suggerimento: Frac per assistere

nel lavoro sugli effetti del volto ad assicurare che tutti i numeri che sono responsabili per l'effetto di dolcezza e precisione è necessaria, variavano da 0 a 1. Utilizzare l'operazione di ritaglio di tutta la parte - frac (x).

Infatti, frac è una riduzione di un numero in virgola mobile in un numero intero, seguito da una sottrazione di questo intero dal numero originale. Cioè, frac = x - floor (x).

Poiché questa operazione utilizza il numero originale nella forma originale, la perdita di precisione può verificarsi anche nella fase di trasferimento di questo numero all'interno dello shader. Pertanto, si consiglia di utilizzare un tempo che non aumenta a valori elevati. È buona norma forzare il tempo zero al momento del caricamento o quando l'interfaccia di gioco si sovrappone al livello del gioco.

Il lavoro svolto ha permesso di ridurre significativamente il numero di errori visivi. I nostri artisti sono stati in grado di controllare il processo di creazione di effetti senza una verifica lunga e complessa sui dispositivi mobili.

Коментарі

Популярні дописи з цього блогу

Автомобілі на польській реєстрації.

Малий Прикордонний Рух

база номеров мобильных телефонов украины скачать