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.
quelle
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.
quelle
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frame
sehr 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.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:
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,
f32
innerhalb von Shadern pro Komponente zu arbeiten und auszugeben,f16
um Ziele zu rendern. Das Speichern von Albedotexturenf16
ist jedoch nicht nur übertrieben, sondern auch ein schwerwiegendes, ungerechtfertigtes Leistungsproblem für unsere wertvolle Bandbreite.quelle