pentalis at gmail.com
Wed Jul 7 22:09:19 CEST 2010
Let's see. So there's this rough idea of giving impasto support to
Krita, let's flesh it out, shall we?.
I will use the term "layer" liberally here, I don't know about the
specific names that things receive in Krita, so I'll use my own
definition: layer is what the user can see in the interface screen
described as a layer. And if a layer is described as a sublayer and
displayed as one to the user, then it is a sublayer.
So far the way that makes the most sense to me, is to store impasto
information as an optional sublayer attached to the normal layers that
the user is accustomed to use.
As the attached diagram explains, when the user stacks many layers,
what's visible to him is the OVERLAP of the layer's colors, while,
intuitively, a stack of impasto layers should look like the SUM of all
the thickness in each layer.
I don't know how the final proyection --in the diagram, the layers
displayed after the "=" sign-- is calculated or created for normal
(color) layers, but for the impasto sublayers, I imagine it to be
calculated as follows:
1-- Each impasto sublayer is a simple 1-channel bitmap storing
"thickness" information (optionally, there could be negative thickness
in a layer, that doesn't happen in real life but digitally there's no
2-- The sum of all this thickness is computed for the "=" layer (let's
call it the "Result Layer")
3-- Information about the direction of a luminant is used to create a
"bumpmap" using the thickness information stored in the Result Layer
as a base.
4.- This proyection of the Impasto Result Layer is mixed with the
normal image the user would see if there was no impasto, to obtain an
The reason to let every layer have its own (optional) impasto sublayer
instead of using a single layer storing all impasto information, is
that doing so would cause layers to not be completely independent of
each other. Giving each layer its own impasto information would
preserve layer independence.
I also think there should be an universal option for all paintops to
do an impasto effect without a need to be explicitly implemented,
similar to the brand new "eraser" mode.
Please let me know of any concern you have with this approach.
Now, if you don't have any concern (and even if you do), what are the
classes I should study to start implementing this design?. Should I
create a new class?, if so, where should I store it?, what other
classes should it inherit?. Also a quick pointer on how the eraser
mode was created is appreciated.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 12289 bytes
Desc: not available
Url : http://mail.kde.org/pipermail/kimageshop/attachments/20100707/bc4c240f/attachment.png
More information about the kimageshop