DrPetter's homepage


OpenGL sketch/paint application. Currently in development. Download the latest version below if you want to try it out.

Some key features:

- Layers with lockable transparency, and visual layer selection
- Various layer blending modes
- Image filters
- Undo for paint operations and filters
- Layered animation with onionskin and frame export
- Friendly tooltips and help
- Tablet/mouse support
- 16-bit color channels with dithered rendering
- Arbitrary color channel shape/gamma, to allow various blending properties
- Multicore support
- Rotatable canvas
- Optional miniature canvas overview
- Convenient interface for adjusting color and brush properties
- Flood fill and other tools designed to aid comic/cartoon coloring
- Greyscale-to-transparency conversion for a purpose similar to the above
- Brush path smoothing using bezier curves to avoid polygonal lines
- Optional brush inertia to improve steadiness/flow
- Joystick pressure control as alternative to tablet (use an analog trigger for instance)
- Load/save PNG, JPEG and an internal lossless layered format

The file format is changed now and then. I try to at least increment file version numbers so that it won't crash, but there's no backwards compatibility with old formats. If you are working on something you'll be wise to keep a copy of your current program version until that image is completed.


CherryBrush_025.zip (179 kB)
Version 0.25
(last updated on 2009-09-18)

CherryBrush_024.zip (176 kB)
Version 0.24

CherryBrush_023.zip (176 kB)
Version 0.23

CherryBrush_022.zip (172 kB)
Version 0.22


Video 1: Fill demo.

Video 2: Animation demo.



The color channels use a non-linear mapping internally, which means that linear blending between two colors takes a curved path in normal RGB space. Depending on how this mapping is done, the results can vary from either boosting or diminishing relative contrast between channels, or boosting certain color components. The mapping shape is arbitrary, currently I'm using an interpolation between two exponents - one for the dark end and one for the bright. With an S-shaped curve, you can get what resembles high dynamic range effects. Any detail or color variation in very dark colors is preserved and amplified instead of mushing out towards grey/black. It obviously helps to have 16-bit precision here.
I still haven't explored this concept fully, and the current build is hardcoded to use a moderately curved mapping that shouldn't be too extreme for normal use. Later on I'll add options for converting between different preset mappings and defining your own.

Here are some images to illustrate what I'm talking about:

All these images have exaggerated effects to get the point across. For ordinary use you'd probably want more subdued settings.
In some aspects the effect resembles color burn or multiply, but the main difference is that this is true interpolation, so if you go to full opacity you will arrive at the specified target color regardless of what it is.

One of the main cool things is that you can easily darken something with a color bias. If you choose a near-black color that is slightly blue, the resulting mix when you paint on something will be a transition towards black but tinting everything towards blue while getting there. For human skin, it is highly effective to use a red or orange color for mimicking the warm effects of shaded flesh and subsurface scattering.
I hope that this can be used to counter the natural tendency for colors to wash out as you blend them, which normally happens with linear RGB. If you find a good non-linear mapping that boosts color saturation just slightly, it might balance this up without getting in your face.

Of course, with an opposite curve you can get decreased saturation in color blends, but that seems far less desirable.

Back to all projects

Page updated on March 25   2010