1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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.
|