Wie sollen wir die Helligkeit mit Quadratwurzeln fixieren?

7

Ich habe mir kürzlich dieses Video angesehen, in dem aus physikalischer Sicht gezeigt wurde, dass die meisten Arten des Umgangs mit Farben auf dem Computer falsch sind, da die Helligkeit logarithmisch und nicht linear ist. Als unerfahrener Grafikprogrammierer möchte ich wissen, wie ich mit den Informationen umgehen kann, um meine Grafiken noch besser zu machen. Ich stelle mir Raytracer vor, aber zum Rasteren, Verwischen, Sortieren und Anpassen des Lichts wie HDR, was soll ich mit diesen Informationen tun?

Ich habe wohl einige Fragen. (Entschuldigung, es ist viel)

  1. Die meisten Texturdaten werden in einem Format gespeichert, in dem die RGB-Helligkeit falsch ist, da sie nicht quadratisch verwurzelt sind (richtig?), Wenn wir sie korrekt anzeigen möchten
  2. Ist die Gaußsche Formel bei der Verwendung von Texturen technisch falsch? Wenn ja, was wäre die mathematisch korrekte Methode?
  3. Für welchen Teil dieses Problems ist der Monitor verantwortlich? Quadriert oder quadriert es die Werte, die es erhält?
  4. Für welchen Teil des Problems ist die GPU verantwortlich, wenn Sie sie bitten, an einem bestimmten Punkt eine Farbe abzutasten? Quadriert oder quadriert es die Werte, die es erhält?
  5. Wissen die Leute über diese Eigenschaft Bescheid und handeln einfach nicht danach, weil das Quadratwurzeln einer Zahl eine teure Berechnung ist? Wenn ja, haben wir eine gute Möglichkeit, das Quadrat der Zahlen von 0-1 schnell zu approximieren?
  6. Wie wenden Sie das Wissen aus diesem Video in Ihren Grafiken an?
J.Doe
quelle

Antworten:

12

Worüber das Video spricht, heißt Gammakorrektur und ist für Grafikprogrammierer ein sehr bekanntes Thema. Die ersten 30 Minuten von John Hables Vortrag über Uncharted 2-Rendering sind meine Lieblingseinführung in "Warum Grafikprogrammierer sich für Gamma interessieren sollten" sowie eine gute Einführung in das HDR-Rendering. Wenn Sie den Vortrag nicht sehen möchten (obwohl ich ihn sehr empfehlen kann), ist The Importance of Being Linear auch ein guter Artikel, und Charles Poynton hat eine Gamma-FAQ , die detailliertere Details enthält und die verwendete Terminologie erklärt.

Quadrat / Quadratwurzel ist übrigens nur eine Annäherung; Die sRGB-Gammakurve wird in der Praxis am häufigsten verwendet (siehe die dort genannten FormelnCsrgb und Clinear). Siehe auch diese verwandte Frage zu Gamma- und Farbräumen. Es ist ein bisschen komplizierter als das Video es klingen lässt. :) :)

So beantworten Sie Ihre spezifischen Fragen:

  1. Ja, die meisten Bilddaten werden im Gamma-Format gespeichert, sodass die Pixelwerte keine lineare Luminanz darstellen. Ich würde es nicht als "falsch" beschreiben, da die Gammakodierung die nützliche Eigenschaft hat, mehr Werte in die Dunkelheit zu bringen, was für die Wahrnehmungsgenauigkeit besser ist (wie im Video erwähnt). Gammakodierung ist unbedingt erforderlich, um gut aussehende Bilder mit nur 8 Bit pro RGB-Komponente zu erstellen. Wenn Sie lineare Werte speichern, benötigen Sie mehr als 12 Bit pro Komponente, um im Dunkeln eine ausreichende Genauigkeit zu erzielen.

  2. Um physikalisch korrekter zu sein, sollte ein Bild beim Verwischen in lineare Luminanz konvertiert, dann die Unschärfe (Gauß oder auf andere Weise) ausgeführt und dann wieder in den ursprünglichen Farbraum konvertiert werden.

  3. Der Monitor akzeptiert Bilddaten im Gamma-Format. Die Pixelwerte stellen also keine lineare Luminanz dar, und die Ausgangshelligkeit ist nicht linear proportional zu den Pixelwerten.

    Wenn es sich um einen qualitativ hochwertigen, kalibrierten Monitor handelt, akzeptiert er Daten in einem bestimmten Farbraum wie sRGB oder Adobe RGB und gibt die Farben basierend auf der Definition dieses Farbraums genau wieder. Wenn es ein Mist unkalibrierten Monitor ist, dann weiß , wer , was Sie bekommen, aber es wird etwas sein , ein bisschen wie sRGB.

  4. GPUs können hier für verschiedene Aufgaben konfiguriert werden. Moderne GPUs bieten Hardwareunterstützung zum automatischen Konvertieren von Werten zwischen Gamma und Linear beim Abtasten einer Textur oder beim Speichern eines Werts im Framebuffer. Der Programmierer muss dies jedoch explizit mithilfe einer API wie Direct3D oder OpenGL aktivieren.

  5. Computergrafiker kennen dieses Thema mit Sicherheit, und es ist wichtig, es richtig zu machen, wenn Sie einen realistischen Renderer für Filme, AAA-Spiele usw. erstellen. Viele "alltägliche" Apps wie Webbrowser und Bildbearbeitungsprogramme (sogar Photoshop, wie im Video erwähnt) behandeln Gamma jedoch nicht richtig.

    Es geht nicht um Rechenleistung. Vielleicht war das vor 20 Jahren ein Problem, aber heute verfügen sogar Mobiltelefone über ausreichend Rechenleistung, um Bilder zwischen Gamma und Linear umzuwandeln. Der Grund, warum Webbrowser und Bildbearbeiter dies immer noch nicht richtig verstehen, ist eine Kombination aus (a) Unwissenheit, (b) nicht zu glauben, dass Gamma wichtig genug ist, um es wert zu sein, richtig gemacht zu werden, und (c) einfach mit schlechtem Verhalten festzuhalten weil es schon lange so ist und die Benutzer es erwartet haben, flippen sie aus, wenn sich etwas ändert.

  6. Wie bereits erwähnt, müssen wir beim Erstellen eines Renderers viel über Gamma nachdenken. Die meisten Berechnungen (z. B. Beleuchtung) sollten im linearen Raum durchgeführt werden, aber die Eingabetexturen und das Ausgabebild sollten im Gammaraum sein. Möglicherweise sollten auch einige Teile des Renderns, wie z. B. das Compositing der Benutzeroberfläche, im Gammaraum stattfinden, da es den Künstlern vertrauter ist (es funktioniert eher wie das Compositing von Photoshop-Ebenen und dergleichen). Außerdem müssen wir entscheiden, ob interne Renderziele im linearen oder Gammaraum gespeichert werden sollen, da dies die Genauigkeit beeinträchtigt. Und wir müssen alle Konvertierungen richtig machen, damit die Daten an den richtigen Stellen im Rendering zwischen linear und gamma konvertiert werden.

Nathan Reed
quelle
1
Sie können Photoshop-Effekte tatsächlich so einstellen, dass sie profilbewusst sind, da sie aufgrund der Abwärtskompatibilität und der geringsten Überraschung für alte Benutzer standardmäßig nicht aktiviert sind. Wohlgemerkt, obwohl es nicht perfekt ist. Ich würde sagen, dass im Allgemeinen ALLE unsere Farbkorrektur-Workflows völlig durcheinander sind, wenn die Natur zu einem späteren Zeitpunkt angeheftet wird. Deshalb schlage ich für 5 (d) vor, weil es schwierig und zeitaufwändig ist, einen neuen umfassenden Standard wieder aufzubauen, der die alten ersetzen kann.
Joojaa