sRGB, Gammaproblematik und linearer Workflow
In CGI Foren wurde die letzten Jahre ein brisantes Thema behandelt, was jedoch genau genommen schon seit jeher ein Problem im Rendering bzw. Compositing war. Linearer Workflow heißt das „neue“ Geheimrezept und bietet reichlich Stoff für Diskussionen.
Vor dem „physikalisch korrektem Rendering“ wurde es bei vielen einfach außer Acht gelassen und heute ist es in aller Munde und es werden verschiedenste Lösungsansätze geboten. Selbst teure, marktführende, Bildbearbeitungsprogramme haben hier oft noch Schwierigkeiten und arbeiten schlicht weg falsch, bzw. ungenau. Eric Brasseur hat hierzu auf www.4p8.com einen Artikel veröffentlicht, der diese Problematik an Hand eines manipulierten Fotos, welches im sRGB Farbraum gespeichert wurde (Abb. 1), verdeutlicht 11.
Abbildung 1, Dalai Lama
Wird nun dieses Bild genommen und in einem Standard- Bildbearbeitungsprogramm um 50% verkleinert, kommt folgendes Ergebnis heraus (Abb. 2):
11 (Vgl. Brasseur, 2009, Gamma error in picture scaling)
Abbildung 2, Dalai Lama 50%
Die Farbinformation ist fast vollständig verloren, nur noch Konturen sind schwach erkennbar. Dabei wäre es in der Theorie ein leichtes, diese Phänomen zu umgehen. Wird der Gammawert des sRGB Image vor dem Verkleinern entfernt und anschließend wieder integriert, bleibt die Farbinformation korrekt erhalten (Abb. 3-4).
Abbildung 3, korrektes Resize- Verfahren
Abbildung 4, Dalai Lama 50% Resize ohne Gamma
Gregory Chalenko beschreibt auf www.vfxpedia.com ein weiteres Problem der Gamma behafteten Bilder, welches auch mit jedem Bildbearbeitungsprogramm nach vollzogen werden kann. Und zwar geht es dabei, um das korrekte überblenden zweier gerenderter Channel per Alpha-Blende, welche dem Original Beauty entsprechen soll (Abb. 5) 12.
Abbildung 5, Beauty Rendering einer Farbüberblendung
Werden nun die beiden Bildelemente (Abb. 6-7), als 8 Bit sRGB gespeichert und anschließend im Compositing überblendet, findet eine Farbverfälschung im Verlauf von Rot nach Grün statt (Abb. 8).
nbsp;
Abbildung 6, green BG sRGB
Abbildung 7, red Falloff sRGB
Abbildung 8, sRGB Blende
Auch hier müssen die Images korrigiert werden, das heißt der Gamma entfernt, überblendet und anschließend wieder mit dem sRGB Farbraum belegt werden (Abb. 9).
Abbildung 9, korrekte Überblendung
12 (Vgl. Chalenko, 2009, Working with Gamma)
Die gleiche Problematik taucht auch beim Post Effekt Motion Blur auf. Seit mental ray® 3.6 wird dies per OutputShader angeboten und kann somit direkt in den Beauty eingerechnet werden. Zu diesem Effekt werden intern Motion Vektoren (siehe: 4.1.1 Effekt-, Matte-/ Masken- Channels) berechnet und anschließend die Weichzeichnung daraus erstellt. Wird dies erst im Compositing angewendet, so muss der Motion Vector Channel angelegt und gespeichert werden. Motion Blur kann im Compositing auch auf animierte Ebenen angewendet werden, was in der 2D Animation sehr beliebt ist. Bei dem Render Effekt, wie auch beim Compositing Effekt, entsteht eine Weichzeichnung verschiedenster Objekte und Farben, wodurch aufgrund des nonlinearen Farbraums Verfälschungen auftreten (Abb. 10) 13.
Abbildung 10, Motion Blur Artefakte
13 (Vgl. mental ray – Production Shader Library, 2007, S. 10 ff)
“Color correcting or compositing images that are representing light with a nonlinear encoding can easily produce undesirable, unpredictable or incorrect results. In general, always linearize your images before manipulating or combining them.” 14
Für ein korrektes und sauberes Arbeiten ist es also unabdingbar, sich steht‘s im linearen Farbraum zu bewegen. Sind Channel also nicht im linearen Farbraum und mit einer Gammakurve belegt, so muss der Gammawert entfernt und erst am Ende der Pipeline wieder angewandt werden. Wird mit 32 Bit Floating Point Material gearbeitet, so entfällt die anfängliche Gammakorrektur.
Compositing Tools bieten für diese Korrektur meist eigene Plug-ins an, jedoch kann dies auch per Regelung des Gammawertes im Bild selbst normalisiert werden. Der Gammawert an sich lässt sich in jedem Programm bearbeiten. Dazu muss der Ursprungswert bekannt sein, in der Regel ist dieser 2.2 bzw. vereinzelt auch 1.8. Soll nun das Bild in den linearen Farbraum konvertiert werden, geschieht dies mit:
0= |1/Gamma
Bei dieser Art der Bearbeitung wird zwar absolut korrekt gearbeitet, jedoch würde dadurch die Displaydarstellung nicht mehr mit dem Endergebnis, nach Anwendung eines Gammawertes, übereinstimmen. Das Bild wird im Viewport zu dunkel dargestellt und macht eine genaue Bearbeitung und Farbkorrektur unmöglich.
Darauf sind jedoch professionelle Compositing Tools vorbereitet und bieten verschiedene Möglichkeiten an, dieses Problem zu beheben. Es können sogenannte Display LUTs (Lookup Table) erstellt, geladen und angewandt werden (Abb. 11).
14 (Brinkmann, 2008, S. 428)
Abbildung 11, Display LUT
Der Wert kann auch im System festgelegt werden, oder aber es wird darauf geachtet, dass immer ein Gammakorrektur- Filter zwischen Bearbeitung und Display geschaltet ist.
Die Gammaproblematik muss jedoch schon vor dem Compositing berücksichtigt werden, da der 3D Renderer genauso im linearen Farbraum arbeitet. Werden also Image-Texturen benützt, so würde also der Renderer Bildmaterial, welches in den meisten Fällen einen nonlinearen Farbraum besitzt, verarbeiten. Wird bei diesem Bildmaterial keine Gammakorrektur vorgenommen, wirkt das Rendering Ergebnis blass und ausgewaschen (Abb. 12).
Abbildung 12, sRGB Texture vs. linear Texture
Besonders wichtig wird es wenn physikalische Korrektheit angestrebt wird, oder Farben an original 2D Material angeglichen werden muss (Abb. 13).
Abbildung 13, 2D – 3D Farbtreue
Eigens für diese Aufgabe entwickelt wurde hier für mental ray® der Shader mip_gamma_gain. Welcher jedoch in ähnlicher Art und Weise in den meisten Applikationen wie z.B. Autodesk 3Ds Max und Autodesk Softimage standardmäßig integriert ist. Er dient also eher für das standalone mental ray rendering, oder zur plattformunabhängigen phenomena Entwicklung 15.
declare shader “mip_gamma_gain” (
color “input”,
scalar “gamma” default 1.0,
scalar “gain” default 1.0,
boolean “reverse” default off,
)
apply texture, environment, lens
version 1
end declare
Wie im apply Statement ersichtlich kann dieser Shader vor Texturen / Farben angewandt werden, für den Environment, oder als Lens Shader was sich global bemerkbar macht.
“If reverse is off, the shader takes the input, multiplies it with the gain and then applies a gamma correction of gamma to the color.
If reverse is on, the shader takes the input, applies a reverse gamma correction of gamma to the color, and then divides it with the gain; i.e. the exact inverse of the operation for when reverse is off.
The shader can also be used as a simple gamma lens shader, in which case the input is not used, the eye ray color is used instead.”16
Der Shader arbeitet also nach dem gleichen Prinzip, wie die Gammakorrektur im Compositing. Er kann eine Textur laden, den Gammawert entfernen und ein Image im linearen Farbraum ausgeben.
Autodesk 3Ds Max bietet hierfür einen Dialog an, der diese Korrektur auf alles anwendet (Abb. 14).
15 (Vgl. mental ray – Production Shader Library, 2007, S. 23)
16 (mental ray – Production Shader Library, 2007, S. 23)
Abbildung 14, 3Ds Max Gammakorrektur
Autodesk Softimage stellt hier schon mehr Optionen zur Verfügung, wodurch etwas mehr Freiraum entsteht. Hier kann auch das Displaygamma global eingestellt werden, jedoch ist es hier zusätzlich möglich, jede Image Textur separat zu bearbeiten (Abb. 15). Dies hat den Vorteil, dass hier Texturen im linearen, sowie nonlinearen Farbraum in einer Szene genutzt werden können.
Abbildung 15, Softimage Display und Textur Gammakorrektur
Aus dieser Erkenntnis heraus ergibt sich der optimale, lineare Workflow in Bezug auf das 3D Rendering und Compositing wie folgt (Abb. 16).
Abbildung 16, Linearer Workflow
Fotos und ähnliches Bildmaterial sind in der Regel mit einem Gamma behafteten Farbraum belegt, daher ist es ratsam diesen auch zu belassen. Nicht in allen Fällen wird das Bild zuvor in einer 2D Applikation bearbeitet, daher kann so vorgebeugt werden, dass Mischungen der Farbräume in unterschiedlichen Bildern entstehen. In der 3D Applikation wird nun die 2D Textur gammakorrigiert und linear weiter gearbeitet. Beim anschließenden Rendering wird nun das Ergebnis auch linear ausgegeben. Dies stellt sicher, dass im Compositing farbgetreu weiter gearbeitet werden kann und lässt den zusätzlichen Schritt der abermaligen Gammakorrektur aus. Erst beim finalen heraus spielen der Composite wird nun wieder ein Farbprofil mit einem Gammawert vergeben.
Quellen:
Brasseur, Eric (2009): Gamma error in picture scaling:
http://www.4p8.com/eric.brasseur/gamma.html#introduction
Chalenko, Gregory (2009): Working with Gamma:
http://www.vfxpedia.com/index.php?title=Working_with_Gamma
mental ray – Production Shader Library (2007):
http://www.mentalimages.com/fileadmin/user_upload/PDF/production.pdf
Brinkmann, Ron (2008): The Art and Science of Digital Compositing. Burlington: Elsevier
Bildquellen:
Abildung 1,2,4: http://www.4p8.com/eric.brasseur/gamma.html#introduction