Okay this is a thing I am thinking about for years now. It would be cool when you could bind a setting to another of the same brush preset.
Consider the following use case (i actually have) :
You want to create a brush to create a fur like pattern when painted. One of the important properties would be that the stroke fades out by getting smaller over the length of the stroke. This is of course easy. You open the preset, go to size, check fade, enter a reasonable value for length, set the curve so the brush gets smaller and uncheck pressure. With a some additional tweeks like using a textured smudge brush and the value preset, you can paint little patches of fluff easily.
Fade length determined by the brush base size
Now you have your basic fur brush. Let’s say it has a size of 20px an a fade length of 60px. While this gives a nice result in the current resolution, it doesn’t translate well to situations were you need the same brush but basically bigger. For example when you paint on a bigger/smaller canvas and need a bigger/smaller brush relative to that or simply need a smaller brush because you paint something that is far more in the background. Usually you’d just change the size of the brush but in our case this would not change the fade length (only the base of the fur patch), it is absolute and fixed. Currently I have like 10 presets of the same brush, with different sizes and matching fade lengths for different sizes of the canvas.
What I’d like to do is to bind the fade length to the base size of the brush multiplied by a factor. This way you could have just one brush and when you change the base size from lets say 20 to 40 the fade length automatically changes from 60 to 120 (if the factor is 1.0 of course). So basically when you double the size, the fade length also doubles. Or with a factor of 0.5 the fade length would increase from 60 to 90, you know the math.
Another scenario - Patterns:
Krita ships with a screen tones brush. Go ahead and paint some blobs with it. Now change the size of the brush and paint again. You’ll see that the size of the pattern didn’t change, only how much screentones are painted at a time (basically). If you could bind preset settings to each other you could bind the scale setting to the base size and whenever you make your brush bigger, the pattern gets bigger too. This is useful when using the same tools but work in different resolutions.
I think this could enhance the workflow a lot since you have to create fewer brushes that are basically just copies and can focus on the actual painting instead of twiddling with presets while at the same time keeping your collection of brush presets clean.
Thank you for this post.
I think this is a great idea in general, as I was already thinking about it myself some time ago.
My brushes use some hue randomization to make the brushstrokes a bit different from each other. It was hard for me to set only one value of this randomization as with big saturation, this changes the color a lot, while with small, you can barely see the difference.
With what you’re proposing (and I thought about it too that time) is to make hue dependable on the saturation - change is small when you have big ones, and big with great saturation. The impact on the color percepted by the eye stays the same - problem solved and the brush mechanics feels better.
Now, there comes the problems (which may be the reason why we don’t have this feature yet).
If you allow such changes, the brush editor starts to be really crowded and counter intuitive for the new users - you can have values depending on values depending on values (multiple times), recursions where one value depends on itself, cycles (value A depends on B which depends on A) and so on…
I hope you can see what I’m talking about here. And now, how to implement this nesting on the current graphical editor with curves?
My idea to make it work was to allow users to define variables in the brush editor:
for instance, instead of typing 60px somewhere (text fields or curve points) you type “a”. Then in the separate window in brush editor you fill them with variables from krita and some math. For example:
a = value;
b = brushSize/2;
c = mean(a, b);
This still would need to have a lot of restraints to prevent variables from doing the things mentioned above, but I guess this wouldn’t be as hard to implement (I hope so) and would allow to hide those features from usual users, who may don’t want to work with them (they may require some knowledge obviously)
Anyway, feel free to say what you think about this idea and if you think this would do in your case.
PS: in terms of patterns - it’s intentional I guess, as you may want to change the brush size and draw on the same pattern without scaling it. You can change pattern scale manually in texture-pattern-options-scale in the brush editor. Shortcut in the RMB would be nice though.
Funny, I thought of entering formulas (or code) first too but then I thought that is to advanced for normal users. For me as a developer it feels natural to write brush.fade.length += brush.base_size * 1.5 or something but the normal user expects a simple drop down of what to bind to and then an entry field for the factor.
I really like your example too, however that’s even more advanced than that what I would need. I’d only made a few settings available to bind to. Mostly the ones that you often change and are available from the palette or in the top bar like size, opacity, flow, smudge, you name it and also prevent binding to settings that are already calculated. I actually tried to figure out if I could implement this as a plug-in when the Python plug-in feature came out but I gave up before I figured out the documentation.
I like your idea too but this is probably more a feature for power users. Maybe let them switch to an editor where they can basically program their own brush behavior. This would be cool too but not what had in mind. :3
Both are valid use cases, at least I was in both situations; same with textures.
Great! Adding charts depending on other charts seemed quite more complex and harder to implement than formulas, as it’s so much more into user interface. Hard to tell for me though, as I still haven’t gotten trough krita documentation. I’ll do this one day and to write something here, I swear
Anyway, if you feel like writing a plug-in I’m absolutely interested in having it
I will sure take a look at writing a plug-in some time (don’t expect it in another few years) but this is a feature I’d like to see in Krita’s core. If you do this with a plug-in all the brushes will depend on it making it impossible to share them without and maybe even have other issues. I don’t even know if it’s possible with the current API.
However if someone can point me in the right direction in the python API, I may consider doing it if possible in my rare free time (however I’d rather paint then ;3)
Just Upvote to the feature. Brush size and texture connection is really one of things that I need. And, strangely, no one painting apps implemented it (may be Artrage has but I don’t remember)