Gamma en lineair

De situatie waarover we nu praten, theoretisch gesproken, is wat we ‘lineair’ zouden noemen. Elke stap in helderheid heeft dezelfde waarde. Onze ogen zien niet lineair. We vinden het echter gemakkelijker het onderscheid te zien tussen donkere grijzen dan tussen lichtere grijzen.

Omdat het mensen zijn die computers gebruiken, hebben we ze zo gemaakt dat computers meer ruimte geven aan de donkere waarden in het coördinatensysteem van de afbeelding. We noemen dit ‘gamma-coderen’, omdat dit een gamma functie toepast op de TRC of overdracht functie van een afbeelding. De TRC in dit geval is de Toon Response Curve of Toon Reproductie Curve of Transfer functie (omdat kleur beheer specialisten zichzelf haten), wat uw computer of printer vertelt hoeveel kleur bij een bepaalde waarde hoort.

../../_images/Pepper_tonecurves.png

Een van de meest voorkomende problemen die mensen met Krita’s kleurbeheer hebben is het toewijzen van de juiste kleurruimte aan de toegepaste TRC. Hierboven is de middelste Pepper de juiste, omdat de ingestelde en de toegepaste TRC dezelfde zijn. Aan de linkerzijde hebben we een Pepper met een sRGB toegepast, maar waar een lineair profiel is toegewezen, en aan de rechterzijde hebben we een Pepper waar een lineaire TRC is toegepast en waar een sRGB TRC is toegewezen. Afbeelding komt uit Pepper & Carrot

De volgende tabel laat zien dat in een lineaire ruimte veel ruimte wordt gebruikt voor de lichtere waarden in vergelijking met de standaard sRGB TRC van onze moderne computers en andere in onze meegeleverde profielen beschikbare TRCs:

../../_images/trc_gray_gradients.svg

Als u de lijn van Rec 709 TRCs kijkt, dan kunt u zien dat er flinke sprong is tussen de donkerder tinten en de lichtere tinten, terwijl als we kijken naar de Lab L* TRC of de sRGB TRC, dan lijkt het meer evenredig verdeelt. Dit is zo omdat onze ogen gevoeliger zijn voor de donkerder waarden. Dit houdt ook in dat als u niet genoeg bit diepte heeft, dan lijkt of een afbeelding met een lineaire ruimte er uit ziet alsof het lelijke kleurbanden heeft. Dit is de reden dat we bij het maken van afbeeldingen die op een scherm worden bekeken, dat we altijd zoiets als de Lab L*, sRGB of Gamma 2.2 TRCs gebruiken voor het coderen.

Echter, deze wijziging om meer ruimte te geven aan de donkere waarden geeft ingewikkeldere berekeningen bij het mengen van kleuren.

We kunnen dit zien met het volgende experiment:

../../_images/Krita_2_9_colormanagement_blending_1.png

Links: gekleurde cirkels vervaagd in een reguliere sRGB ruimte. Rechts: gekleurde cirkels vervaagd in een lineaire ruimte.

Gekleurde cirkels, half geblurred. In een gamma-gecorrigeerde omgeving, geeft dit een rare zwarte rand. In een lineaire omgeving, geeft dit ons een mooi kleurverloop.

Dit geldt ook voor de kleur uitsmerende penseel van Krita:

../../_images/Krita_2_9_colormanagement_blending_2.png

Dat klopt, het ‘modderige’ van kleuren dat een veel voorkomende klacht is van veel digitale tekenaars, is in feite, een gamma-gecorrigeerde kleurruimte dat uw kleuren modderig maakt. Als u in LAB werkte om dit te vermijden, probeer dan eens een lineaire rgb kleurruimte.

Wat gebeurt er onder de motorkap

Stel je voor datwe rood en groen willen mengen.

Ten eerste hebben we de kleur-coördinaten van rood en groen in ons kleurmodel nodig. Dat is dus…

Kleur

Rood

Groen

Blauw

Rood

1.0

0.0

0.0

Groen

0.0

1.0

0.0

We nemen dan het gemiddelde van de coördinaten uit de drie mengsels:

Rood

Mengsel1

Mengsel2

Mengsel3

Groen

Rood

1.0

0.75

0.5

0.25

0.0

Groen

0.0

0.25

0.5

0.75

1.0

Blauw

0.0

0.0

0.0

0.0

0.0

Maar om uit te vinden hoe deze kleuren op het scherm eruit zien, moeten we eerst de individuele waarden door de TRC van de kleurruimte halen waar we mee werken:

../../_images/Basicreading3trcsv2.svg

Dan vullen we de waarden in op de juiste locatie. Vergelijk deze met de waarden van de meng-tabel hierboven!

../../_images/red_green_mixes_trc.svg

En dit is waarom kleurenmengsels lichter en zachter zijn in een lineaire ruimte. Lineaire ruimte is fysiek meer correct, maar sRGB is meer efficient in qua ruimte, dit is dus waarom veel afbeeldingen een sRGB TRC ingebed hebben. In dit geval maakt dit niks uit: sRGB geeft voor dezelfde coördinaten grotendeels donkerder waarden dan een lineaire ruimte voor dezelfde coördinaten.

Verschillende TRCs geven dus verschillende mengsels tussen kleuren, in het volgende voorbeeld is elke set kleurverlopen in volgorde een mengsel dat een lineaire TRC gebruikt, een mengsel dat sRGB TRC gebruikt en een mengsel dat Lab L* TRC gebruikt.

../../_images/3trcsresult.png

U zal zich dus afvragen hoe u dit probleem oplost? Is het ergens in de instellingen te vinden? Het antwoord is dat we meerdere ICC profielen hebben die u voor dit soort werk kunt gebruiken:

  • scRGB (linear)

  • Alle ‘elle’-profielen die eindigen op ‘g10’, zoals sRGB-elle-v2-g10.icc.

Eigenlijk geeft bij alle ‘elle’-profielen, het laatste nummer de gamma aan. 1.0 is lineair, groter is gamma-gecorrigeerd en ‘srgbtrc’ is een speciale gamma correctie op het originele sRGB profiel.

Als u de browser voor kleurruimtes gebruikt, dan kunt u de TRC te weten komen door de ‘geschatte gamma’(als het 1.0 is, dan is het lineair), of in het TRC-widget in Krita 3.0, wat er precies zo uit ziet als grafieken hierboven.

Zelfs als u niet veel tekent, maar bijvoorbeeld texturen voor een videospelletjes of rendering maakt, dan kan een lineaire ruimte erg handig zijn en zal het renderen een beetje sneller gaan, omdat het de afbeeldingen niet zelf hoeft te converteren.

Het nadeel van een lineaire ruimte is natuurlijk dat het wit erg krachtig is bij het mengen met zwart, omdat in een lineaire ruimte, lichte grijzen meer ruimte krijgt. Tenslotte, terwijl lineaire ruimte fysiek correct is, en verplicht is om mee te werken als u met fysiek correcte renderers voor videospelletjes en raytracing werkt, Krita is maar een stuk gereedschap en niemand zal u kwalijk nemen als u de voorkeur geeft het donkere mengsel van een sRGB TRC.