Immagini HDR lineari a mezzo float a 16 bit come trame (diffuse / albedo)?


10

Quindi ci ho pensato per un po 'e ho provato a cercare una risposta su Google, ma senza successo.

Se tutte le tue trame sono immagini LDR a 8 bit, come i JPEG, ciò non potrebbe potenzialmente causare conflitti con il controllo dell'esposizione / mappatura dei toni durante il rendering. Cioè se modifichi l'esposizione di rendering della tua immagine che dovrebbe esporre i dettagli nelle trame che non sono realmente lì, poiché sono stati bloccati dalla bassa gamma dinamica. Quindi non avrebbe senso avere anche le trame come immagini HDR, salvate come .exr, nello spazio cromatico lineare con mezzo float a 16 bit per ottenere una buona rappresentazione del colore (il float "pieno" a 32 bit potrebbe essere eccessivo?). Avere valori di colore più dettagliati e corretti potrebbe anche, immagino, avere un effetto su IG e come viene calcolato il colore al vivo?

O semplicemente non è necessario poiché il risultato finale del rendering che vogliamo sarà probabilmente simile al livello di esposizione della trama quando è stata fotografata in qualche modo? E poiché la fotocamera scatta principalmente a 12-14 bit, dovresti prendere più esposizioni della trama e fare tutto quel lavoro extra per riunirle tutte in un HDRI.

Modifica: per chiarire, sono principalmente interessato a questo dal punto di vista del rendering fotografico realistico, con i renderizzatori di ray trace (come mental ray, V-Ray, Arnold, ecc.) Con simulazioni di luce piena e illuminazione globale, piuttosto che per motori di gioco in tempo reale.

Risposte:


8

Nella produzione cinematografica, non usiamo quasi mai trame a 8 bit per colore / albedo, a causa del banding, ecc. (JPEG è particolarmente problematico poiché, per specifica, è sRGB piuttosto che valori lineari.) Usiamo 'half' (float 16 bit ) o valori interi senza segno a 16 bit per trame color / albedo.


1
Wow, grazie @LarryGritz! Considerando che lavori per Sony Pictures Imageworks, ti prenderò come una fonte molto affidabile! :) Ma come catturi queste trame? La maggior parte delle fotocamere scatta solo in file RAW a 14 bit, hai fotocamere speciali con sensori lineari a 16 bit? Oppure prendi più esposizioni per le trame, proprio come si fa per l'illuminazione basata su immagini HDRI? Oppure acquisisci semplicemente con la fotocamera RAW a 14 bit e la salvi come "16 bit"? Ow, e quale formato di file usi, .tiff (.tx, .tex) o .exr? Grazie ancora per il tuo contributo !! :)
Kristoffer Helander,

1
@KristofferHelander: la conversione dalla cattura a 14 bit a una rappresentazione a 16 bit dell'intervallo 0-1 è facilmente ottenibile tramite la moltiplicazione. Ma la maggior parte delle nostre trame sono dipinte, non fotografate - a volte sono dipinte direttamente in un formato a 16 bit, a volte sono dipinte in sRGB e quindi convertite in 16 bit quando "linearizzate" per l'uso come trama. Non è necessario HDR per le trame albedo.
Larry Gritz,

1
@KristofferHelander: Per le trame albedo, tendiamo a usare TIFF con dati interi a 16 bit (ciò che chiamiamo .tx è solo in formato TIFF ma affiancato e con multiresoluzione MIP-map memorizzata come immagini multiple all'interno del file TIFF). Per i dati HDR reali, come le acquisizioni di ambiente, utilizziamo OpenEXR. Anche l'output del renderer tende ad essere OpenEXR.
Larry Gritz,

8

Sì, in alcuni casi estremi è possibile che l'illuminazione HDR e la tonemapping espongano problemi di bande nelle trame a colori. In questi casi, potrebbe essere utile avere una profondità di bit più elevata per le trame. Tuttavia, nella mia esperienza, la maggior parte dei materiali e le normali situazioni di illuminazione non presentano questo problema e la maggior parte delle trame in un gioco tipico va bene con i giochi a 8 bit (o anche meno) spesso usano la compressione BC1, che li riduce a 5- 6-5-bit).

Le persone usano gli obiettivi di rendering HDR perché una singola scena può contenere intensità di luminosità molto diverse, come una stanza buia in cui è possibile vedere attraverso una finestra un esterno illuminato dal sole 10–100 volte più luminoso della stanza. Tuttavia, le trame a colori non hanno una gamma così ampia di magnitudini. Rappresentano riflessioni, che sono intrinsecamente nell'intervallo [0, 1], e in pratica pochi materiali di uso quotidiano sono inferiori a circa il 2-5% di riflettanza. Quindi un'immagine a 8 bit (con codifica gamma) di solito può rappresentare colori diffusi e speculari con sufficiente precisione.

È vero che la combinazione di una trama piuttosto scura con un'illuminazione molto luminosa o un'impostazione della fotocamera estremamente sovraesposta può mostrare la fascia nell'inquadratura finale, ma sarebbe un caso più insolito.

Un caso in cui probabilmente ci si vuole una texture HDR è materiali emissivi, soprattutto per le insegne al neon e le sorgenti luminose simili. La trama apparirebbe con il suo valore amplificato per apparire come una fonte di luce intensa nel gioco, quindi in tal caso un'immagine a 8 bit potrebbe facilmente mostrare il banding.

Infine, può essere utile lavorare con una precisione maggiore (ad es. Precisione a 16 bit) se possibile durante l'acquisizione e la creazione di trame, semplicemente perché ti dà più spazio per elaborare l'immagine senza causare problemi di precisione. Ad esempio, se è necessario regolare i livelli o il bilanciamento del colore, si perde un po 'di precisione; che può introdurre il banding (specialmente se lo fai più volte) quando inizi da un'immagine sorgente a 8 bit. Una sorgente a 16 bit sarebbe più resistente a tali problemi. Tuttavia, la trama finale utilizzata nel gioco verrebbe probabilmente compressa a 8 bit.


combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frameintuizione molto buona. Ma possiamo notare che la codifica gamma è proprio qui per mitigare questo punto. Se ha il problema, perché non provare un esponente gamma superiore? ciò inibirebbe l'utilizzo dei campionatori hardware sRGB.
v.

Grazie per il tuo contributo. Ma per chiarire, sono principalmente interessato a questo dal punto di vista del rendering fotorealistico, con i renderizzatori di ray trace (come mental ray, V-Ray, Arnold, ecc.) Con simulazioni di luce piena e illuminazione globale, piuttosto che per davvero motori di gioco.
Kristoffer Helander,

@KristofferHelander Buono a sapersi, ma penso che ciò che ho scritto probabilmente si applica anche al rendering offline. Ma ammetto che non ho molta esperienza diretta in quella zona.
Nathan Reed,

@NathanReed Sì, sicuramente hai fatto dei punti davvero buoni lì :)
Kristoffer Helander,

5

Mi piacerebbe invitare i lettori a leggere questo articolo sulla tecnologia di rasterizzazione del motore di Quake 2 spiegato in dettaglio , se ne ha il tempo.

Se TLDR, si prega di prestare attenzione a questa immagine: inserisci qui la descrizione dell'immagine

Quello che vediamo è il canale Albedo , è quello che vuoi codificare in 16 bit se capisco correttamente la tua domanda.
Non ho intenzione di dire " se potesse essere codificato in 256 colori per i giochi in passato, perché avremmo bisogno di 281474976710656 (che è 281 trilioni) nei nuovi giochi? " Anche se lo volessi, ma suona come il ragazzo scontroso di Pixar di Su. Più costruttivamente, se hai notato in questa immagine, tutto è allo stesso livello di illuminazione . Più in particolare, la massima intensità possibile che preserva la saturazione desiderata. (che significa nello spazio HSV, V è al massimo)

L'enfasi è fondamentale, a malapena abbiamo bisogno di qualche bit perché Albedo non ha profondità per codificare comunque. La dinamica deriva dall'ombreggiatura, ha senso lavorare f32per componenti all'interno degli shader e produrre per f16renderizzare i target. Ma conservare le trame albedo f16non è solo eccessivo, ma è un grave ingiustificato ingombro prestazionale per la nostra preziosa larghezza di banda.


Grazie per il tuo contributo. Ma per chiarire, sono principalmente interessato a questo dal punto di vista del rendering fotorealistico, con i renderizzatori di ray trace (come mental ray, V-Ray, Arnold, ecc.) Con simulazioni di luce piena e illuminazione globale, piuttosto che per davvero motori di gioco. Ho aggiornato il mio post originale.
Kristoffer Helander,
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.