Warum sollten Bump-, Normal- und Displacement-Karten nicht gammakorrigiert werden?

9

Also versuche ich, mich aus einer ziemlich technischen Sicht darum zu kümmern.

Wenn Sie Ihrem Shader eine Bump-, Normal- oder Verschiebungskarte hinzufügen, sollten diese nicht gammakorrigiert werden. Aber diffuse Texturen sollten sein. Aber warum?

Wenn Sie eine Datei in 8-Bit (oder 16-Bit-Ganzzahl) mit einem Format wie JPEG, PNG oder TIFF speichern, wird das Gamma von 0,4545 (1 / 2,2) eingebrannt. Eine Kamera erfasst also das Licht aus der realen Welt (das ist linear). Wenn Sie das Foto als JPEG speichern, wird ein Gammawert von 1 / 2,2 hinzugefügt, um die Informationen in 8 Bit zu komprimieren. Wenn Sie dann das Bild auf einem Monitor anzeigen, der ein Gamma von 2,2 hinzufügt, wird die Luminanz wieder linear.

Wenn Sie also diffuse Texturen (wie ein Foto) verwenden, müssen Sie dieses 1 / 2,2-Gamma "entfernen", um es linear zu machen (Linearisierung genannt). Jetzt sieht die Textur dunkler aus, aber diese Werte sind vom mathematischen Standpunkt aus korrekt, so dass der Renderer dies tut Machen Sie die richtigen Berechnungen. Randnotiz: Die Software verwendete ein Anzeige-Gamma von 2,2, um sicherzustellen, dass die Texturen korrekt aussehen. Nur für die interne Berechnung werden sie linearisiert. Wenn ich jedoch in Photoshop eine Bump-Map erstelle und diese als JPG oder PNG speichere, wird auch dieses 1 / 2,2-Gamma in dieses Bild eingebrannt. Warum muss diese Bump-Map nicht auch linearisiert werden?

Wenn ich eine Bump-Map in 3ds Max mit einem Eingangsgamma von 2,2 lade, genau wie dies bei einer diffusen Textur der Fall wäre, sieht das diffuse richtig aus, aber der Bump sieht falsch aus. Daher muss ich das Eingangsgamma für den Bump in der Reihenfolge auf 1,0 setzen damit es richtig aussieht, aber wie gesagt: warum ist in beiden Bilddateien das 1 / 2,2-Gamma eingebrannt, oder?

Kristoffer Helander
quelle

Antworten:

5

Die Tatsache, dass ein Foto im Gammaraum gespeichert ist, hat nichts mit PNG oder JPEG zu tun, sondern mit der Tatsache, dass es sich um ein Foto handelt.

Die Kamera erkennt eine Intensität von 50%, speichert sie jedoch als 187 statt als 127, da dies effizienter ist, um die für das menschliche Auge wichtigen Farbinformationen beizubehalten, wenn Sie nur 256 verschiedene mögliche Werte haben. Und Photoshop auch, wenn Sie es sagen.

Für Normalen oder Verschiebungskarten haben Sie diese Notwendigkeit nicht, daher gibt es keinen Grund, Gammaraum für sie zu verwenden (die Verwendung von Gamma für sie wäre tatsächlich ein Fehler, da dies die Verteilung der Präzision beeinflussen würde). Wenn Sie also eine normale Textur oder eine Verschiebungstextur dekodieren, müssen Sie kein Gamma anwenden.

Wenn die normale Karte jedoch in einem anderen Raum codiert ist, wie dies beispielsweise bei einem G-Puffer der Fall sein kann, müssen Sie die entsprechende Korrektur anwenden.

Julien Guertault
quelle
Wie können Sie Photoshop anweisen, ein Bild mit eingebranntem Gamma zu speichern, wie oben angegeben: "Und Photoshop auch, wenn Sie es sagen."
Kristoffer Helander
Dies erklärt das "Warum" überhaupt nicht. Es wiederholt nur das "Was".
user1118321
@ user1118321: Ich glaube schon. Ich habe die Betonung hinzugefügt, um es klarer zu machen.
Julien Guertault
Nun, stimmt, aber es erklärt immer noch nicht wirklich warum. Ich gebe zu, dass ich das gleiche Problem habe. Ich erwähne nur den Mangel an Nutzen oder Schaden, der durch eine solche Komprimierung verursacht wird. Es gibt keine Notwendigkeit, aber das Warum ist, dass die Daten von Bildern aufgrund der menschlichen Sinne eigenartig sind, während unser räumliches Denken linearer Natur ist (was die 3D-App betrifft)
joojaa
3

JPG, PNG oder andere 8-Bit-Bildformate haben an sich kein 1 / 2,2-Gamma. Sie speichern nur Werte von 0-255. Wie diese Daten interpretiert werden, hängt von der Software ab, die diese Dateien liest und schreibt. Die interessante Tatsache ist, dass die meisten Bildbearbeitungsprogramme standardmäßig Gammafarben verwenden. Alle Pinsel, Effekte, Filter und sogar der Farbwähler arbeiten im Gammaraum. Schauen Sie sich einfach die Graustufen des Farbwählers in Photoshop an. Sie folgen keiner linearen Verteilung.

Die Folge ist, dass Photoshop beim Öffnen oder Speichern eines Bildes (standardmäßig) keine Konvertierungen zwischen Gamma und linearem Farbraum durchführt, sondern nur beim Anzeigen. Das bedeutet, dass Sie damit genauso einfach lineare Daten wie eine Höhenkarte erstellen oder bearbeiten können wie Fotos. Die Bump Map sieht beim Laden mit Gammakorrektur nicht richtig aus, da sie nicht damit gespeichert wurde.

Quinchilion
quelle
Hier ist ein YouTube-Video, in dem auch erklärt wird, dass der in einem Bild gespeicherte Wert 1 / 2,2 ist (aber er vereinfacht ihn und sagt nur, dass es sich um die Quadratwurzel handelt, es gibt einen Haftungsausschluss dafür im Text.) Computerfarbe ist defekt - MinutePhysics- Link
Kristoffer Helander
@KristofferHelander Ja, aber er sagt, dass nur die Kamera die Werte als Quadratwurzeln speichert und nur die Anzeige sie zurückquadratiert. Bildbearbeitungssoftware wie Photoshop öffnet und speichert das Bild ohne Konvertierungen. Dies führt zu Artefakten, die im Video angezeigt werden, wenn Sie versuchen, Farben zu mischen.
Quinchilion
Korrigieren Sie mich, wenn ich falsch liege. Wenn ich in Photoshop eine Verlaufsrampe zeichne, die für mich auf dem Bildschirm linear aussieht, sind die Werte in dieser Rampe tatsächlich linear. In Photoshop wird jedoch ein Anzeige-Gamma von 1 / 2,2 hinzugefügt, da der Monitor ein Gamma von 2,2 hinzufügt. Daher sind die Pixelwerte der Bilder linear und sehen auch linear aus. Dieses 1 / 2,2-Gamma ist jedoch nur ein Betrachtungs-Gamma, das Photoshop zum Anzeigen des Bildes verwendet. Es wird nicht in das Bild eingebrannt, und daher muss in der 3D-Software keine Gammakorrektur des Bildes vorgenommen werden (verwenden Sie Gamma 1.0) sind die werte schon linear?
Kristoffer Helander
@KristofferHelander goo.gl/yqkeUP Der untere Farbverlauf repräsentiert die physikalische Helligkeit. Wenn Photoshop ein Gamma von 1 / 2,2 anwendet, um entweder den Farbverlauf zu zeichnen oder das Bild anzuzeigen, wird der untere Farbverlauf angezeigt. Stattdessen sehen Sie die oberste, die zufällig linear erscheint, aber nicht linear ist. Es würde auch nicht zum Anzeigen von Fotos funktionieren. Die Kamera hat beim Speichern des Fotos 1 / 2.2 angewendet, dann hat Photoshop ein weiteres 1 / 2.2 angewendet, aber das Display fügt nur einmal ein Gamma von 2,2 hinzu. Das würde nicht richtig aussehen.
Quinchilion
Wenn ich ein Dokument in Photoshop zur Hälfte rot (255,0,0) und zur anderen Hälfte grün (0,255,0) fülle und dann eine Gaußsche Unschärfe verwende, wird der resultierende Farbverlauf eher bräunlich als gelb in der Mitte, wie gezeigt In diesem Video habe ich gepostet. Warum ist das so? Wenn die Pixel im Bild linear sind, warum wird dann die Mathematik durcheinander gebracht? Ich verstehe nicht, wie eine in Photoshop gemalte Verschiebungskarte linear ist und sich gut zum Rendern eignet, aber gleichzeitig wird das Verwischen von Pixeln mit dem falschen Gamma vermasselt und die Farben werden zu dunkel und bräunlich.
Kristoffer Helander
3

Einführung

Es hängt davon ab, wie Sie die Karte erstellen! Beachten Sie Folgendes und lassen Sie es eine Weile einwirken, bevor Sie fortfahren:

  1. Das Bild wird mit einer Gammakorrektur zum Nutzen Ihrer Augen angezeigt
  2. Die Daten sind immer noch nur Daten. Die Gammakorrektur gilt für den Anzeigeteil und nicht für den Datenteil.

Jetzt ist es ziemlich schwierig, eine Bump Map mit einem Farbauftrag zu zeichnen. Weil es schwer zu sehen ist, selbst wenn Sie richtig linear waren. Am Ende verwenden Sie also Dinge wie das Betrachten von Werten. Hier ist der Haken:

  • Wenn Sie entscheiden, dass 128 in der Mitte Ihrer Intensität liegt, dann ist das Realität. Da ist das, was Sie in den Datenstrom kodieren. Die Daten sind so, wie Sie sie interpretieren, da sie nicht für das menschliche Auge und den Monitor bestimmt sind. Wen interessiert es, wie der Monitor die Werte anzeigt, wie Sie die Daten interpretieren, in denen sie bearbeitet werden?

Erstellen der Stoß- / Verschiebungskarte

Ok, jetzt habe ich beschrieben, dass die Daten der Interpretation entsprechen. Aber warum sollten Sie die Daten als linear interpretieren? Denn dann können Sie Ihr Seitenprofil besser gestalten. Sehen Sie, was Sie tun können, indem Sie sich 100% Deckkraft Ihres Pinsels als die Zielhöhe vorstellen, auf die Sie schnitzen oder schichten möchten. Sie können dann das Kurvenwerkzeug verwenden, um die Form Ihres Stempelpinsels zu entwerfen (da Sie der Meinung sind, dass die Daten linear sind).

Geben Sie hier die Bildbeschreibung ein

Bild 1 : Ein Saugnapfstempel.

Wenn Sie so etwas tun, ist Ihr Bild linear, trotz allem, was Ihnen jeder sagt. Sie haben beschlossen, die Bildregeln zu verwerfen, die etwas anderes aussagen. Und deshalb ist das Bild linear . Der Autor wählt, dass es linear ist, damit es einfacher zu bearbeiten ist.

Geben Sie hier die Bildbeschreibung ein

Bild 2 : Das gleiche Bild wird linear verschoben und interpretiert (Hinweis: Ich habe die Höhe etwas skaliert, um sie an meine Standard-BB-Größe anzupassen) und funktioniert wie beabsichtigt.

Technisch linear ist besser.

Eine synthetische Karte hat keinen Vorteil darin, bestimmte Werte auf Kosten anderer zu komprimieren. Linear ist von Natur aus besser, weil die Ausbreitung Ihrer Beule auf diese Weise besser ist. Aus diesem Grund würden Sie Ressourcen verschwenden, die sie gammakorrigiert codieren.

Zweitens muss ein Bild nicht angeben, in welchem ​​Farbraum es sich befindet. Es ist nur so, dass Bildeditoren davon ausgehen, dass es sRGB-codiert ist. Sie haben keinen Grund, dieselbe Interpretation vorzunehmen, keine Information bedeutet nur: "Niemand hat sich die Mühe gemacht, aufzuschreiben, was er dachte". Vielleicht sollte der Punkt gemacht werden, dass Sie ihn linear markieren sollten. Aber hier ist das Problem ... Ihr Computer verfügt nicht über ein leicht zugängliches lineares Profil.

Was ist mit Photoshop und Unschärfe?

Hier wird es schwierig. Photoshop versucht ziemlich viel zu tun, um sicherzustellen, dass Sie nichts über dieses Zeug wissen müssen. Und hier schießen Sie sich in den Fuß. Se Photoshop ist nicht zum Erstellen von Texturen gedacht, sondern zum Bearbeiten von Bildern, nicht von zufälligen Daten. Da die Unschärfe eines Bildes linear und nichtlinear unterschiedlich ist, funktioniert es nicht mit falschen Daten.

Sie können jedoch eines von zwei Dingen tun, um dies zu beheben:

  1. Deaktivieren Sie die Gammakorrektur der Unschärfe
  2. Stellen Sie Ihren Arbeitsbereich auf ein lineares Profil ein

Fazit

Der Grund, warum Sie es schwer haben, ist

  1. Sie wissen nicht, was andere Leute denken, Sie wissen einfach nicht, ob sie gammakorrigiert werden sollen oder nicht.
  2. dass Sie eine Anwendung verwenden, die Bilder als Bilder behandelt

Punkt eins ist besonders verwirrend. Ich weiß nur, dass ALLE meine Bump- und Verschiebungskarten tatsächlich linear sind. Aber ich kann nicht wissen, was Ihre Karten sind. Die Chancen stehen gut, dass sie linear sind, da fast allgemein verstanden wird, dass die Daten linear sind. Sogar Leute, die nichts über Gamma wissen, neigen dazu, es aus irgendeinem Grund linear für Unebenheiten / Verschiebungen zu machen (weil es einfach ist und Sie denken, dass Bilder so sind, bis Ihnen jemand etwas anderes sagt).

joojaa
quelle
Vielen Dank für Ihre Eingabe - wow! :) Ich werde mir das ansehen, wenn ich mehr Freizeit habe. Ich melde mich bei Ihnen, danke!
Kristoffer Helander
Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonWahrscheinlich, weil diese Karten generiert werden.
Tara
3

Wenn Ihre Stoß- oder Verschiebungskarte mit dieser 0,45-Gammakorrektur gespeichert wird, ist dies tatsächlich falsch. Diese Karten enthalten eher geometrische Informationen als Farben und sollten daher einfach linear codiert werden.

Ein verwandtes Problem und eine Lösung für Adobe Photoshop finden Sie in diesem Dia-Deck: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8

IneQuation
quelle
Dies gilt insbesondere für eine normale Karte, bei der Sie eine Vektorlänge von 1 erwarten.
PaulHK