GNOME Bugzilla – Bug 119240
Dynamic Brush stroke panel and/or Dynamic path stroke
Last modified: 2010-03-07 13:37:16 UTC
Right now, control over the outcome of a brush stroke is rather limited: while the gradient brush is great for colors, control over other parameters is much more limited: for size for example, without the use of a graphics tablet, you can only set a brush to "fade"... In fact, this is limited even when using a graphics tablet: what if you want brush strokes that fade as they become bigger, instead of becoming more opaque? More on that later though. In Photoshop, last time I checked, there is Size Fade, Opacity Fade and Color Fade. The Gradient Brush surpasses the Color Fade feature, I suggest we take it one step further with the other parameters as well. What I'm suggesting is a "Dynamic Brush Stroke" panel. This panel would have several sub-sections accessible through tabs, and in which you can edit the following parameters: size, opacity, color and maybe orientation (yay!) through editable curves, which would look something like this: 1| | ____ | / \_____ |_____/ | | 0|__________________ Steps: [ ] Continuous: [check box] Presets: [drop-down menu] Repeat: [drop-down menu] .In the case of the Size feature, an extra input box will be added: maximum value, which sets the maximum size of the brush (1 being the normal size, 2 being its double, etc). .In the case of Color, the gradient will be listed on the left side instead of the 0 and 1 values. .In the case of Orientation, 0 will be replaced by -180 and 1 by 180 degrees. .The default will be of course a strait line, at the value 1 for Size and Opacity, and at the angle 0 for Orientation. .Steps specifies the number of steps before the end of the curve is reached for that particular feature. .Presets are preset behaviours, such as: - Default will be the default strait line at 1 or other. - Linear fade is a strait line from 1 to 0. - Reverse linear fade is the opposite of the previous. - Sinusoidal fade is a sinusoidal line from 1 to 0. - etc. .Continuous would force the end value of the curve and the start value to be the same. There can be discontinuities in between though. Maybe an "Advanced" brush editor panel could be implemented for the more complex curve editting. .Repeat is like the repeat option already present for gradients and such, and specifies how the brush behaves after a cycle. A final tab would show an "overall brush preview" screen: it takes the biggest value entered in Steps for all the parameters, and from there shows the combination of all the curves. An animated brush preview would also be nice. Of course, if such a feature is too demanding in ressources, then a "Dynamic Path Stroke" feature could be implemented instead: you have roughly the same panel as described before, and you select a portion of a path to get stroked accordingly. This eliminates the need for real-time processing of the brush stroke, and allows you to easily make modifications to the parameters you've set. As for graphics tablets, the same type of panel could be used as well: this way you can easily set your pen to make brush strokes become more opaque as they become smaller, or less opaque as they become bigger, etc. You just get rid of "steps", and have the bottom line represent the minimum to maximum pressure values instead. It might also be interesting if the ordinary brush panels and the stylus panels can be used simultaneously: thus for each feature (size, opacity, color and orientation), you can choose if it follows the normal brush set (in which case it follows the curve defined for normal brushes) or the stylus settings (thus being dependent on the pressure). A quick example is a gradient brush independant of the pressure settings but which changes size with different pressure values. The biggest problem I see with what I'm suggesting though is "overkill". :S Maybe a simpler option would be to get rid of the curves, and simply have presets, repeat types and number of steps instead...
Lots of good ideas, thanks for the suggestions. Now we will have to sort this out and see what can be implemented in reasonable time. ;-) By the way, it would be nice if you could take some screenshots of how the Photoshop dialogs are structured (of find some on the web) and attach them to this bug report (use the link "Create a new attachment"). Most of the developers do not have access to Photoshop, Paint Shop Pro and other proprietary software, so some screenshots could be useful.
Created attachment 19039 [details] Photoshop 7 brush panel
Created attachment 19040 [details] The photoshop 7 dual-brush feature
Created attachment 19041 [details] Photoshop 7 brush shape dynamics
Created attachment 19042 [details] Photoshop 7 brush texture option
Created attachment 19043 [details] Not sure how to explain this... Photoshop 7 brushes again
Yikes! If there was a way to create multiple attachments in one go instead of making attachments seperatly, then I apologise for having attached them one by one... All screenshots are of the Photoshop 7 brush panel. The version of Photoshop I actually have access to is Photoshop 6. Photoshop 6 is Really limited when it comes to bush dynamics. Basically, when you select brush, there's a clickable icon to the right of the overhead bar that leads to the following drop-down menu: ------------------------------- Brush Dynamics: Size: [drop-down menu] [ ] steps Opacity: [drop-down menu] [ ] steps Color: [drop-down menu] [ ] steps -------------------------------- All the drop-down menu have the same three options: ------ Off Fade Stylus ------ Off = nothing special. Fade = from higher value to lower value, or from foreground color to background color for color. Stylus = depends on pressure sensitivity received from the tablet. Judging from a few screenshots I had seen though, Photoshop 7 seemed to be a Lot more advanced when it comes to brush editing. However, since I didn't have access to Photoshop 7, I did not know exactly to what extent. Since you suggested that I look it up though, I went to look for screenshots (easier than downloading the trial version that's over 150 megs :s ), and I must say, what I saw left me rather puzzled: it is Very different from Photoshop 6. You can see for yourself from the screenshots (lots of them, but you'll see why). Among other features, here's the highlight of things that may be considered "new": - now even the angle can be easily adjusted (before only size and opacity were easily adjusted. Kind of.) - the "jitter" feature for nearly all features: it's there to introduce a certain randomness. Thus, you get randomness in size, angle, etc. That's how I understood it anyway. - texture: you can use the brush as if painting in on textured paper. - dual brush: two brushes will be used combined. I guess a brush pipe can be used to achieve similar results, but there's always the control issue. - "orient to path" feature - use of all the capabilities of a graphics tablet (including the wheel for the Intuos2 series) Well initially I had thought up several tool box design possibilities regarding the idea I've had. However, after seeing all this, I think I'll try to rethink a few things first. Where do the developpers discuss how you implement features, anyway? I don't think I saw any extensive discussions of this type in the Gimp mailing lists listed in the Gimp website...(though I did find several very long threads regarding the 1.4 vs 2.0 debate :s )
Thanks for the screenshots from Photoshop 7 and for the ASCII art from Photoshop 6. The gimp-developer mailing list is by far the best place to discuss these issues. Most of the time, the discussions are more technical and do not drift into debates like for the version number of the next release. The traffic in the last month has also been much higher than usual. Another place where features are discussed is on IRC and at the Gimp Developers Conference, which is just ending now. To some extent, Bugzilla is also used for discussing some features. Since we are in a feature freeze now, it is unlikely that your proposal could be implemented in the next few weeks. However, feel free to post a summary of your proposal on the gimp-developer mailing list (including a link to this bug) if you want to get the ball rolling.
Setting milestone to "future"; please change if someone wants to code this up before 2.0
Just out of curiosity: are there any short-term plans to at least include a simple "size fade" for brush? The present "fade out" feature just isn't very good when you want to work with more or less solid batches of colors, and when you use large brushes you have to set the hardness to minimum (which is something you don't necessarily want to do, especially if you don't want the brush stroke to be "fuzzy") in order to simulate a brush size decrease. Right now the only way to create a solid-color sharp edge is by using path stroke. It's too cumbersome.
Raising target from Future to 2.6 because at least a simple size-fade would be pretty straightforward to implement, and nice to have.
Concerning your "Dynamic Brush Stroke" panel, I think I have done roughly what you describe in MyPaint. http://people.ee.ethz.ch/~mrenold/mypaint/
Very nice! It would be great to have a gimp painting tool with that much flexibility.
In that archive, see 'brushsettings.py' for a full list. It is quite comprehensive, inc. stuff like hue/saturation/brightness variation. One notable gap is tilt -- I think that should be allowed to influence input (for example, color application; tilt based color variance could simulate having different colors on different sides of your brush. (most obviously, FG and BG)) Does mypaint handle event timestamps better than gimp? I know there is a bug filed about accurate event timestamps which relates to ink tool behaviour (and will relate to other tools if time becomes involved in how brushes are drawn) -- addressing that could be a step towards this. That sounds like another thing that should be mentioned here -- A nice 'prototype' might be a pressure curve for the ink tool, influencing jitter/spatial offsetting, since that is the only parameter that applies in the case of the ink tool. I think such a pressure curve widget might be wise to provide a quick way of curve adjustment -- so the end and start points can be adjusted without needing to pop up a separate window (I imagine this would speed up the majority of changes) Something like a mini-curve with a button beside it that pops up a full curve editor.
[event timestamps] MyPaint does first order lowpass filtering to calculate things like the current speed, and everything with the word "slow" in the description. I'll explain the formula if someone wants to know. I can't find that ink bug report you refer to right now, but IIRC a more complex approach was taken there.
Isn't this bug almost covered by the new dynamics in SVN?
Mostly. Missing points: * curves (of course) * distance input variable * setting hardness for non-VBR brushes (as in eg. pressure->hardness dynamics toggle) * brush rotation (== angle) output variable * direction input variable Other things we might want to consider making available in some form later (mainly taken from http://svn.gna.org/viewcvs/mypaint/trunk/brushsettings.py?rev=29&view=auto) * switching 'size' output between linear and logarithmic * jitter output variable (offsetting the position that a brush dab is drawn at relative to the interpolated position) * color jitter output variable (possibly 3x, one each for H S L) * XYZ random output variable , where XYZ could be eg. size, hardness -- this is so that increasing input pressure could increase output jitter or output size randomization * some way of influencing weighting when more than one input is influencing an output.
We might make some more progress on this before 2.6, but not a complete fulfillment. Perhaps for 2.8 though? Setting 2.8 milestone.
Assigning this bug to myself for now. Cant promise much for 2.8 but there will be something.
With the current estimates we won't have time to do this for 2.8, moving to 2.10.
The only part of this currently not implemented is the curves. Since the previously used silder system for mixing ratios is removed, its a regression, if we move it to 2.10. Im putting it back to 2.8 for now. If there really is no time, the silder system needs to restored and then this bug bumped, but Id say its not much of an effort win over doing the curves and it would break the dynamics file compatibility.
Fixed in master. Now dynamics have working curves.