Here’s a test comparing additive and subtractive with smudge 0.50 and smudge_lock on, and gamma @2.4. Smudge_lock is a new setting to lock the smudge color as soon as the stroke starts. This makes it really easy to either mix color ratios exactly, like 50/50. 80/20,etc or just control the mix with pressure. Without Smudge_lock the original canvas color is quickly lost depending on smudge_length. Setting smudge_length to 1.0 doesn’t even grab an initial smudge color (maybe it would make sense to change that instead of making smude_lock setting).
Each block of six colors has one color mixed with rest in the block (ie, upper left, red is mixed with the other 5)
Here’s a couple more natural swatches using actual Winsor Newton oil colors (well, their RGB values)
For each set, the top gradient is Scott Burns’ SPD model. The middle the default Additive model, and the bottom is the Additive model with 2.4 gamma correction.
I’m probably a bit biased, but I think the Burns method looks a lot more natural, less saturated, and the intervals are much more consistent between the first and last steps (these are 10% intervals using a static smudge ratio). The default additive blend just seems too colorful, and the interval between the start and end is more abrupt, especially at burnt umber. Doing gamma correction at 2.4 for additive doesn’t seem to be quite right either, the interval at the end gets even worse. However, maybe it is more “correct” in a technical sense, dealing with light? Could it be that every program uses the 1.0 gamma because it seems to approximate a subtractive color model?
I’m going to post a few more swatches. The next step I think is to see if the memory requirement can be addressed. 2.3GB of ram is pretty crazy. Do we really need 256^3 SPD curves in memory, or can we get by with a smaller number representing the fully saturated colors, and then adjust the brightness within HSV or HCY, etc?
Here’s some more swatches, including some tints and shades with perm sap green.
Here’s another article discussing gamma and RGB mixing. Photoshop has a “Blend RGB colors using Gamma: xxx” option that sounds like the equivalent setting I made (called Smudge_Gamma). But the description of this setting seems to support the idea that the widely implemented “wrong” uncorrected gamma has been used because it is a somewhat workable substitute for a true subtractive model that artists expect. “Artistically correct” versus “colorimetrically correct”, as the Peachpit article put it. I think Scott Burns gives us a 3rd option-- to have both these things, Artistically and colorimetrically correct blending.
- Build and install the unofficial “Burns” branch of libmypaint: https://github.com/briend/libmypaint/tree/Burns
- Build MyPaint as normal from official sources: https://github.com/mypaint/mypaint
- Download and unzip rgb.txt (mirror) and place in the same folder as mypaint executable. (Alternative to downloading: you can generate the file using the generate.sh script inside the RGB folder inside libmypaint sources, but you must install Matlab or GNU Octave and it could take a couple days)
- Run mypaint and set a brush to use smudge settings with Smudge Add/Sub = 1.0. I recommend setting Smudge Lock to 1.0 and then choose a static smudge setting like 0.5 so you can mix the canvas color with the brush color in a 1:1 ratio. Then try other ratios like .33 (1:2), 0.20 (1:4) and 0.10 (1:9). Of course you could just control smudge with pressure, stroke, etc but you won’t know exactly what’s going on with the ratios.
- MyPaint will “hang” for quite a while as it loads the rgb.txt. You’ll see memory spike to 2.3 GB or so. After that it should be smooth sailing, the CPU usage is not dramatically different. Yes, the memory usage needs to be addressed after the proof of concept is validated
- Address memory consumption (but may be at the cost of increased CPU)
- Add a new Burns mode to the brushmodes here and here, so that hardness, pixel feather don’t re-introduce the wrong blend mode into the dab. Maybe a more generic brush setting called Add/Sub would make more sense, without cross-fading to keep things simple. That way, everything would be either additive or subtractive.
- Add Burns mode as a layer mode to MyPaint GUI. This will be really nice, similar to multiply mode, but actually behaving more like mixing paints instead of layered glass. Using layers would also be a way to preserve the provenance of a color. For example, you could have a bottom layer of yellow, and any layers on top would always contain a trace of that yellow color and be influenced by it. Whereas without layers that yellow color history is “lost” as soon as you mix with another color to create a new identity. Scott Burns suggested that each pixel store this identity composition, but that sounds like a couple orders of magnitude more resource intensive than the current overhead
Here’s an apple I painted to try to show how easy it is to get subtle colors now. I think partially it is because the mixing is more linear, so it is much easier to control the mix ratio with pressure. It feels more natural and forgiving. This is just a basic brush with jitter and smudge controlled by pressure.
Here’s a youtube clip to show a comparison of cyan on red, which is a very hard color to mix on the computer. Not even Corel Painter seems to do any better than MyPaint. But with Scott Burns mode the colors mix naturally and produce many subtle hues
Here’s another test smudging some of the default mypaint “water color” palette colors.
I had a rounding error that caused the brush to get ever-so-slightly lighter the more you smudged-- and I actually liked the effect. So I fixed the rounding error but you can get the same effect by adjusting the smudge_gamma a tiny bit from 2.4 up to 2.41-2.45. I demo the difference in this video
Here’s another demo. Who needs a palette when you can just mix paint below the image :-). Most of the colors were just picked straight from the “watercolor” palette and blended directly on the canvas.