views:

284

answers:

5

I'm trying to write an application that can be used to create pictures that look like paintings using simulated brush strokes. Are there any good sources for simple ways of simulating brush strokes? For example, given a list of mouse positions that the user has dragged the mouse through, a brush width and a brush texture, how do I determine what to draw to the canvas?

I've tried angling the brush texture in the direction of the mouse movement and dabbing several brush texture images along the path, but it doesn't look great. I think I'm missing something where the brush texture should shrink and grow on corners.

Any simple to follow links would be appreciated. I've found complex academic papers on simulating e.g. oil paints but I just want a basic algorithm to use that produces OK results if possible.

A: 

The way I can think of would be to figure out the strength of the brush at each point in the line, and layer many uniform textures over it. Each texture would have an alpha value corresponding to "how hard" the brush is pushing down on the canvas at that location. The function to figure out how hard the brush would be pushing down would probably have to be correlated with the input.

If you go into a tool like Photoshop or GIMP, and observe how it implements the paintbrush tool, it should be pretty easy to simulate something close to it.

Andrei Krotkov
I've really copied what gimp has at the moment and gimp doesn't seem to do paint simulation well at all. I've already got settings for opacity and spacing and the angle of the stroke follows the mouse. Cornering doesn't look right as the brush shape doesn't change, just like in gimp.
DrRobot
+2  A: 

Here's a classic from 1989 - Dynadraw, by Paul Haeberli. It uses a simple dynamical model to fill in a smooth the raw mouse positions.

While the strokes are drawn incrementally as polygons, you should be able to use the points generated by the dynamic filter to place copies of your brush texture.

brainjam
Thanks, this looks interesting! I'm curious if there is a similar algorithm specifically for paint strokes.
DrRobot
@DrRobot, I'm not sure what you mean by that. Dynadraw *is* specifically for paint strokes, no?
brainjam
Oops, I thought it was a simulation of a pen-like tool... :-/ Thanks.
DrRobot
@DrRobot, fair enough, it's pen-like. But as I said, should be easy to convert to brush-like.
brainjam
A: 

Check out NPRQuake, they might have an effect you like.

genpfault
+2  A: 

There's a large literature on Non-Photorealist Rendering. The main books are "Non-Photorealistic Computer Graphics" by Strothotte & Schlechtweg and "Non-photorealistic Rendering" by Gooch & Gooch. They discuss brush strokes. There are several of papers that deal with simulated brush strokes. See for instance "Simulating Artistic Brushstrokes Using Interval Splines".

lhf
A: 

Not exactly what you're asking for, but I've found that applications that use line smoothing (like Adobe Ideas on the iPad or Doozla on the Mac) make for more realistic and eye-pleasing brush strokes, as you don't get the un-natural "jaggies" associated with tracking mouse movements perfectly.

Martin Cron