Bug 466368 - Sketch engine at low opacity cannot fully over paint black color with white one.
Summary: Sketch engine at low opacity cannot fully over paint black color with white one.
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Brush engines (show other bugs)
Version: nightly build (please specify the git hash!)
Platform: Microsoft Windows Microsoft Windows
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-02-24 18:36 UTC by slomowicz
Modified: 2024-12-13 12:13 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description slomowicz 2023-02-24 18:36:22 UTC
Sketch engine at lower opacity like 20% is unable to fully over paint black color with white one.
What I mean is we have white page, with some black drawing on it. Now we take the sketch engine brush like "Sketching-2 Chrome Large" and set its color to pure 255 white and also switch opacity to 20%. Now we paint on top of the dark parts of the picture. It will get whiter but never fully RGB 255, instead it stops at something like 245.
Comment 1 Wolfgang Baer 2024-11-21 23:49:53 UTC
Confirmed in: krita-x64-5.3.0-prealpha-a6f9e8d6

Tested with Sketch Engine brushes set to painting mode wash.
At Opacity <= 70%, full white (255, 255, 255) can not be reached.
At Opacity >= 75%, full white (255, 255, 255) can be reached.
The breakpoint must be somewhere between 70% and 75%.

The lower the Opacity below 70%, the lower the max white that can be reached.
Comment 2 Dmitry Kazakov 2024-12-13 12:13:36 UTC
Git commit ea2372b28fbde357ed65ad332777ae0a4eb9d775 by Dmitry Kazakov.
Committed on 13/12/2024 at 12:13.
Pushed by dkazakov into branch 'master'.

[critical] Fixed opacity being applied twice(!) in some brushes

It seem like during the brushes port to lager in 2022, I made a
mistake in understanding what is `m_useSeparateStrengthValue` in
`KisCurveOption`. It caused `KisOpacityOption` to apply opacity twice
for some of the brushes.

It means that for two years when the user selected any opacity for
the brush, the actual opacity used for the brush was **squared**.
I.e. when the user selected opacity 0.5, the real opacity was 0.25.

This patch fixes the issue, but it **changes behavior** of existing
brush presets.

The list of affected brush engines:

* Curve
* Clone
* Deform
* Hairy
* Hatching
* Sketch
* Spray

The most popular brush engines, like Pixel and Color Smudge are **not**
affected.

I'm not sure this change should be backported to krita/5.2 since it
changes behavior.
CC:kimageshop@kde.org

M  +1    -1    plugins/paintops/colorsmudge/kis_colorsmudgeop.cpp
M  +2    -3    plugins/paintops/curvebrush/kis_curve_paintop.cpp
M  +2    -4    plugins/paintops/defaultpaintops/duplicate/kis_duplicateop.cpp
M  +2    -3    plugins/paintops/deform/kis_deform_paintop.cpp
M  +2    -3    plugins/paintops/hairy/kis_hairy_paintop.cpp
M  +2    -3    plugins/paintops/hatching/kis_hatching_paintop.cpp
M  +1    -1    plugins/paintops/libpaintop/KisFlowOpacityOption.cpp
M  +17   -9    plugins/paintops/libpaintop/KisOpacityOption.cpp
M  +6    -2    plugins/paintops/libpaintop/KisOpacityOption.h
M  +2    -3    plugins/paintops/sketch/kis_sketch_paintop.cpp
M  +2    -3    plugins/paintops/spray/kis_spray_paintop.cpp

https://invent.kde.org/graphics/krita/-/commit/ea2372b28fbde357ed65ad332777ae0a4eb9d775