RE: SVG 2 rendering model

> If the group is not isolated, the blend should include the whole stack.
> Why would you then go and remove that influence. Why not just make the group isolated?

The influence is not removed. It is still there where you drew the source shape. 

> The SVG rendering chapter makes groups isolated
> http://www.w3.org/TR/SVG/render.html#Grouping
it does not. That is just a description how the group buffer is initialized. We're not changing that.

> You could still use BackgroundImage and BackgroundAlpha in an isolated group.
yes, but they don't look outside of the isolated group. This is how it is spelled out in the filters specification.

> It's the definition of SourceGraphic <https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#SourceGraphic> 
> that is subject to change with non-isolated groups as the input to the filter is no longer clear since by definition 
> a non-isolated group is influenced by what it is composited onto.
no, look a bit down in the spec. Background-image/alpha are different with group isolation.

________________________________________
From: Nikos Andronikos [nikos.andronikos@cisra.canon.com.au]
Sent: Monday, August 06, 2012 7:15 PM
To: Rik Cabanier
Cc: public-svg-wg@w3.org
Subject: Re: SVG 2 rendering model

On 7/08/2012 11:01 AM, Rik Cabanier wrote:
Hi Nikos,

With non-isolated groups you still have the shape channel that tells you what part of the buffer is source.
This will let you remove the influence of the backdrop so you can feed the shape into the filter effects.
You could do that. But wouldn't that be confusing for a non-isolated group?
The whole point of an isolation group is to isolate the blend to within the group.

If the group is not isolated, the blend should include the whole stack.
Why would you then go and remove that influence. Why not just make the group isolated?

I don’t think this will break anything since no one implement background in filters.
In addition, the filters spec does NOT make groups isolated. Look here: https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#AccessBackgroundImageSVG
This is non-isolated behavior…
The SVG rendering chapter makes groups isolated
http://www.w3.org/TR/SVG/render.html#Grouping

The BackgroundImage<https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#BackgroundImage> and BackgroundAlpha<https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#BackgroundAlpha> inputs are different to the group backdrop for composting, as they are just input images to the filter and can be used at any stage in the filtering.
You could still use BackgroundImage and BackgroundAlpha in an isolated group.

It's the definition of SourceGraphic <https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#SourceGraphic> that is subject to change with non-isolated groups as the input to the filter is no longer clear since by definition a non-isolated group is influenced by what it is composited onto.


From: Nikos Andronikos [mailto:nikos.andronikos@cisra.canon.com.au]
Sent: Monday, August 06, 2012 3:46 PM
To: public-svg-wg@w3.org<mailto:public-svg-wg@w3.org>
Subject: Re: SVG 2 rendering model

Hi Rik,

I don't think we're on the same page here.
What you're proposing is a method of removing the influence of the backdrop on filter effects for non-isolated groups.

I tend to think that when a group is non isolated, the backdrop should appear in the filter effects.
If you are applying a multiply blend mode on a non-isolated group, that means you want the backdrop to have some effect on the colour of the elements within the group. So, in this case, the filter effects should be applied to the result of compositing the group backdrop + all the group elements.

In SVG 1.1, all groups are isolated - the filter effects only apply to the composite of group elements.

With non-isolated groups being the default in the Compositing and Blending specification, and isolated groups being the default in SVG 1.1, the issue is that the default behaviour is different across the versions. So a particular SVG file, rendered in SVG 1.1 will give a different output to one rendered with SVG 2 and the new Compositing and Blending spec.

If we never want the backdrop to appear in the filter effects, we should just force groups with filter effects to be isolated. Really, that's how filter effects was designed so it might make the most sense.

It would be good to have some comments from the Filter Effects editors.
Perhaps we could discuss this at this weeks telcon?

On 3/08/2012 5:07 PM, Rik Cabanier wrote:
Hi Nikos,

Thanks for the reply. I agree that a buffer is needed; the need for group alpha is implies it.

Reading the compositing spec, it has the following wording:
A compositing group is rendered by first compositing the elements of the group onto the inital backdrop.

This is incorrect. The elements composite with each other and during the composite they will look at the backdrop.
For the first element this is equal to the group backdrop. The second element = group backdrop + first element, etc.
The first element composites into an empty buffer; the second composites on top of the first, etc.

This is what is causing your concern with filters since the backdrop is pulled in and becomes filtered.
Another side effect is that the non-standard compositing modes are no longer group invariant with this approach (per the SVG Open document).

With my proposal, you get group invariance and filters will do as you expect.

I don’t think we need to change much. Just some of the wording in the intro to compositing groups.

What do you think?

From: Nikos Andronikos [mailto:nikos.andronikos@cisra.canon.com.au]
Sent: Thursday, August 02, 2012 9:54 PM
To: Leonard Rosenthol
Cc: Rik Cabanier; public-svg-wg@w3.org<mailto:public-svg-wg@w3.org>
Subject: Re: SVG 2 rendering model

On 3/08/2012 6:08 AM, Leonard Rosenthol wrote:

On 8/2/12 3:34 PM, "Rik Cabanier" <cabanier@adobe.com><mailto:cabanier@adobe.com> wrote:



Hi Leonard,



The problem with making isolated the default is that it will impact

performance for all of the normal cases.

Isolated is faster since you don't have to composite all the group to get

the background.



But you DO have to create an "offscreen buffer", composite the entire

group into that, and then blit the entire "offscreen" back.   So you're

clearly using more memory and time than simply putting bits into the

existing buffer.





The compositing spec specifies the order in which filters and compositing

happens.

The filters spec should say if the stacking group it creates is isolated

or not. I believe people don't want it to be isolated (and can post some

examples if needed)



But how would you apply a filter to a group that has already been blended

into the background?  The result is certainly going to be different -

which may be good or bad.



I would think that given a group with a filter applied to it, you have to

make that specific group isolated, apply the filter, and only then blend

it to the background.
Exactly, and in the default case the output would be different between SVG 1.1 and SVG 2, which I consider bad.

Filter effects currently relies on the SVG 1.1 compositing model

>From http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html:
"The compositing model follows the SVG compositing model<http://www.w3.org/TR/SVG11/render.html#Introduction> [SVG11]<http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#SVG11>: first any filter effect is applied, then any clipping, masking and opacity. These effects all apply after any other CSS effects such as ‘border’. As per SVG, the application of ‘filter<http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#filter>’ has no effect on hit-testing."
Note: for groups, that means first composite the contents of the group together, then apply any filter effect, then clipping, masking and group opacity.

That was fine when you could composite the elements within the group in isolation, as was the case with SVG 1.1
But the default in the new model is isolated=false.

With isolated = false, you cannot composite the group contents together, apply the filter effects and then composite the result with the document. If you do and you are using a combination of operator and blend mode that is not group invariant you will get the wrong output.

I've attached an SVG file which demonstrates the output under each rendering model.

-----------------------------------------------------
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"<http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd>>
<svg viewBox="0 0 1350 540" xmlns="http://www.w3.org/2000/svg"<http://www.w3.org/2000/svg> version="1.1">

  <defs>
    <filter id="ShiftBGAndBlur" filterUnits="userSpaceOnUse" x="0" y="0" width="1200" height="400">
      <feOffset in="SourceGraphic" dx="0" dy="125" />
      <feGaussianBlur stdDeviation="8" />
    </filter>
  </defs>

  <text>SVG 1.1</text>
  <text x="280">SVG 2</text>
  <g transform="translate(0, 20)">

  <g transform="translate(0,0)" enable-background="new">
    <text>Firstly the contents of the group are composited together</text>
    <desc>Firstly the contents of the group are rendered into a transparent black buffer B</desc>
    <g>
      <circle cx="125" cy="75" r="45" fill="green" opacity=".5" />
      <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5" />
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>

  <g transform="translate(0,280)" enable-background="new">
    <text>Then the filter effect is applied to the composite</text>
    <desc>Then the filter effect is applied to the buffer B</desc>
    <g>
        <g filter="url(#ShiftBGAndBlur)">
          <circle cx="125" cy="75" r="45" fill="green" opacity=".5"/>
          <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5"/>
        </g>
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>

  <g transform="translate(0,560)" enable-background="new">
    <text>then the result of the filter effect is composited onto the page</text>
    <desc>then the buffer B is composited onto the output</desc>
    <g>
        <rect x="25" y="25" width="100" height="100" fill="red"/>
        <g filter="url(#ShiftBGAndBlur)">
          <circle cx="125" cy="75" r="45" fill="green" opacity=".5" />
          <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5" />
        </g>
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>

  <clipPath id="cliptoself_clip">
    <circle cx="125" cy="75" r="45"/>
  </clipPath>

  <g transform="translate(270,0)" enable-background="new">
    <desc>In SVG 2, the contents of the group are rendered into a buffer B2 initialised with the group backdrop. Note clip to self behaviour.</desc>
    <g>
        <rect x="25" y="25" width="100" height="100" fill="red" clip-path="url(#cliptoself_clip)"/>
        <g>
          <circle cx="125" cy="75" r="45" fill="green" opacity=".5"/>
          <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5"/>
        </g>
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>

  <g transform="translate(270,280)" enable-background="new">
    <desc>Then the filter effect is applied to the buffer B2</desc>
    <g filter="url(#ShiftBGAndBlur)">
        <rect x="25" y="25" width="100" height="100" fill="red" clip-path="url(#cliptoself_clip)"/>
        <g>
          <circle cx="125" cy="75" r="45" fill="green" opacity=".5"/>
          <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5"/>
        </g>
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>

  <g transform="translate(270,560)" enable-background="new">
    <desc>then the buffer B2 is composited onto the output - what's wrong with this picture?</desc>
    <rect x="25" y="25" width="100" height="100" fill="red"/>
    <g filter="url(#ShiftBGAndBlur)">
        <rect x="25" y="25" width="100" height="100" fill="red" clip-path="url(#cliptoself_clip)"/>
        <g>
          <circle cx="125" cy="75" r="45" fill="green" opacity=".5"/>
          <polygon points="160,25 160,125 240,75" fill="blue" opacity=".5"/>
        </g>
    </g>
    <rect x="5" y="5" width="260" height="260" fill="none" stroke="blue"/>
  </g>
  </g>

</svg>
The information contained in this email message and any attachments may be confidential and may also be the subject to legal professional privilege. If you are not the intended recipient, any use, interference with, disclosure or copying of this material is unauthorised and prohibited. If you have received this email in error, please immediately advise the sender by return email and delete the information from your system.

The information contained in this email message and any attachments may be confidential and may also be the subject to legal professional privilege. If you are not the intended recipient, any use, interference with, disclosure or copying of this material is unauthorised and prohibited. If you have received this email in error, please immediately advise the sender by return email and delete the information from your system.

The information contained in this email message and any attachments may be confidential and may also be the subject to legal professional privilege. If you are not the intended recipient, any use, interference with, disclosure or copying of this material is unauthorised and prohibited. If you have received this email in error, please immediately advise the sender by return email and delete the information from your system.

Received on Tuesday, 7 August 2012 18:24:42 UTC