|
|
|
Background, paper, layers, blobs
|
|
|
|
|
|
|
|
An image in Chalk is imposed upon a plane. Perhaps, using OpenGL,
|
|
|
|
we'll be able to rotate and elevate that plane at the users' whim.
|
|
|
|
If we can elevate the plane, there will be a direction of gravity
|
|
|
|
that naturalistic media can play with. Note: Wet & Sticky make it
|
|
|
|
possible to "paint" gravity. This looks like a fun feature, but
|
|
|
|
that needs to be done per-layer, and not for the whole image.
|
|
|
|
|
|
|
|
The plane is represented by the checkered background. Ideally,
|
|
|
|
we'd be able to set the color of the checks & the size, and the
|
|
|
|
size shouldn't change with the zoomlevel. The checks are one
|
|
|
|
pattern, repeated for the whole image:
|
|
|
|
|
|
|
|
O#
|
|
|
|
#O
|
|
|
|
|
|
|
|
Placed on the plane is optionally the substrate -- a naturalistic
|
|
|
|
representation of canvas, linen, paper, board, wood, levkas. Or
|
|
|
|
something weird, kopper, rock, sand... There is one substrate
|
|
|
|
per image. The substrate can be a small texture repeated for the
|
|
|
|
whole image, or as big as the image -- the latter is important
|
|
|
|
if we want to make it possible to perturb the substrate (think scoring
|
|
|
|
lines into levkas or erasing through the paper).
|
|
|
|
|
|
|
|
Provisionally, the substrate has the following properties:
|
|
|
|
|
|
|
|
height
|
|
|
|
smoothness
|
|
|
|
absorbency
|
|
|
|
reflectiveness
|
|
|
|
|
|
|
|
(Of course, layers below the current layer can influence these values
|
|
|
|
for layers on top of them.)
|
|
|
|
|
|
|
|
I have a hunch that the effect of these properties are really easy to
|
|
|
|
render using OpenGL, but not so easy using plain QPainter. In any case,
|
|
|
|
media layers will need to know these values at every pixel. We need
|
|
|
|
a really easy & fast way to acquire them.
|
|
|
|
|
|
|
|
We need to avoid the Corel Painter feature where you can use a naturalistic
|
|
|
|
paper and then paint away the paper structure, mixing the color of the paper
|
|
|
|
with your paint as if the paper were paint. So, we need to separate paper
|
|
|
|
and paint thoroughly.
|
|
|
|
|
|
|
|
On top of the substrate and background are the layers themselves.
|
|
|
|
Some layers are just color; others contain media. Media means color,
|
|
|
|
but possibly in a kubelka-munk colorspace, and properties like:
|
|
|
|
|
|
|
|
height
|
|
|
|
graininess
|
|
|
|
viscosity
|
|
|
|
wetness
|
|
|
|
smoothness
|
|
|
|
absorbency
|
|
|
|
stickiness (i.e, charcoal isn't sticky at all, acryl paints very
|
|
|
|
sticky)
|
|
|
|
|
|
|
|
Note: Impasto models thick, 3-d paint, where tufts of thick oipaint can
|
|
|
|
cast shadows...
|
|
|
|
|
|
|
|
Ordinary color layers (Shoup layers in the terminology of Cockshott) can
|
|
|
|
make use of the substrate parameters using special paint ops, and ordinary
|
|
|
|
color can be painted on a media layer, but the ordinary color paintops
|
|
|
|
do not deposit the above properties. Media paint just leaves color on the
|
|
|
|
color layers. We need to avoid at all costs the Corel Painter effect where
|
|
|
|
trying to use a pencil on a watercolor layer causes a nasty flow-impeding
|
|
|
|
useless error box to popup.
|
|
|
|
|
|
|
|
Media and ordinary layers can be grouped and mixed at will, together with adjustment
|
|
|
|
layers. Adjustment layers can also be attached to selection masks, per layer.
|
|
|
|
|
|
|
|
The composited layers is either scaled and color corrected, or color corrected and
|
|
|
|
then scaled, depending on whether the zoom > 100% or < 100%.
|
|
|
|
|
|
|
|
Note: do we need a visualisation layer on top of the layers for things
|
|
|
|
like wetness, reflectiveness, height? Perhaps this is the right place for that.
|
|
|
|
We need perhaps to add a light source or two, in OpenGL mode... I think
|
|
|
|
we do.
|
|
|
|
|
|
|
|
On top of the layers are what Xara calls blobs: the temporary droppings of
|
|
|
|
tools, like rubber bands, vector paths, brush shape cursors.
|
|
|
|
|
|
|
|
|