GIMP 2.10 Default vs Legacy

Hi, I’m a GIMP 2.8 user, and I’m still testing out 2.10 and I’ve discovered these Default vs Legacy options for layers and brushes. My question is, is Legacy mode here to stay? Simply cause I need it in my technique, I use Gimp for painting and I cannot do it as well in Default mode when it comes to certain shading aspects.

I want to know is the Legacy mode currently just for the transitioning period, for the sake of old Gimp files to be converted to a new form, and there will be only Default in future versions? Or is it an option that remains? I was bit confused with the whole thing, cause it’s kinda absent in 2.8 so I don’t know how this all works. And cause the whole thing is titled ‘Legacy’ I thought it may be no more in the newer editions. I wouldn’t like for it to go away.

Thanx.

I don’t think anyone really knows the answer to this question, though initially the idea was that the Legacy options would disappear.

GIMP-2.10 will be around for a long time, so this gives plenty of time to explore new ways to accomplish given tasks.

There are various ways to accomplish the same thing as could be done using various Legacy blend modes, though maybe not for everything. If you can provide a very simple, small example of where/how you use Legacy blend mode, I can try to see if it’s possible to recreate the same result not using Legacy blend modes.

By “very simple, small example” I mean something like a 400px by 400px XCF file (no larger!) with maybe one or two or three layers, each layer either a solid color or having only one or two criss-crossing brush strokes, with some indication of what the actual color of each brush stroke is if they happen to not be completely opaque - that is for less-than-opaque brush strokes also include a small 100% opacity “color swatch” to show the colors used to paint the brush strokes.

1 Like

example1.xcf (40.5 KB)

Well, it’s nothing too complicated, basically I’m using a Paintbrush Tool with lowered opacity to build up a volume slowly up. I always use it on separate layers. It’s basically shading like you would with a graphite, and then comes coloring and adding of light, later on.

But, for the example above, just change the layer mode from Legacy to Default and you’ll see a difference in quality. It gets a little bit indexed, and less smooth, like it looses quality, and you can never build up to the full black if you’re using brush with low opacity in Default mode.

Here is an image of it as well:

I hope I’m making sense, please tell me if I need to be more clear. Because of the size, you’ll have to zoom in a bit to see the difference :).

Also, an example of differences of Color to Alpha in Legacy and Default. The render example is black and white. So Multiply of that layer would be equivalent to the look when we’d apply Color to Alpha and remove white. That’s not the case with Default, it just reduces way more of the white, and of the black as well. So you actually lose value of one by removing other. So in that sense I wouldn’t be able to use Multiply layer for shading anymore (shading with black and white, but only preserving the shadow) , because when I remove white from it later on, I would have different results than that what I was looking at while the layer was just in Multiply mode, but had white.

Red Background
coloralphaa

White Background
coloralphab

This is not my work, just an example from the internet. I hope I make sense. But basically, if Legacy would be removed, I would just lose something that was no problem at all up until now. And as I’ve said, shading with lower opacity brush to a full color is just not possible in Default. So, from this type of painting approach/logic, I don’t quite understand the Default mode and don’t find it that useful. I know it helps with colors, but can it be just added to what’s already there without excluding anything in future?

But if it all seems convoluted, it’s ok, I’m sure no matter the change, there’s always a way to adjust yourself. With software updates, something’s bound to go away. But atm, just wanted to say that there are some of us who like the Legacy as well and find it useful. So in the future, maybe you guys will take that in consideration as well.

OK, this one is simple to replicate without using Legacy blend modes. Right-click on the top layer, not in the image window, but rather in the Layers dialog. You’ll see several options including “Composite Space” which very uninformatively defaults to “Auto”. Click on “RGB (perceptual)” to get the same result as using Legacy blend mode:

I think the same change in the Composite Space will also work for Color to Alpha. At least it seems to when using the example “taj_orig” image on this page: https://docs.gimp.org/2.10/en/gimp-filter-color-to-alpha.html - check and see if this solution produces the results you want. Though I don’t actually understand the steps you are describing - I don’t usually directly work with alpha channels, using masks and layers instead. So if changing the Composite Space doesn’t work, could you set up an example XCF file using the “taj_orig” image?

1 Like

Ok, so yeah, that fixes it. The quality of the shade and the ‘Color to Alpha’ as well. But one problem still remains. The white. For some reason white does not get affected by changing the ‘Composite space’ as the darker shades do.

So, let’s say that I’m using the Paintbrush tool for painting. And everything is in Default mode (both the layer and the brush), but layer is in RGB (perceptual) mode. There is a differencee between white and black brush strokes. White is still very indexed or posterized, no matter the layer mode. The only way white is similar to black in shading is if I put the brush in the Legacy mode.

I guess there is a way around that, where I can switch between Paintbrush and the Eraser, because Eraser brush in the Default mode acts smooth. But it’s easier to shift between black and white using the X shortcut, than switching between Paintbrush (P ) and Eraser (Shift+E) all the time (I know you can change the shortcuts in the settings).

So is there a way to affect the white brush strokes in the Default mode as well? Cause that would be all I need. I’ll give you a visual example of the difference between white brush in the Legacy and in the Default mode. In both cases the layer is in Default, RGB (perceptual).

example2.xcf (256.5 KB)

Brush in Default, and brush in Legacy.

So, that smooth feel is missing for the white strokes if the brush is in the Default mode. If there is a way to fix that without using Legacy (besides using the Eraser instead), that would fix all the problems that I have with this.

HI @gungan - just a note to let you know I’ll look at the xcf file tomorrow. I was thinking the brush modes might cause an issue, it will be interesting to see if there’s a workaround.

1 Like

Do take your time. I hope I’m not being too assertive here. It’s just some things I’ve noticed while using these two different versions of the program, and it seemed to me, it might look like a loss in quality here and there. So I thought I’d like to bring it up. For consideration purposes : ).

If changing the layer to RGB (perceptual) mode would affect both the layer and the brushes (completely), that’d be less work, all around… but I don’t know how complicated that is in the coding and stuff.

Just looked into it, how it works with Photoshop. I don’t personally use Photoshop (specifically cause of the whole renting thing), but was curious of how the issue is dealt with there. There’s this:

https://dribbble.com/shots/3002187-Blend-RGB-Colors-Using-Gamma-of-1-0

Now the article is from the end of 2016, I don’t know if it’s still the same now. But it seems that their default is not the GIMP 2.10 Default. But it seems that they have a similar Legacy vs Default option that’s ‘fixed’ by checking that option.

@gungan - thanks very much! for that link, which is interesting and in turn leads to other very interesting links with lots of good information.

Regarding the PhotoShop “gamma” checkbox, I don’t have access to current PhotoShop, and have to go way out of my way to set up a very old version of PhotoShop. But see this article:

https://ninedegreesbelow.com/photography/test-for-linear-processing.html

Other people have checked various versions of PhotoShop for me, and I can confirm for an older version of PhotoShop, that only some operations use linear RGB even when the “gamma” checkbox is checked. Except for 32-bit floating point precision - then AFAIK PhotoShop linearizes all operations.

Run the tests in the article on GIMP-2.10 using “default” for everything, and then again using “legacy”. Please use 32-bit floating point precision. At 8-bit precision there is not enough shadow information to prevent posterization when working on linear RGB, which I think is the source of what you have described as “not smooth” when using default brush strokes and blend modes.

The whole point of high bit depth GIMP 2.10 is that unlike 8-bit GIMP-2.8, GIMP-2.10 operates on linearized RGB whenever appropriate to avoid “gamma” artifacts. Most GIMP operations do use linear RGB except of course for “legacy” mode. The few operations that don’t operate on linear RGB, use perceptual RGB for various good and carefully considered reasons. For example, Posterize is supposed to group tones “perceptually”, not linearly. Some operations make it really easy to operate on linear or on perceptual RGB at the user’s choice. And most operations do allow to choose one way or the other, but “how” isn’t always obvious.

See this article and especially look at the pictures:

https://pixls.us/articles/users-guide-to-high-bit-depth-gimp-2-9-2-part-2/

Parts of the article are out of date. For example, now GIMP does allow operating on linear RGB for Levels and Curves. And changing between linear or perceptual precision does no longer affect the layer blend modes, for GIMP-2.10 that’s done using “right-click/change Composite/Blend/etc” as we’ve already talked about, or by using “Legacy” blend modes.

For people who’ve always painted using 8-bit images and so necessarily perceptual RGB instead of linear RGB, getting used to working with linear RGB takes some time. The Blender/VFX/3D people started making that change many years ago and after sufficient ranting and user education and changes in software, finally it’s easy to use linear RGB in the relevants softwares.

It’s odd how long it’s taken artists/photographers and painting/editing software to start using/allowing painting/editing using linear RGB. But after years of everyone “doing it wrong” because of 8-bit software limitations, switching to using linear RGB really is an adjustment, which is the point of GIMP-2.10’s “legacy” blend modes. And sometimes artistic choice trumps “technically correct”, which is why usually in GIMP-2.10 there’s a way to “do the technically wrong thing for the right artistic reason”.

This article in particular, if people looking at this pixls thread only follow and read one link, I’d recommend this link:

The article has nice overview of which/why some operations work better when done on linear RGB, vs which operations work better when done on perceptual RGB. This sort of logic and decision making is exactly the sort of decision making that informs the RGB encoding (linear or perceptual) for the various GIMP editing operations and blend modes.

I was not aware that previous two files I’ve sent you, were on 8 bit integer, by default. Though, If I change to any higher value, the black gets fixed and the posterization is gone. However, not the case with the white.

So, I went through it quickly, putting everything on Default and Linear light precision. If I’m in any of these higher bit precision integers, and instead of switching layer from Default option to Legacy, I would switch between Composite space of the layer of RGB (linear) and RGB (perceptual) instead, whites do get affected. But in an interesting way. Not quite the result that I’m looking for, though.

Here’s what happens. As long as the white is not interacting with black there is no posterization (if RGB (perceptual) is selected for the layer). If I want to avoid posterization of white when it’s in contact with the black, the only way is if I set the brush to Legacy.

So, I’ve made another file for an example. Image ‘Precision’ is ‘32 bit floating light’, ‘Linear light’. I’ve set the grey background layer, so you can see how the white behaves with the alpha. All of the above layers are Default, but RGB (perceptual). If you would to switch between RGB (perceptual) and RGB (linear) on any of them, white would become somewhat more ‘aggressive’ and indexed like, even with the alpha surrounding. However, it’s always so, even in RGB (perceptual), when it’s in the contact with the black. But, black is obviously way smoother when interacting with the white. The only way they’re both smooth to each other is if I set the brush to be in Legacy mode (as in layer #2). I hope you can see the differences in the behavior and why it sticks out. And it seems from what I’ve tested it’s only avoided by setting the brush to Legacy.

example3.xcf (2.5 MB)

So, check it out when you have the time, and tell me what you think. As I’ve said before, if the white was smooth as well in some of these instances, I’d have no complaints to Linear whatsoever.

EDIT: The brush that I’m using in these is Paintbrush Tool, Hardness 025, with lowered opacity of somewhere between 20 and 50%. If you want to try out it’s behavior yourself.

1 Like

I’ll have a chance to look at the file tomorrow morning. In the meantime I’m guessing you are using one of the parametric brushes? Which one by name? Size of brush? Other parameters for the brush (angle, spacing, hardness, etc for anything that isn’t set to the “default” value for the brush)? What Dynamics (I’m guessing “none”)?

You can lower the opacity

[EDIT: Force should be 50 by default]

brush

brushb

I’d point out that no operations work “better” on nonlinear data.

It is better to think of what they are fumbling about in that article as a problem with the software presentation, and in particular, crap Adobe After Effects thinking.

A wiser and more 2018-ish approach is to think in the old-school model-view architecture mental model. It is entirely plausible to keep the internal reference linearized (model) and present the UI and various outputs as required (view). In this way, something like a simple 0.0 to 1.0 curve can be modelled according to whatever linear / nonlinear need required, while the actual underlying architecture Does The Right Thing™.

It would definitely be ideal for an app not to confuse the user. But life is full of transitions and contradictions that we have to navigate. We have apps to use and things to accomplish!

Well, it’s just the behavior of the white, difference in quality is a bit unsettling for me:

white

This white is on the layer above the black one, and I’m just shifting between RGB (linear) and RGB (perceptual). But it always acts like this (bit more indexed) when it’s in contact with black on the same layer, except when the brush is switched to Legacy… to sum up previous posts : ).

Hi @gungan - I looked at your example3.xcf.

Then I made a new XCF file - 800px by 800px with a black layer and a transparent layer, and made three white brushmarks on the transparent layer, using default/auto for the brush and layers, making each mark one after the other all in the same spot, using guides and “snap to” to make sure each successive brush mark was in the exact same place. I made sure to use your exact brush parameters. This is a screenshot at 200% zoom so the edge posterization can be seen clearly:

200pcnt-zoom-screenshot

The result certainly is posterized at the edges, “steppy looking”. It’s less strong though still obvious, if you use Force=50.0 instead of Force=100.0. 50.0 is the default Force setting. But even at Force=50.0, when zoomed in the edges aren’t nice to look at.

@gungan - is this what you’ve been describing as “indexed looking”? Or do you mean something else?

I don’t know what is the source of this degree of posterized edges - maybe it’s just a normal result of painting with linear RGB. Normally when I paint I use a largish canvas and don’t normally zoom in more than to 50%. Plus usually I paint using a very reduced opacity and the brush is always moving and set to “incremental” rather than being left in one spot. So I’ve never noticed this sort of “steppy edges” result before.

I want to check this and that to eliminate various possibilities regarding the amount of edge posterization, starting with checking Krita and also checking an older version of high bit depth GIMP that I modified in various ways.

@anon11264400 - do you see anything like this “steppiness” at the edges when using Blender, using as similar as possible method of putting down three successive marks in the same place? - assuming of course that Blender can be used to paint dabs as described, no transforms to make prettier results - everything has to be linear!

Setting Krita up to make a similar brushmark in the linear gamma sRGB color space, the same posterized edges appear. Using my modified version of an older version of GIMP, the same posterized edges appear though perhaps not as extreme - brush settings are very different in the two programs so I just made changes to the default Krita brush tip settings until it had a similar fall-off from center to edge, compared to the brush we’re using in GIMP.

Here’s a screenshot of the Krita brush marks at 200% zoom:

The weird thing is that there are no posterized edges in GIMP when drawing a radial gradient from white to black with the same radius as the brush stroke radius, even if the layer is subsequently modified with Curves or Levels to look more like the brush mark. But as soon as the radial gradient layer is turned into a mask and added to the layer, the posterized edges appear.

I’m working at 32-bit floating point in both GIMP and Krita. So I’m wondering if possibly the mask and/or the brush stroke and/or the alpha channel is somehow at 8-bit precision instead of 32-bit floating point precision in one or both of the programs. I’ll try asking around to find out, unless maybe someone reading this thread already knows? @Boudewijn_Rempt ? @Jehan ? @Americo ?