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.
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:
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:
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:
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:
Dan vullen we de waarden in op de juiste locatie. Vergelijk deze met de waarden van de meng-tabel hierboven!
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.
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.