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:26:51 +0200
Message-ID: <CAMvo67aEpa9K_+2biHK2mY37Vs-9FfnmshEOYTsmYC=g9Wv6NQ@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>
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 GMT

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