For the last month the main time I took the exams, because of this I did not do much for my project. Nevertheless, I implemented the basic primitives and tested them.
Let me tell you about them.
Water is the main part in watercolors. That’s why I started with this.
Wet map contains 2 types of information: water value and speed vector. If the first parameter is clear, then the second one needs explanations. Speed vector needs for rewetting our splats (take it in mind, I will explain what this later).
All this values Wet map contains in KisPaintDevice:
As the color space was chosen rgb16:
m_wetMap = new KisPaintDevice(KoColorSpaceRegistry::instance()->rgb16());
And there are information about water value and speed vector in pixel data.
But in this form Paint Device can’t visualize wet map correctly:
So I transorm Paint Device for visualizing wet map correctly (because it will be important for artists, I think). And now it looks like this:
My implementation is based on a procedural brush. Every brush stamp is a union of dynamic splats. Here you can see the behavior of splats:
Also I tested reweting (when splat go to flowing state from fixed state):
And as a final test I made splat generator for simulating strokes:
It’s high time to get splats to work in Krita. So I’m going to finish my plugin, and test splats behavior. But it will be primitive:
- Clear canvas for updating splats
- No undo/redo
- Stupid singleton for splat storage