Lineare 16-Bit-Halb-Float-HDR-Bilder als (diffuse / Albedo-) Texturen?

10

Also habe ich eine Weile darüber nachgedacht und versucht, nach einer Antwort zu suchen, aber ohne Erfolg.

Wenn alle Ihre Texturen 8-Bit-LDR-Bilder wie JPEGs sind, kann dies beim Rendern möglicherweise nicht zu Konflikten mit der Belichtungssteuerung / Tonzuordnung führen. Dies ist der Fall, wenn Sie die Rendering-Belichtung Ihres Bildes anpassen, um Details in den Texturen freizulegen, die nicht wirklich vorhanden sind, da sie durch den niedrigen Dynamikbereich herausgeklemmt wurden. Wäre es also nicht sinnvoll, die Texturen auch als HDR-Bilder, die als .exr gespeichert sind, im linearen Farbraum mit 16-Bit-Halb-Float zu haben, um eine gute Farbdarstellung zu erhalten (32-Bit-Voll-Float könnte übertrieben sein?). Detailliertere und korrektere Farbwerte könnten sich auch auf den GI auswirken und wie wird der Farbverlauf berechnet?

Oder ist es einfach nicht notwendig, da das Endergebnis des gewünschten Renderings wahrscheinlich dem Belichtungsgrad der Textur entspricht, als sie auf irgendeine Weise fotografiert wurde? Und da die Kamera meistens in 12-14 Bit aufnimmt, müssten Sie die Textur mehrfach belichten und all diese zusätzlichen Arbeiten ausführen, um sie alle zu einem HDRI zusammenzufügen.

Bearbeiten: Zur Verdeutlichung interessiert mich dies hauptsächlich aus fotorealistischer Sicht, mit Ray-Trace-Renderern (wie Mental Ray, V-Ray, Arnold usw.) mit vollständigen Lichtsimulationen und globaler Beleuchtung, anstatt für Echtzeit-Game-Engines.

Kristoffer Helander
quelle

Antworten:

8

In der Filmproduktion verwenden wir fast nie 8-Bit-Texturen für Farbe / Albedo, aufgrund von Streifenbildung usw. (JPEG ist besonders problematisch, da es sich laut Spezifikation eher um sRGB als um lineare Werte handelt.) Wir verwenden entweder 'half' (16-Bit-Float) ) oder 16-Bit-Ganzzahlwerte ohne Vorzeichen für Farb- / Albedotexturen.

Larry Gritz
quelle
1
Wow, danke @LarryGritz! Wenn Sie für Sony Pictures Imageworks arbeiten, nehme ich Sie als sehr zuverlässige Quelle! :) Aber wie erfasst man diese Texturen? Die meisten Kameras nehmen nur in 14-Bit-RAW-Dateien auf. Haben Sie spezielle Kameras mit 16-Bit-Linearsensoren? Oder machen Sie Mehrfachbelichtungen für Texturen, genau wie für HDRI-Bilder? Oder erfassen Sie einfach mit 14-Bit-Kamera RAW und speichern es als "16-Bit"? Ow, und welches Dateiformat verwenden Sie, .tiff (.tx, .tex) oder .exr? Nochmals vielen Dank für Ihre Eingabe! :)
Kristoffer Helander
1
@KristofferHelander: Die Konvertierung von 14-Bit-Erfassung in eine 16-Bit-Darstellung des 0-1-Bereichs kann leicht durch Multiplikation erreicht werden. Aber die meisten unserer Texturen werden gemalt, nicht fotografiert - manchmal werden sie direkt in einem 16-Bit-Format gemalt, manchmal werden sie in sRGB gemalt und dann in 16 Bit konvertiert, wenn sie zur Verwendung als Textur "linearisiert" werden. Für Albedotexturen ist kein HDR erforderlich.
Larry Gritz
1
@KristofferHelander: Für Albedotexturen verwenden wir normalerweise TIFF mit 16-Bit-Integer-Daten (was wir .tx nennen, ist nur TIFF-Format, aber gekachelt und mit MIP-Map-Multiresolution, die als mehrere Teilbilder in der TIFF-Datei gespeichert sind). Für echte HDR-Daten wie Umgebungserfassungen verwenden wir OpenEXR. Die Renderer-Ausgabe ist in der Regel auch OpenEXR.
Larry Gritz
8

Ja, in einigen extremen Fällen können bei HDR-Beleuchtung und Tonemapping Streifenprobleme in Farbtexturen auftreten. In diesen Fällen kann eine höhere Bittiefe für die Texturen nützlich sein. Nach meiner Erfahrung weisen die meisten Materialien und normalen Beleuchtungssituationen dieses Problem jedoch nicht auf, und die meisten Texturen in einem typischen Spiel sind in 8-Bit-Form (oder sogar weniger - Spiele verwenden häufig die BC1-Komprimierung, wodurch sie auf 5- reduziert werden). 6-5-Bit).

Menschen verwenden HDR-Rendering-Ziele, da eine einzelne Szene sehr unterschiedliche Helligkeitsstufen enthalten kann, z. B. ein dunkler Raum, in dem Sie durch ein Fenster auf eine sonnenbeschienene Außenseite sehen können, die 10 bis 100 Mal heller als der Raum ist. Farbtexturen haben jedoch keinen so großen Größenbereich. Sie stellen Reflexionsgrade dar, die von Natur aus im Bereich [0, 1] liegen, und in der Praxis sind nur wenige alltägliche Materialien niedriger als etwa 2–5% Reflexionsgrad. Daher kann ein 8-Bit-Bild (mit Gammakodierung) normalerweise diffuse und spiegelnde Farben mit ausreichender Genauigkeit darstellen.

Es ist wahr, dass die Kombination einer ziemlich dunklen Textur mit sehr hellem Licht oder einer extrem überbelichteten Kameraeinstellung Streifen im letzten Bild zeigen kann, aber das wäre ein ungewöhnlicherer Fall.

Ein Fall , wo Sie wahrscheinlich würde eine HDR - Textur will emittierende Materialien, insbesondere für Leuchtreklamen und ähnliche Lichtquellen. Die Textur wird mit einem erhöhten Wert angezeigt, der als helle Lichtquelle im Spiel angezeigt wird. In diesem Fall kann ein 8-Bit-Bild leicht Streifenbildung aufweisen.

Schließlich kann es immer noch nützlich sein, beim Erfassen und Erstellen von Texturen möglichst mit höherer Genauigkeit (z. B. 16-Bit-Genauigkeit) zu arbeiten, einfach weil Sie mehr Spielraum für die Verarbeitung des Bildes haben, ohne Präzisionsprobleme zu verursachen. Wenn Sie beispielsweise die Pegel oder die Farbbalance anpassen müssen, verlieren Sie etwas an Präzision. Dies kann zu Streifenbildung führen (insbesondere, wenn Sie dies mehrmals tun), wenn Sie von einem 8-Bit-Quellbild ausgehen. Eine 16-Bit-Quelle wäre für solche Probleme widerstandsfähiger. Die endgültige Textur, die im Spiel verwendet wird, wird jedoch wahrscheinlich immer noch auf 8 Bit komprimiert.

Nathan Reed
quelle
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final framesehr guter Einblick. Wir können jedoch feststellen, dass die Gammakodierung genau hier ist, um diesen Punkt zu mildern. Wenn er das Problem hat, warum nicht einen überlegenen Gamma-Exponenten ausprobieren? Dies würde jedoch die Verwendung von Hardware-sRGB-Samplern verhindern.
v.oddou
Danke für deinen Beitrag. Aber um das zu verdeutlichen, interessiert mich dies hauptsächlich aus fotorealistischer Sicht, mit Ray-Trace-Renderern (wie Mental Ray, V-Ray, Arnold usw.) mit vollständigen Lichtsimulationen und globaler Beleuchtung, anstatt real -time Game Engines.
Kristoffer Helander
@KristofferHelander Gut zu wissen, aber ich denke, was ich geschrieben habe, gilt wahrscheinlich genauso gut für das Offline-Rendering. Aber ich gebe zu, dass ich in diesem Bereich nicht viel direkte Erfahrung habe.
Nathan Reed
@ NathanReed Ja, Sie haben dort mit Sicherheit einige wirklich gute Punkte gemacht :)
Kristoffer Helander
5

Ich möchte die Leser einladen, diesen Artikel über die Quake 2-Engine-Rasterisierungstechnologie zu lesen , der ausführlich erklärt wird , wenn sie Zeit haben.

Wenn TLDR, beachten Sie bitte dieses Bild: Geben Sie hier die Bildbeschreibung ein

Was wir sehen, ist der Albedo- Kanal, den Sie in 16 Bit codieren möchten, wenn ich Ihre Frage richtig verstehe.
Ich werde nicht sagen " Wenn es in der Vergangenheit für Spiele in 256 Farben codiert werden könnte, warum brauchen wir dann 281474976710656 (das sind 281 Billionen) in neuen Spielen? ", Auch wenn ich möchte, aber das klingt wie Pixars mürrischer Typ von Oben. Konstruktiver, wenn Sie in diesem Bild festgestellt haben, ist alles auf dem gleichen Beleuchtungsniveau . Insbesondere die maximal mögliche Intensität, die die gewünschte Sättigung bewahrt. (was bedeutet, dass im HSV-Raum V maximal ist)

Die Betonung ist der Schlüssel, wir brauchen kaum Bits, weil Albedo sowieso keine Tiefe zum Codieren hat. Die Dynamik kommt von der Schattierung, es ist sinnvoll, f32innerhalb von Shadern pro Komponente zu arbeiten und auszugeben, f16um Ziele zu rendern. Das Speichern von Albedotexturen f16ist jedoch nicht nur übertrieben, sondern auch ein schwerwiegendes, ungerechtfertigtes Leistungsproblem für unsere wertvolle Bandbreite.

v.oddou
quelle
Danke für deinen Beitrag. Aber um das zu verdeutlichen, interessiert mich dies hauptsächlich aus fotorealistischer Sicht, mit Ray-Trace-Renderern (wie Mental Ray, V-Ray, Arnold usw.) mit vollständigen Lichtsimulationen und globaler Beleuchtung, anstatt real -time Game Engines. Ich habe meinen ursprünglichen Beitrag aktualisiert.
Kristoffer Helander