W3C home > Mailing lists > Public > www-svg@w3.org > August 2012

Re: MASKING AND COVERAGE: AGAIN

From: Rik Cabanier <cabanier@gmail.com>
Date: Tue, 7 Aug 2012 11:50:03 -0700
Message-ID: <CAGN7qDDCbgEAC9gC-YmGRqeyMMK0m1t4XioX0wBpD=78qYavUQ@mail.gmail.com>
To: Bob Holmes <rangsynth@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 Tue, Aug 7, 2012 at 9:36 AM, Bob Holmes <rangsynth@gmail.com> wrote:

> So your original reply that masking cannot be combined with opacity is
> correct as you stated. So I specified the question or concept
> incorrectly to begin with. What I was referring to was simply a
> function of alpha adjustment as the first step of compositing the
> pixel. The global alpha I have referred to is then not the same value
> as the "opacity" of groups etc...
>
> And again the reason I brought it up...
>
> Example: Fill A Polygon
> 1) The polygon mask/raster produces lines of alpha values where the
> polygon is visible. I call this the mask value. In RGBA from 0 to 255.
> Antialiased polygons for example have less than 255 values at the
> edges.
> 2) Where the value is not zero, the source pixel is fetched from the
> source ink or source bitmap or whatever you want to call it.
> 3) then the source pixel and the mask value are sent together to the
> compositor.
>
> Because I have the "mask value" from the polygon(but could just as
> easily be from a bitmap), and I also have a global value to apply to
> alpha of all incoming pixels in the compositor, and because there are
> premul considerations, the optimizations are more because the values
> can be combined. Like for SrcOver with normal blending a premultipled
> input can be multiplied once with the result of multiplying the mask
> value and what I was referring to as global alpha. If I did the
> multiply of the pixel with the mask value before entering the
> compositor it would require extra instructions.
>
> I hope that is clear and explains more fully what I was asking.
>

Yes, you can optimize your code this way, but you have to be careful.
Alpha on the group is applied after masking, filtering and blending. So, if
there is a filter or blend mode, you can no longer do this optimization
since it will affect how your group will render.

Rik


>
> 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
> > - if I have a alpha on the group/shape that I want to mask
> > Then:
> > I can multiply that global alpha with the mask alpha.
> >
> > 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 18:50:34 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:51 GMT