"Value" set to "fuzzy dab" for brushes not neutral

It seems like setting Value to fuzzy dab changes the perceived value of the strokes, while it would ideally maintain the average value. An example, strokes made with the strength of fuzzy dab set , from top to bottom, to 0, 50% and 100%


And a blurred version of the above:

It looks to me like at 100% strength the average value is kept, but at 50% the result is notably darker than it should be. I wonder what’s causing this.

At 50% the chance of values appearing that are closer to gray is higher and it’s impossible to get a pure white/black dab. So it’s darker because the higher extreme values are cut from the set of possible results.

I feel like that would make sense if the colour I chose to paint with wasn’t 50% gray. It looks to me like with strength set to 50%, none of the dabs are brighter than the colour chosen by the user.


On the left, I manually set the curve for fuzzy dab to limit the values from 25% to 75%, so pretty much what I’d expect 50% strength to do. And on the right is the default 0-100 curve with strength set to 50%.

Looks like the Strength parameter is applied after clipping values to 0-100%, not sure if that could be changed without rewriting the whole brush engine…

But there’s another effect due to non-linear color spaces.
That 50% gray in sRGB is not actually half the brightness of white, but signifficantly darker:


(make sure to view at 100% zoom, at least firefox doesn’t scale images in linear RGB either, so the dithered area becomes darker)

We DO perceive the sRGB 50% as half the brightness though, that’s the whole reason the gamma curves were invented.

1 Like

It would be really nice if there was some way to fix this, I’ve found using value jitter useful for indicating areas of high detail vs low detail.

I was wondering if it’s a gamma thing as well, and of course the problems don’t stop there - you can’t really have as much value variation at the ends of the value range without affecting the perceived value as well. But I think that’s OK, the user can adjust to it by reducing the strength of the effect, it’s something a painter has to consider anyway.

Do you have a pointer handy to where this is done in the code? I wonder if it would be simple to change the way strength is applied so that it would be e.g. [value] + [fuzzyvalue] * [strength], where the fuzzy value would be between -0.5 …0.5