Reputation: 175
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.
Upvotes: 14
Views: 10927
Reputation: 1
not as a programmer but as an artist and an avid reader I have the following suggestion: use the image "subtractively" from a solid line. Not additive as if its own line. By doing this you preserve corners as they already exist and then the negative space of the image will effect the texture of the line over all. No more jagged corners and the line looks smoother.
Also I like the idea presented by the article "Simulating Artistic Brushstrokes Using Interval Splines" linked by Manilow (THANK YOU!): "Hsu et al. introduced “skeletal strokes”, deformable images that can be anchored, scaled, or transformed by multiple factors at each control point"
I think this is the best way to handle sharp turns. Think of those old word art things where you could adjust arches and curves in them and the text would conform to that, but with a texture image. As an artist I am grateful for anyone not satisfied with cheezy "traincar" lines. Thank you all.
Upvotes: 0
Reputation: 72402
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".
Upvotes: 8
Reputation: 1242
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.
Upvotes: 0
Reputation: 19005
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.
Upvotes: 7
Reputation: 5694
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.
Upvotes: 0