[Testing needed] New Colorsmudge Engine for Krita 5.0


@dkazakov This is what i get. I would need to adjust the brushes, but if @tiar @Voronwe13 and you decide what would be better and why, and explain me in “human” words is ok, no problem

I look for basically 3 things;
Behavior
Blending soft in low pressure, drag painting in mid pressure as i show in picture to manage the painting as liquid paint (or move a lot the color) and then get color in a “crescendo” :wink: Also using tilt but i have the problem that i don’t know how to include in the icon without mess it.


Performance
I paint comfortably a DinA 4 and we are beginning with this. so i am satisfied :smiley:
Not Annoying things
Don’t rescale the brush if i change a parameter
The problem i showed you in the video talk @dkazakov

2 Likes

Hi, @RamonM!

Just a quick note, don’t update the brush presets until I fix this bug. Otherwise you’ll have to do the same work twice :frowning:

6 posts were split to a new topic: [Proposal] Combine Colorsmudge and Clone Brush engines

Here’s what I tested. It is not very refined, just put an hour or so into it. I created a new brush based on my Craig_02 brush tip (the green one) and used two other brushes by Ramon that he posted here. Smudging is going well and the performance isn’t too bad. We will need to find a perfect balance of just a few, well selected brushes, should probably do a community thing like with the charcoal brushes. To me, the feature set of Krita for wet painting is now pretty solid once this and the height/blend modes are finished and end up in master. Thank you to Dmitry and everyone else involved. :slight_smile:

17 Likes

Really good tree. And the brushwork is also interesting. I agree that the community can generates even better brushes in future, that is the reason why I have published these brushes here for free to make beta testing easier or at least people can play with this feature.
I was thinking exactly the same. Charcoal challenge was very good and …spoiler ! I am adding some new brushes for future :wink: in the next video they appear a bit in my brush docker by accident.

2 Likes

Hi, @Voronwe13, @Mythmaker and others!

Since I need to make a decision about the original colorsmudge engine that is ready for integration into Krita 5.0 tree, I have taken the power and split the thread into three separate topics. Let’s continue the discussion of separate topics in separate threads now :slight_smile:

  • slow but hi-quality heightmap smearing mode is now here
  • combine colorsmudge and clone brush engines is now there

In this thread I would really like to know your opinion on the following questions:

  1. Does DK9 package delivers good-enough experience to the painters?
  2. Does it look as an oil-paint brush?
  3. Are there any regressions in other modes? E.g. in these modes:
    • Legacy mode + Dulling
    • Legacy mode + Dulling + Smudge Radius
    • Legacy mode + Smearing
  4. Does it work “expectedly” in Overlay mode?
  5. Does it behave “expectedly” with selections and Inherit/Lock Alpha modes?
  6. If anyone is aware of any blocker from merging this branch into Kirta 5, please state it now! :slight_smile:
2 Likes
  1. I would say yes, performance is nice and smooth, painting with it is fun.
  2. Yes.
  3. I’ll pass on this one, for me everything looks good, but Voronwe13 and Ramon know a lot better about these nuances then I do.
  4. Yes.
  5. Yes.
1 Like

Lightness Strength is broken in this version. It should closely match the behavior of Lightness Strength in the pixel engine, and most importantly, when it’s 0, the brush should not exhibit any height/lightness variation at all. It’s very important to me that I can make brushes that can go from full impasto to completely flat. Here’s a quick image I did to show the issue:

The issue is very prominent with my most extreme lightness brush, but that brush isn’t much more extreme than some of the brushes I actually use. Even with a brush using Ramon’s DAOil brushtip, you can still see the lightness variation in the brush at 0% Lightness Strength.

5 Likes

I didn’t notice that until I tested it specifically - but you are right!

I think it’s because I had opacity set to fade in with pressure, and that does affect the lightness strength. With variable opacity off the lightness strength seems constant.

Before that I thought it was going well - my general testing was positive. The only thing that was weird was using overlay mode - because it doesn’t apply to the lightness underneath, so it feels a bit unnatural/unintuitive. It’s not a big deal to me personally as I don’t use overlay mode in my normal workflow, and that behaviour might even be useful for some effects (like emulating a textured canvas).

Hi, @Voronwe13!

Can we somehow fix this issue without adding a separate heightmap smearing routine and, therefore, sacrificing the speed? Perhaps we could rename the option into something else? Like, “paint liquidity”?

PS:
Just to make it clear, my current plan is the following:

  1. Complete the fast version of the lightness-colorsmudge and release it in Krita 5.0
  2. Get more feedback (and, probably, optimize) the slow version with heightmap smearing version, and release it as an option in a later Kirta 5.x release.
1 Like

Hello,

This Lightness Strength problem is a result of being hard coded that it is more than zero when the curve is at zero right? So the stroke never goes full flat.

Currently this gives a pseudo realism to RGBA brushes, specially when the Color Rate goes to zero. Because a real brush without paint still leaves impasto on the painting. However this limit the digital tool that is Krita, as an user cannot create a brush that goes from full impasto to fully flat.
At this point we have two situations (right?):

  1. Leave as is. At first define that Smudge RGBA brushes can’t produce flat strokes, and wait for the height smudge to correct this.
  2. Return to DK7 behavior where we let a Lightness Strength to reach zero, and then accept the ‘bug’ where the impasto freezes when it is at zero strength.

However I have an idea. It may not produce good results, or maybe is too hard / impossible to implement but here it goes. What do you think of when Lightness Strength reaches zero the brush erasing the Height Map? As far as I know this would produce a flat stroke, and if it smear into a previous height stroke it would prevent that freeze impasto.

I think this would be a good solution for the interim. Or rather, that new height information overwrites old height information, and only blends based on Opacity. And then when @dkazakov adds the ability to smudge the heightmap as an option, the user can choose between the behavior for Lightness Strength being to overwrite the existing heightmap, or to smudge the existing height instead. I can see both behaviors being desirable for different brushes.

Hi, @Voronwe13!

Do you have an idea how to implement this “erasing” functionality? I don’t really understand how it should work.

I have made a testing package. In it, when “Lightness Strength” reaches 20%, heightmap composition switches from “normal” to “erase”. The effect is rather fun, but I don’t think it looks “expected” to the user. It looks like this erasing could be some separate option, because it “smoothens” the canvas.

I was doing some more testing yesterday (DK9) and wrote some notes on what I observed:

As already noted - Lightness strength is constant if variable opacity (pen settings) is off i.e. ‘Lightness strength’ doesn’t appear to do anything if pressure sensitivity is off in the main ‘Opacity’ setting.

I noticed in that instance; the main opacity slider appears to have a very small effect on the lightness opacity down to about 10% - then it starts to fade out more noticeably.

I also noticed with colour rate off, the lightness will only display if painting on an already opaque area or layer; It doesn’t show at all on a fully transparent area or layer.

I’m not sure that’s actually a problem; just figuring out what the limitations are and whether there’s any anomalies that shouldn’t be. It’s possible a user could want to apply an impasto texture only on it’s own layer - but that’s not possible with this limitation. There are workarounds for that anyway (e.g. using a mid-grey with an overlay layer).

I’m not sure about the suggestions for the impasto issue - it sounds a bit odd to me. The current implementation might not be ideal, but it does feel quite authentic as noted by @Daishishi - you would expect a brush to leave bristle marks when you work back over painted strokes; and that’s what it does. It spreads out and becomes thinner/less textured as you work back and forth over the laid paint stroke.

As an emulation of real media, I can choose a soft blending brush without lightness to flatten any areas I want to be impasto-free; in a similar way you would pick up a soft dry brush when oil painting.

So - I think it’s good in it’s current state, and mostly feels right when I’m painting. I’m not against what @Voronwe13 is saying though about it being a digital medium; You would ideally expect to have the flexibility to reach zero lightness with the brush if you’ve set those parameters.

By the way - has it already been mentioned somewhere how the current implementation actually works on a fundamental level? I’m curious in case I can think of anything practical that might help. :nerd_face:

1 Like

This is accomplished by the brush creator leaving Lightness Strength values high, even when Color Rate is low. You would not expect that to happen if the Lightness Strength value is 0, because the brush isn’t supposed to be leaving any bristle marks in that case. The current (DK9) implementation takes that control away from the brush creator.

Basically, if Lightness Strength is to be kept intact as an option, its behavior has to either go back to DK7 behavior (brush doesn’t change existing height at all when Lightness Strength = 0), or to some new behavior, such as brushes overwriting the existing height with the brush’s height values after the brush has had Lightness Strength applied to it. The latter is my preferred option, as I think that will provide a behavior that makes sense if smudging the existing height is not happening. But that behavior will need to be tested in practice to see if it’s really better than the DK7 behavior.

2 Likes

I think the way this would work is you would add the LightnessStrength variable to KisDabCache::fetchNormalizedImageDab, so that you get the dab with Lightness Strength already applied to it. Then take the Lightness Strength value out of the heightmapOpacity calculation, so it’s just using Opacity for blending it into the existing height. I believe that’s all that needs to be done, but I’ll have to wait until this evening to test it out.

Yeah - I did say I agreed with you - it should behave that way as it’s a digital brush.

I’m just saying, from the perspective of emulating a real brush and paint - if you’re using a bristley brush to leave impasto marks on a canvas; that same brush will not likely smooth out paint flat; you would need to change to a different softer one to blend out the brush marks.

In that respect, the DK9 feel is a decent emulation of what you’d expect from real media.

But; It isn’t good from the perspective of being a digital brush where you expect more flexibility of expression.

If you want to emulate that in DK7, just have your Lightness Strength curve start at 20% instead of 0%. That should be entirely up to the brush creator. If the brush creator wants a brush that always imparts impasto marks, he would just set the minimum Lightness Strength value at what he wants his minimum impasto to be. With @Daishishi’s and my suggested behavior above, the brush creator can choose to use lower Lightness Strength values to create an impasto smoothing brush. Or a brush creator can make a brush that does both, even if such a brush doesn’t exist in physical media.

1 Like

If you want to emulate that in DK7, just have your Lightness Strength curve start at 20% instead of 0%.

I’m not sure it will work. It will leave traces on the canvas, when both smear rate and color rate drop to zero. The current implementation makes sure that lightness strength is not higher than color rate and smudge rate.

Perhaps I should just remove lightness strength options completely and link it to the maximum value of smudge rate and color rate?

1 Like

Hi, @Mythmaker!

As already noted - Lightness strength is constant if variable opacity (pen settings) is off i.e. ‘Lightness strength’ doesn’t appear to do anything if pressure sensitivity is off in the main ‘Opacity’ setting.

I cannot reproduce that. The code seems to work correctly. In DK9 Lightness strength cannot drop below 20% if smudge rate or smudge radius are still higher 20%. So to see the real drop of lightness strength you need to configure both smudge rate and color rate to drop to zero on low pressure.

I noticed in that instance; the main opacity slider appears to have a very small effect on the lightness opacity down to about 10% - then it starts to fade out more noticeably.

Opacity slider is premultiplied into the lightness strength. So both sliders have an effect on lightness strength. (opacity is also premultiplied into color and smudge rate, so there is nothing special about it).

I also noticed with colour rate off, the lightness will only display if painting on an already opaque area or layer; It doesn’t show at all on a fully transparent area or layer.

Well, if you paint with a brush without paint on a dried-out canvas it will not paint anything, so it precisely mimics traditional media in this case :wink:

It’s possible a user could want to apply an impasto texture only on it’s own layer - but that’s not possible with this limitation. There are workarounds for that anyway (e.g. using a mid-grey with an overlay layer).

There is a technical obstacle for applying impasto to the existing painting. Out heightmap channel is “tremporary”. That is, as soon as you paint with any non-impasto brush, the heightmap channel is destroyed. The traditional media analogy is: the paint on the layer dries-out [1].

[1] - the analogy is not very technically correct, because our model is too rough, but I hope noone notices that :slight_smile:

1 Like