- From: Bob Holmes <rangsynth@gmail.com>
- Date: Tue, 7 Aug 2012 18:26:51 +0200
- To: Rik Cabanier <cabanier@gmail.com>
- Cc: Dmitry Baranovskiy <baranovs@adobe.com>, Nikos Andronikos <Nikos.Andronikos@cisra.canon.com.au>, "www-svg@w3.org" <www-svg@w3.org>
On 8/7/12, Rik Cabanier <cabanier@gmail.com> wrote: > Hi Bob, > > is your point the following: > - if I have an image with alpha that I want to use as a mask Yes. Note that this image might be the result of blurring a polygon for example to produce a new image that is then used as the mask. > - if I have a alpha on the group/shape that I want to mask Not quite. I mean where the polygon is visible then the mask value is 1, otherwise 0, except at the edges where antialiasing makes it less than 1. > Then: > I can multiply that global alpha with the mask alpha Yes. Perhaps it is better to call it COMPOSITE INPUT ALPHA instead. Just a value used to affect every single incoming pixel into the compositor(by compositor I mean the whole function of blending and compositing). The reason I ask this is because it is important to my optimization strategies where I can do lots of optimizations depending on the relationship between the COMPOSITE INPUT ALPHA, the actual alpha of the incoming source pixel, and the premul status of the incoming pixel. So technically its like a step that happens before the blending call. For genuine GLOBAL ALPHA you will need a property maybe called COMPOSITE OUTPUT ALPHA that does a full on blend of the output of the composite operator with the original destination pixels to create the same "opacity" effect for all blend/composite combinations. I currently have two properties called "SrcBlend" and "DstBlend" that happen after the composite operator to control the final blending between the output of the composite operator and the unmodified source pixel, and then the unmodified dest pixel. This post composite operator allows me to blend as much of any channel with source or dest regardless of the composite or blending function. So as far as I can tell the opacity feature is something done after the composite operator, regardless of input masking? http://www.w3.org/TR/SVG11/masking.html#ObjectAndGroupOpacityProperties > > Rik > > On Tue, Aug 7, 2012 at 3:15 AM, Bob Holmes <rangsynth@gmail.com> wrote: > >> This helps although I was referring to the concept of a "source mask". >> Such as the values produced when drawing a polygon or some text. In >> the document the closest thing to it might be the concept of the >> "shape" as mentioned slightly in the section on coverage. >> >> So you have a bitmap which is the source pixels, and then the >> compositor. So in between is the polygon shape, which I was referring >> to as mask. The poylgon values are used to adjust the alpha of the >> source pixels. >> >> So the reason I think that the "shape" value should be applied just >> before the blending step in the compositor is because of how different >> requirements for premul can be combined as one. If the source pixels >> are premul and the mask/shape value is not 1, the shape/mask value can >> be applied in one multiply when unpremultiplying the source pixel >> before the blender step. >> >> If a global alpha property was also present then it can also be >> combined together with the mask/shape value and the unpremul for >> example. >> >> If you look at libpixman then that is how they are doing it I think. >> Agg 2.4 also seems to do the same thing. I just saw in AGG that they >> were combining it differently for one or two blend modes and wondered >> if it was "a part of the standard". But from the notes on source pixel >> shape I think it is not. >> >> Thanks. >> >> On 8/7/12, Dmitry Baranovskiy <baranovs@adobe.com> wrote: >> > Hi Bob, >> > >> > I guess this is the same thing as using opacity on elements and on the >> > group. It behaves differently. And because image is worth a thousand >> words >> > here is an example: http://dmitry.baranovskiy.com/group-masking.svg >> > >> > View it in anything, but Safari. Applying mask to each element >> individually >> > cause them to “interact with each other”, while applying it to the >> > group >> is >> > different. >> > >> > Hope it helps and I am not stating the obvious. >> > >> > best, >> > Dmitry >> > >> > On 07/08/2012, at 8:10 AM, Bob Holmes wrote: >> > >> > I am at the point now where I have zero confusion except this masking >> > business vs. grouping. Any further comments would be appreciated on >> > this. >> > >> > MY ORIGINAL COMMENT >> > For modes like DstIn masking would thus have no effect. >> > >> > The blend function for RGBA excepts a value from 0 to 255. >> > I also have a global alpha value which affects all alpha. >> > >> > My theory is that no matter the blend mode or combine mode that source >> > pixels can simply have the alpha adjusted by multiplying with both >> > global alpha and the mask value, which can optimally be combined prior >> > to actually calling into the blenders. >> > >> >>>No, if you have grouping, you can't simply redistribute alpha. That >> >>> will >> >>> make the graphics interact with each other which is usually not >> desired. >> > >> > What does it mean "can't simply redistribute the alpha"? >> > >> > If I take a masking value of 255 and simply multiply it with the source >> > color alpha. The source color does not change. But for the edges of the >> > polygon where it is antialiased the mask value might be 64 for example, >> so >> > multiplying that with the alpha of the color and then calling into the >> > blender/composite function is surely the way to go? >> > >> > Any notes on how the grouping affects this simple alpha masking will >> help. >> > >> > >> > >> > >> > >> > >> > >> > >> > >> >
Received on Tuesday, 7 August 2012 16:27:24 UTC