Krita's pixel brush engine seems to have problem handling very light pressure strokes. Creating jagged, dash-line-like strokes when a stroke is close to zero pressure and near 1px width. Take Basic-5 Size for example. Without changing its default parameters, on my Cintiq Pro 24, when I apply very light pressure, the stroke will be near 1px in width. Although usable, the beginning and the end of the stroke usually become somewhat jagged. This issue becomes rather prominent when I changed the Autobrush Mask to Blur/Gaussian and set Fade to 0.00 or 1.00. Under such settings, the beginning and the end of a stroke becomes literally dash-line-like and very jagged, which is probably not something a user would expect for a very soft and smooth brush. I think this is probably caused by our interpolation algorithm. When Fade is set to 0.01 to 0.99 with Gaussian Mask, this issue mostly went away. Do we take a closer look at the algorithm, or do we just simply change the range to [0.01, 0.99], so people have no chance to break it? I reported this issue here on behalf of the community who relayed the message to me first.
I can observe this effect when setting a 1% to 1% size curve for Basic-5 Size, especially when using a Gaussian mask, On my end, the dashed line nature still exists when using a Fade between 0.00 and 1.00.
The bug is present for me on any Fade setting for -Gauss Mask: Circular-, it is not present on Rectangular mask shape. This does means is our interpolation algorithm bugs on extremely small sizes. I would say to take a closer look.
Please see https://krita-artists.org/t/4-4-3-beta-1-when-drawing-a-thin-line-the-line-is-broken/19399/15?u=tiar for details and how to reproduce, too.
I'll paste the reply I made on the forum here. I tested more carefully how the dab rendering behaves (after all it was I who adapted them to the vectorized form). In this case you are reaching the limit of the algorithm maths we use within the size you have to work with. The maths of soft and gaussian dab calculation do suffer from reduced resolution. In this case the calculation of the fade effect on such small sizes will frequently be on either the on or the off state, with no in-betweens. We cannot escape this, unless we have especial cases for dabs so small. In other words, the brush tip (the dab) is so small, less than a pixel, that calculating the fade grandient in one pixel space is not enough to get smooth results. This is why it doesn't work the same as the example with resizing the image: for dab calculation we use the pixel size of the dab, so even if the algorhitm can make the correct gradient, we simple do not have enough pixel resolution on the dab to show it. Afair dab generation does not work at the sub-pixel level, but I may be wrong. However the broken line does not make sense to me. Dab generation is independent from the Line algorithm and afaik that one works with sub-pixel values just fine.
Hi, Tyson! Could you please check if this package fixes this issue? https://disk.yandex.ru/d/lDNTKUKCayqGzA The package also changes the behavior of all existing brushes with Soft and Gaussian tips for size below 10 px (it enables supersampling for them, which has always been enabled for Default brush tips). How do you think, is such behavior change acceptable for the user?
A possibly relevant merge request was started @ https://invent.kde.org/graphics/krita/-/merge_requests/1346
Thank you Dmitry. I've tested your appimage. While it still looks somewhat disjointed (when zoomed-in to 400%, that is), it's eons better than what it used to be. From my experience, the new method is acceptable. The strokes are usable, close to what I would expect to get as an artist.
Git commit bb01fcec931e17d95df99b68f9f47870fff2953a by Dmitry Kazakov. Committed on 25/02/2022 at 11:01. Pushed by dkazakov into branch 'master'. Activate brush supersampling for all auto brushes smaller than 10 px Previously, it has been enabled only for brushes with "Default" brush tip. This patch activates supersampling for all brush types. WARNING: this patch will change all existing brushes for sizes below 10px! Related: bug 449737 M +1 -1 libs/image/kis_base_mask_generator.cpp M +0 -5 libs/image/kis_circle_mask_generator.cpp M +0 -2 libs/image/kis_circle_mask_generator.h M +0 -5 libs/image/kis_rect_mask_generator.cpp M +0 -1 libs/image/kis_rect_mask_generator.h https://invent.kde.org/graphics/krita/commit/bb01fcec931e17d95df99b68f9f47870fff2953a
Hi, Tyson! Thanks a lot for your testing! :)