GSoC proposal: comic related brush engines and impasto implementation

JL VT pentalis at gmail.com
Tue Apr 6 21:42:27 CEST 2010


Thank you all for your helpful comments. As requested, I've fixed a
few parts of the application, namely:
--I decided for a way to implement the brush engine for hatching and
halftones (it'll be a new paint operation, to avoid overloading a
single paintop).
--Completely revisited impasto description.
--Detailed timeline for both features.
--I made the part about incomplete projects more ambiguous  =P

So, here it is, the revisited proposal:


============================Introduction============================

Krita is a raster graphics editing application whose aim is to offer an
integrated solution to create images from scratch. This puts the application in
competition with commercial solutions like Corel Painter and other
artist-focused applications like Art Rage and SAI.

The target audience for krita is, therefore, any artist who works creating art
from scratch. This includes fine artists who wish to experiment with digital
media, comic artists, illustrators, etc.

Desirable new features for Krita include functionalities that simulate a real
artist's workspace, like the ability to turn the canvas without touching the
image data, mirroring, realistic color mixing, impasto-like effects, brush
engines simulating real media, colorspace-aware color pickers, among many
others.


================Project Proposal and Background Information================

The goal of this project is to improve Krita's simulation of real media,
through new special brush engines or filter operations (see below), and
implementation of impasto effect simulation.

The new features to implement are of interest to both comic artists and
painters.

------Features to be implemented------

1) A versatile and thorough halftone and hatching mechanism.

The goal of this feature is not to merely create a filter to create halftones
from a color or simulate printer dot patterns (even though that may be part of
its functionality). Its objective is to allow the artist to have access to a
digital tool which, with simplicity, simulates the versatility of real life
tools for halftoning, hatching and other patterns. For example, to create images
like this:
http://derbyimages.woot.com/724994/8a44b08d-1d87-4c08-a4f2-535e1785e4f7.jpg

Where the use of halftones could be interpreted as a technical necessity but as
an artistic choice as well.

Manga artists make exhaustive use of preprinted patterns, and there's entire
product lines devoted to such end[1]. Many consist of large sheets of contiguous
pattern to be cut out from the sheet and pasted on the desired location, often
by merely applying pressure on the desired spot (similar to this example
image[2]).

Many different patterns can be achieved producing very interesting effects.
Such patterns are even individually numbered by manufacturers and presented to
users in sample images:
http://www.mangablog.es/imagenes-posts/maxon_01.jpg

The tool to be developed ought to make it possible to achieve just as many
patterns as real life tools permit, but with the increased ease and convenience
of a digital workspace. This can be achieved by creating specialized filters,
and refining the already existing filter brush engine such that both tools
integrate and work seamlessly; creating a completely new, parametric brush
engine is another option. For this project, the latter will be prefered, to
avoid feature overload in a single paint operation (brush), something which
could prove ultimately unintuitive to final users.

The tool must also include a pattern generator for halftones and hatching to be
readily usable. Parameters to accept user input would include, at least:
--For halftones, spacing between dots, angle[3], max and minimum dot size. The
ability to choose the source of darkening: whether it is caused by dot density,
greater dot diameter, or adding more dot patterns in different angles.
--For hatching, spacing between lines, line thickness, angle. The ability to
choose the source of darkening: whether it is caused by line density, or
greater line thickness, or adding more line patterns in different angles.

If time permits, the ability to create more patterns procedurally[4], or to
control more parameters in the same types of patterns, can be implemented, for
example, to obtain the curved line patterns that are present in hand drawings
like this:
http://longstreet.typepad.com/.a/6a00d83542d51e69e201156e487aa5970c-500wi

While tutorials to create halftone patters using the already existing tools in
Photoshop[5] and The GIMP[6] already exist, such constrained method
to obtain halftone patterns is what this tool purports to substitute.

Summarizing, this first feature will consist of a new set of filters, with
parameters to generate patterns, and the ability to apply such patterns on a
selection. Such filters must be applicable with a brush in order for them to
be intuitive and usable. To avoid feature overload in a single paint operation,
this functionality will be implemented in a new brush engine specially prepared
to make use of those filters, ready to accept input like stylus pressure and
angle and to turn it into pattern parameters.


[1] http://www.letraset.com/manga/shopdisplaycategories.asp?id=2930&cat=
Screentone+Single+Sheets
[2] http://images2.makefive.com/images/200905/01e35ede59597eac.jpg
[3] http://2.bp.blogspot.com/_lNzlqVMcIj8/ShnkMi1UQWI/AAAAAAAAAoA/IX76dAXXInI/
s400/Screen+angles.jpg
[4] http://www.fao.org/docrep/003/T0390S/T0390S86.gif
[5] http://snowbunnyluv.deviantart.com/art/Tutorial-Colour-halftone-31323611
[6] http://istarlome.deviantart.com/art/halftone-effect-in-gimp-65731702



2) A system to simulate thickness on the canvas: impasto-like effects.

The goal of this feature is to simulate the bumpy texture of thick paint[7]
applied on the canvas, as well as the intentional addition of sculpting media to
achieve texture[8]. Both techniques are refered to as impasto.

To confer the artist with as much flexibility as a real impasto, the simulation
of volume caused by both paint thickness and sculpting media must be simulated.
Sometimes, as can be seen in the first video[7], artists decide to scratch part
of the paint away from the painting to achieve a special effect. This scratching
is one of the many ways an artist can modify the thickness of his already
applied media. The same interaction must be possible in this simulated impasto
for it to be appealing to the traditional artist (and feel natural).

At the very least, implementation of impasto-like effects must allow:

A--Addition of thickness to the bump map.
B--Removal of thickness.
C--Alteration of this thickness with paint operations (brushes).

C would permit, for example, to not only produce a hairy brush pattern and
color with the available brush engine, but to also achieve the texture it would
imprint on the canvas if it were wet with paint, or if it were instead dipped on
sculpting media (something that would be completely impractical in real life, as
it would harm the brush, but is perfectly possible in a virtual environment
without the undersired secondary effect).

Impasto effects allow the user to better control the way reflected light looks
on their painting. This interaction with light must be simulated as well,
allowing the user to decide where the incoming light source comes from (angle
in the Y and X axis).

Finally, the simulated impasto effect must be readily disactivable, therefore,
it has to fit in its own layer or in mask layers. Both approaches have their
advantages, and to fully simulate impasto, both have clear uses: an own layer
can better simulate sculpting media applied before the paint, and mask layers
(more properly called "undermask" layers) can individually simulate the paint
thickness in each layer. As a result, both must be implemented.


[7] http://www.youtube.com/watch?v=su-T2IqcOsA
[8] http://www.youtube.com/watch?v=KuP7Ta3Pero



==============================Timeline==============================

Given my particular circumstances (see 'about the applicant'), this project is
going to be taken with the same responsibility as a full time job.

Work is due to begin as soon as I learn whether my proposal has been accepted.
While the exact time a coding task takes is a function of many factors, here
is an estimate timeline of project goals:

April 26: Begin.

April 26 to 2nd week of May: Design the architecture of the halftones and
hatching framework. Code and documentation will be read to prepare an
implementation design to follow in the development of this tool; the API to
create will be designed, as well as the GUI to interact with the tools.

2nd to 3rd week of May: Review the design with Krita developers for tight
integration with the application as well as usability consultation with users.
The final refinements of the Hatching and Halftones blueprints are finished.

For the rest of May and until the 3rd or 4th week of June, the following tasks
will be completed in order:
A--Implement the base filter class.
B--Implement the basic set of patterns for halftones.
C--Implement the halftone filter GUI.
D--Debug, test, refine, and tweak with feedback.
E--Repeat A to D for hatching.
F--Refine the basic pattern generator to allow for more complicated patterns,
including curved lines and stacked hatching (lines in more than one direction).
G--Debug, test, refine, and tweak with feedback.
H--Create a paint operation (brush engine) to make the best use of the filters,
including the transformation of pressure sensitivity, tilt and speed into
filter parameters defined by the user (tight integration).
I--Debug, test, refine, and tweak with feedback.
J--Create user documentation.
K--Deliver (incorporate into Krita trunk if developers agree).

3rd or 4th week of June: Design the architecture for the Impasto effect, just
as with the halftone and hatching tool.

4th to 5th week of June: Review the design with Krita developers for tight
integration with the application as well as usability consultation with users.
The final refinements of the Impasto effect blueprints are finished.

For the rest of June and until the 13th to 16th of August, the following tasks
will be completed in order:
A-- Implement the bottom impasto layer.
B-- Implement basic editing tools for the layer.
C-- Implement light source lumination and controls.
D-- Debug, test, refine, and tweak with feedback.
E-- Implement impasto mask layers.
F-- Implement advanced editing tools for impasto layers (point 2.C in Proyect
Proposal and Background Information).
G-- Debug, test, refine, and tweak with feedback.
H-- Create user documentation.
I-- Deliver (incorporate into Krita trunk if developers agree).


=========================About the Applicant==========================

I'm a graduated chemistry student about to obtain my professional title (which
is obtained after 5 years of education, graduation requires 4), currently
enrolled in a diploma on intellectual property (as part of a master's degree)
in my alma mater (University of Santiago of Chile). I've been in contact with
computers since I have memory, when I had access to a PC-1 computer[9] with
MS-DOS. My first program was made in Visual Basic when I was 10 (it was a dice
roll simulator). Further experience includes the creation of a dynamic website
navigator with PHP and Javascript, and an hexagon based panel for a PyGame-based
game. This game is a work in progress. On the other hand, available for review
is the source code of my recent command-line dice roll analyzer, made in
C++[10].

I've used free software for years and my motivation to join the Google's Summer
of Code is multiple. Partly it is my drive to give something back to the
community that has given so much to me, partly it is about improving a tool I
need to use for professional work (in a future personal project), and I need the
stipend to sustain myself.

The career I chose to study, while having a great potential market for jobs, is
not particularly attractive to employeers in my country. We chemists are often
mistaken for technicians, and as a result are often offered a lower wage and
less interesting field of work than we'd expect.

For my first job I'd rather do something intellectually stimulating, well paid,
and for an institution I love, than the nearly complete opposite that the
current job market offers for me and fellow chemists. This project fulfills all
those requisites.


[9] http://www.seasip.info/VintagePC/prodestpc1.html
[10] http://pentalis.org/Analizator.cpp


More information about the kimageshop mailing list