Linearer Workflow

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.

 
gamma_dalai_lama

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)

 
 
gamma_dalai_lama_50

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).
 
gamma-flow

Abbildung 3, korrektes Resize- Verfahren
 
 
gamma_dalai_lama_gray_50cor

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.
 
Beauty

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;

BG

Abbildung 6, green BG sRGB
 
 

BG

Abbildung 7, red Falloff sRGB
 
 

gammacomp

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).
 

removeGamma

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.
 
 

motionblur-gamma

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)

 
 

Fusion-LUT

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).

sRGB_To_LIN

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).

sRGB_To_LIN2

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)

 

max-gamma

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.
 

softimage-gamma

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).
 

linearer_Workflow

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.