- From: Rik Cabanier <cabanier@gmail.com>
- Date: Tue, 7 Aug 2012 11:50:03 -0700
- 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>
- Message-ID: <CAGN7qDDCbgEAC9gC-YmGRqeyMMK0m1t4XioX0wBpD=78qYavUQ@mail.gmail.com>
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 UTC