Perché le mappe Bump, Normal e Displacement non dovrebbero essere corrette con la gamma?


9

Quindi sto cercando di avvolgere la mia testa da un punto di vista abbastanza tecnico.

Quando aggiungi una mappa Bump o Normal o Displacement nello shader, non devono essere corretti. Ma dovrebbero essere trame diffuse. Ma perché?

Quando si salva un file in 8 bit (o 16 bit intero) con un formato come JPEG, PNG o TIFF, viene bruciata la gamma di 0,4545 (1 / 2,2). Quindi una videocamera cattura la luce dal mondo reale (che è lineare) e quando si salva la foto come JPEG viene aggiunto un valore gamma di 1 / 2.2, come un modo per comprimere le informazioni in 8 bit, e quindi quando si visualizza l'immagine su un monitor che aggiunge una gamma di 2.2 rendendo di nuovo lineare la luminanza.

Quindi quando usi una texture diffusa (come una foto) devi "rimuovere" quella gamma 1 / 2.2 per renderla lineare (chiamata linearizzazione), quindi ora la trama appare più scura ma questi valori sono corretti dal punto di vista matematico, quindi il renderer lo farà fare i calcoli corretti. Nota a margine: il software ha utilizzato una gamma di visualizzazione di 2,2 per assicurarsi che le trame appaiano corrette solo per il calcolo interno che sono linearizzate. Ma quando creo una mappa Bump in Photoshop e la salvo come JPG o PNG, allora anche quella gamma 1 / 2.2 viene masterizzata in quell'immagine, quindi perché non è necessario linearizzare anche questa mappa Bump?

Se carico una mappa Bump in 3ds Max con una gamma di input di 2.2 proprio come farebbe con una trama Diffusa, la diffusione sembra giusta ma il bump sembra sbagliato, quindi devo impostare la gamma di input su 1.0 per il bump in ordine per farlo sembrare giusto, ma come ho detto: perché in entrambi i file di immagine è stata masterizzata la gamma 1 / 2.2, giusto?

Risposte:


5

Il fatto che una foto sia memorizzata nello spazio gamma non ha a che fare con PNG o JPEG, ha a che fare con il fatto che è una foto.

La fotocamera rileva un'intensità del 50% ma la salverà come 187 invece di 127, poiché è più efficiente mantenere le informazioni sul colore che contano per l'occhio umano quando si hanno solo 256 valori diversi possibili. E così fa Photoshop se lo dici tu.

Per le normali o le mappe di spostamento, non hai questa necessità, quindi non c'è motivo di usare lo spazio gamma per loro (usare la gamma per loro sarebbe effettivamente un errore, poiché influirebbe sulla distribuzione della precisione). Pertanto, quando decodifichi una trama normale o una trama di spostamento, non è necessario applicare la gamma.

Se la mappa normale è codificata in uno spazio diverso, ad esempio , come nel caso di un G-Buffer , è necessario applicare la correzione corrispondente.


Come dici a Photoshop di salvare un'immagine con la gamma inserita come hai detto sopra: "E così fa Photoshop se lo dici tu."
Kristoffer Helander,

Questo non spiega affatto il "perché". Ribadisce semplicemente il "cosa".
user1118321

@ user1118321: credo di si. Ho aggiunto enfasi nel tentativo di renderlo più chiaro.
Julien Guertault,

Bene, vero, ma non spiega ancora perché. Ammetto di avere lo stesso problema, ho solo menzionato la mancanza di benefici o danni causati da tale compressione. Non è necessario, ma il motivo è che i dati delle immagini sono peculiari a causa dei sensi umani mentre il nostro ragionamento spaziale è di natura più lineare (per quanto riguarda l'app 3D)
joojaa

3

JPG, PNG o altri formati di immagine a 8 bit non hanno intrinsecamente 1 / 2.2 gamma associato ad esso. Memorizzano solo valori da 0 a 255. La modalità di interpretazione di tali dati dipende dal software che legge e scrive tali file. Il fatto interessante è che la maggior parte dei software di modifica delle immagini utilizza lo spazio colore gamma per impostazione predefinita. Tutti i pennelli, gli effetti, i filtri e persino il selettore colore funzionano tutti nello spazio gamma. Guarda le sfumature di grigio sul selettore dei colori in Photoshop. Non seguono una distribuzione lineare.

La conseguenza è che Photoshop non esegue conversioni tra gamma e spazio colore lineare quando si apre o si salva un'immagine (per impostazione predefinita), solo quando viene visualizzata. Ciò significa che puoi usarlo altrettanto facilmente per creare o modificare dati lineari come una heightmap, come puoi modificare le foto. La bump map non appare correttamente se caricata con correzione gamma, perché non è stata salvata con essa.


Ecco un video di YouTube che spiega anche che il valore memorizzato in un'immagine è 1 / 2.2 (ma lo semplifica e dice solo che è la radice quadrata, c'è una dichiarazione di non responsabilità nel testo.) Computer Color is Broken - MinutePhysics link
Kristoffer Helander,

@KristofferHelander Sì, ma dice che è solo la fotocamera che memorizza i valori come radici quadrate e solo il display che la riporta indietro. Il software di modifica delle immagini come Photoshop quindi apre e salva l'immagine senza conversioni, il che si traduce in artefatti mostrati nel video quando si tenta di fondere i colori.
Quinchilion

Correggimi se sbaglio su questo. Quando disegno una rampa gradiente in Photoshop che mi appare lineare sullo schermo, i valori in quella rampa sono effettivamente lineari. Ma Photoshop aggiunge una gamma di visualizzazione di 1 / 2.2 poiché il monitor aggiunge una gamma di 2.2, quindi i valori dei pixel delle immagini sono lineari e sembrano anche lineari. Ma questa gamma 1 / 2.2 è solo una gamma di visualizzazione utilizzata da Photoshop per visualizzare l'immagine, non è incorporata nell'immagine e quindi non è necessario eseguire alcuna correzione gamma nell'immagine nel software 3D (utilizzare gamma 1.0) poiché i valori sono già lineari?
Kristoffer Helander,

@KristofferHelander goo.gl/yqkeUP Il gradiente inferiore rappresenta la luminosità fisica. Se Photoshop applicasse una gamma di 1 / 2.2 per disegnare il gradiente o visualizzare l'immagine, vedresti il ​​gradiente inferiore. Invece, vedi quello in alto, che per coincidenza sembra essere lineare, ma non lo è. Inoltre non funzionerebbe per la visualizzazione di foto. La fotocamera applicava 1 / 2.2 durante il salvataggio della foto, quindi Photoshop ne applicava un altro 1 / 2.2, ma il display aggiunge una gamma di 2,2 solo una volta. Non sarebbe giusto.
Quinchilion,

Se riempio un documento in Photoshop metà lato rosso (255,0,0) e l'altra metà con verde (0,255,0) e quindi utilizzo una sfocatura gaussiana su questo, il gradiente risultante diventa brunastro piuttosto che giallo nel mezzo, come mostrato in quel video che ho pubblicato. Perché? Se i pixel nell'immagine sono lineari, allora perché la matematica viene rovinata? Non capisco come una mappa di spostamento dipinta in Photoshop sia lineare e buona per il rendering, ma allo stesso tempo la sfocatura dei pixel viene rovinata dalla gamma sbagliata e i colori diventano scuri e brunastri?
Kristoffer Helander,

3

introduzione

Dipende da come crei la mappa! Considera quanto segue e lascialo affondare per un po 'prima di andare avanti:

  1. L'immagine viene visualizzata con una correzione gamma a beneficio dei tuoi occhi
  2. I dati sono ancora solo dati. La correzione gamma è per la parte del display non per la parte dei dati.

Ora è difficile disegnare una bump map con un'applicazione di disegno. Perché è difficile da vedere anche se eri correttamente lineare. Quindi finisci per usare cose come guardare i valori. Ora ecco il trucco:

  • Se decidi che 128 è a metà della tua intensità, allora questa è la realtà. Dal momento che questo è ciò che codifica nel flusso di dati. I dati sono come li interpreti poiché non sono pensati per gli occhi umani e il monitor. Chi se ne frega di ciò che il monitor mostra i valori come tutto su come si interpretano i dati modificandoli.

Realizzare la mappa di rilievo / spostamento

Ok, quindi ora ho descritto che i dati sono interpretati. Ma perché interpretare i dati come lineari? Perché allora puoi progettare meglio il tuo profilo laterale. Scopri cosa puoi fare è pensare al 100% di opacità del pennello come all'altezza del bersaglio su cui vuoi intagliare o sovrapporre. È quindi possibile utilizzare lo strumento curve per progettare la forma del pennello timbri (poiché si ritiene che i dati siano lineari).

inserisci qui la descrizione dell'immagine

Immagine 1 : un timbro a ventosa.

Ora, se fai qualcosa del genere, la tua immagine è lineare nonostante ciò che tutti ti dicono. Hai deciso di scartare le regole dell'immagine che dicono diversamente. Ed è per questo che l'immagine è lineare , l'autore sceglie che sia lineare in modo che sia più facile lavorarci.

inserisci qui la descrizione dell'immagine

Immagine 2 : stessa immagine spostata e interpretata lineare (nota che ho ridimensionato un po 'l'altezza per adattarla alla mia dimensione bb predefinita), funzionando come previsto.

Tecnicamente lineare è meglio.

Una mappa sintetica non ha alcun vantaggio nel comprimere determinati valori a spese di altri. Linear è intrinsecamente migliore perché la diffusione dell'urto è migliore in questo modo. Questo è il motivo per cui sprecheresti risorse codificandolo in modo corretto dalla gamma.

In secondo luogo, non è necessario che un'immagine specifichi lo spazio colore in cui si trova. È solo che gli editor di immagini supporranno che sia codificato in sRGB. Non hai motivo di fare la stessa interpretazione, nessuna informazione significa solo: "Nessuno si è preso la briga di scrivere quello che stavano pensando". Quindi forse il punto dovrebbe essere chiarito, dovresti etichettarlo in modo lineare. Ma ecco il problema ... il tuo computer non ha un profilo lineare facilmente accessibile.

Che dire di Photoshop e sfocatura?

Questo è dove diventa difficile. Photoshop cerca di fare abbastanza lavoro per assicurarsi che non sia necessario conoscere nulla di queste cose. Ed è qui che ti spari nel piede. Se Photoshop non è pensato per la creazione di texture, ha lo scopo di modificare immagini non dati casuali. Quindi, poiché la sfocatura su un'immagine è lineare e non lineare diversa, non funzionerà in base a dati errati.

Ma puoi fare una delle 2 cose per risolvere questo problema:

  1. Disabilita la correzione gamma della sfocatura
  2. imposta il tuo spazio di lavoro su un profilo lineare

Conclusione

Il motivo per cui hai difficoltà con questo è

  1. Non sai cosa pensano gli altri, semplicemente non sai se dovrebbero essere corretti o meno.
  2. che stai usando un'applicazione che tratta le immagini come immagini

Il punto uno è particolarmente confuso. So solo che TUTTE le mie mappe di bump e spostamento sono in effetti lineari. Ma non posso sapere quali sono le tue mappe. Le probabilità sono che sono lineari perché si comprende quasi universalmente che i dati sono lineari. Anche le persone che non conoscono la gamma tendono a farlo lineare per bump / spostamento per qualche motivo (perché è facile ed è quello che pensi siano le immagini fino a quando qualcuno non ti dirà diversamente).


Grazie per il tuo contributo - wow! :) Lo darò quando avrò più tempo libero. Tornerò da te, grazie!
Kristoffer Helander,

Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonProbabilmente perché quelle mappe sono generate.
Tara,

3

In realtà, se la tua bump o mappa di spostamento viene salvata con quella correzione gamma 0.45, è sbagliata. Queste mappe contengono informazioni geometriche anziché colore e, come tali, dovrebbero essere semplicemente codificate in modo lineare.

Per un problema correlato e una correzione per Adobe Photoshop, vedere questo slide deck: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8


Ciò è particolarmente vero per una mappa normale dove ti aspetti che la lunghezza del vettore sia 1.
PaulHK
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.