Add blend modes and blend groups for compositing#31162
Add blend modes and blend groups for compositing#31162ayshih wants to merge 20 commits intomatplotlib:mainfrom
Conversation
dee65fa to
37b0b9c
Compare
|
This looks interesting. Thanks for working on it. Since I’m not into the topic I can dare to ask the stupid questions:
|
Yup, that is correct: the history of how that "background" was constructed has no bearing on how the next Artist is blended in using its specific blend mode. It's also important to remember that that the "empty" background of an Axes is solid white, and thus not actually empty as far as these blend modes are concerned. For example, using "screen" to blend in an image on a truly empty background will just return the image, but on a white background will return solid white, which can make it look instead like the image call failed. That's why I turn off the face colors in my example above. What I still need to investigate is how my changes interact with collections of Artists. A user may want "over" blending (the default) within the collection before using a different blend mode for the collection as a whole.
Yes. In principle, the transformation functions for the hue/saturation/color/luminosity operators could have more than one possibility, but in practice I think everyone has simply used the same functions for decades (as defined in the PDF specification). |
37b0b9c to
bb554e7
Compare
2221d69 to
6d49bcf
Compare
|
This is pretty cool :-)
Actually I suspect that another possibility is to want some nonstandard blending between multiple artists, then "over" blending of the result over the background. In general I suspect this would be related to adding support for temporary, intermediate rendering buffers, which is also something that would be useful for other purposes e.g. contour label overplotting (#26971 (comment)). |
|
By the way, I decided to rename "over" to "normal". That mode of blending is referred to as "normal" often enough, and it makes it readily apparent to users that it is the standard choice (and the default). |
6d49bcf to
63f53c9
Compare
63f53c9 to
c9552d5
Compare
f49e8d0 to
f7af1e4
Compare
f7af1e4 to
d313054
Compare
d04f663 to
c287d35
Compare
If I'm following that correctly than the Which is fine/ a good example to post to the gallery, just thinking through where/how this is exposed. |
b04119a to
a12b397
Compare
|
Per the discussion at today's dev meeting, the renderer methods to open/close an isolated transparency group are implemented as new methods My niggling concern is that both |
|
The problem is that the main(?) point of open_group is to allow naming of svg groups ( |
|
Yeah, I think you're right on not putting in a warning. The false positive of emitting a warning when someone legitimately wants to name an SVG group something totally reasonable like "overlay" is not worth mitigating the hypothetical confusion of someone mistakenly calling |
|
I've implemented two more Porter-Duff compositing operators – "source" and "clear" – for both Agg and Cairo backends, but I think "source" is too confusing of a name. Since "source" provides the similar behavior as a knockout group, I have renamed it "knockout" for |
This reverts commit ed6bcb1.
This reverts commit 145a1f62864401e2e7ea73a477bfaa8545aeb524.


PR summary
This PR adds support for blend modes beyond alpha blending (e.g., "screen" or "hard light"), so closes #6210. With this PR, all artists can specify
blend_mode, and they are supported by Agg-based and Cairo-based backends, and mostly supported by SVG/PDF/PGF backends.Of course,
mplcairoprovides access to these blend modes, but this PR provides blend-mode support without needingcairo.Update: This PR uses this functionality to fix a long-standing bug (e.g., fixes #27016) with Agg rendering of Gouraud shading, where the edges of triangles would become visible when transparency is involved.
Update: This PR adds support for isolated transparency groups for every backend that supports non-normal blending.
color dodge, color burn, hard light, soft light,
difference, exclusion
Agg showcase
Gouraud shading can look wrong with some blend modes, for the same reason it can look wrong under normal blend mode when alpha < 1, due to overlapping trianglesNow fixedCairo showcase
Gouraud shading is apparently not supported by the Cairo backend, so I commented out the pcolormesh callI added support for Gouraud shadingWindows
macOS
SVG showcase
PDF showcase
Figure_1.pdf
PGF showcase
Figure_1.pgf.pdf
Generating code
Still to do:
Put off to future work:
pcolormesh.snaptoFalsecontourf()/pcolor()/pcolormesh()to beTruePR checklist