Wanting to make some research on customizing brushes for a project of a vector app, I used Blender as a testbed for my research, you can see the end result here.
Along the way, I nonetheless encountered some oddities in the Dot / Square Material that prevented me to reach my goals. Here is what I found and some changes that I believe could render possible the creation of amazing brushes in Blender.
When using a line material for your stroke, the opacity you set is for the whole stroke but with a textured material the opacity if for each texture applied (what I often call Stamp).
Allowing to set a transparency for the whole stroke would be an immense addition for the creation of great textured brushes .
Unlike the world of drawing, Blender does not use a fixed grid (or pixels) to draw its points, and there’s a very good reason for that. Since you’re working in a virtual space—an infinite canvas—you can draw at any zoom level with the same level of detail. However, if you want to create brushes that more closely mimic the real world, having a fixed canvas space becomes quite handy. In the real world, you can’t zoom infinitely; your pen has a finite resolution.”
In Blender, if you create a basic brush using a dot material and a texture—a fundamental approach in the 2D world—it will behave very differently depending on your zoom level.
If you set the brush to function properly at a 100% zoom level, it will produce spaced prints when zoomed out and appear overly dense when zoomed in.
One solution to this issue is to apply a simplify modifier to the layer with a specified length. This recalculates the stroke with a fixed step between stamps, ultimately resulting in a look very close to what I was aiming for. In a certain way, it creates a fixed grid of size 0.004m here.
By setting a simplify modifier to sample with a very small length, each stroke looks great and maintains the same rendered style at any zoom level at which it is drawn.
However, the live rendering of the stroke while drawing at any zoom level other than 100% still differs from the final result which can be problematic and not particularly pleasing.
Activating Stabilize Stroke works really well and allows to create much smoother and nice curves.
However, the issue with stabilize and a dot material is that it only prints the filtered sampled positions and does not reconstruct dots between them.
You can address this with the same simplify modifier, but drawing only spaced dots becomes a really strange experience and strays far from our initial intent to create realistic brushes.
Possible Solutions
To create truly great textured brushes and provide a rewarding drawing experience, my idea would be to use the stabilizer by default, as it produces much nicer curves (set to its lowest values though. I would even go for lower if it was possible). We would then need to recalculate all the stamps between sampled positions based on a spatial distance set for each brush and or the document. This would be similar to what the simplify modifier does, but it would be done in real time, as we draw and with a spacing that could change on each stroke if wanted.
This approach is exactly what we do in Tayasui Sketches, and it could be done the same in Blender I guess. While it may not be easy, it should definitely be achievable, and perhaps we could offer our assistance.
The reconstruction process could also benefit from using a Chaikin filter to create a smoother curve, since currently the interpolation between the sampled positions is done with straight lines, which becomes noticeable on fast strokes as seen here.