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

Re: MASKING AND COVERAGE: AGAIN

From: Bob Holmes <rangsynth@gmail.com>
Date: Tue, 7 Aug 2012 18:36:37 +0200
Message-ID: <CAMvo67buOmOObYok8vauX7eOC2ksgo_C-85yZMN8m8pu6KJbZQ@mail.gmail.com>
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>
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.

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 16:37:06 GMT

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