W3C home > Mailing lists > Public > www-svg@w3.org > April 2010

Re: SVG Compositing

From: Anthony Grasso <anthony.grasso@cisra.canon.com.au>
Date: Thu, 15 Apr 2010 18:20:32 +1000
Message-ID: <4BC6CC50.2060300@cisra.canon.com.au>
To: Dirk Schulze <vbs85@gmx.de>
CC: www-svg@w3.org
Hi Dirk,

Dirk Schulze wrote:
> Hi Alex,
> 
>> 	There are very good reasons why it is defined the
>> way it is.
>>  Many more than I can put into an email.
>>
>> 	Basically the compositing operator is a property
>> of an object, not 'glue' to join 2 objects together. We
>> implemented it as you suggest back around 2003 or so and
>> it doesn't work for the Porter-Duff operators proerly
>> especially when combined with background-enable='accumulate'.
> 
> In my opion SVG is object based. Thats why we have DOM, SVGDOM as well
> as ┬ÁDOM. And I don't see a problem in putting the background in another
> groupe and composite it with your object. In general everything should
> be possible with compositing object, what the current Specification
> wants to do.
> 

For the most part SVG is object based which works fine right up until you need 
to combine the rasters of the objects in a particular way whilst ensuring what 
has already been rendered has correctly been taken into account. You are right 
in that you could use a <compositing> object, the problem is all the results it 
produces would be incorrect.

The compositing specification is not about pushing objects through a processing 
chain like you would filters. The compositing specification is about how to 
combine an object at render time with what has already been rendered.

>> 	Anthony may want to make some more comments.  But the
>> basic one is that it doesn't work properly if you try to represent
>> compositing as nodes in the tree - which is effectively what
>> you suggest.
> 
> What is not possible?

The problem is it is impossible to get the correct result if compositing works 
the same way as filters. If compositing did operate the same way as filters the 
background would be included twice in the operation which produces the wrong 
colour in the result. The reason for this is whatever had been rendered up to 
the compositing operation point would have to be placed into a new buffer the 
compositing steps would occur and then the image would be composited back with 
the original background. Hence, the background is included twice and there's 
been an additional composting step which can potentially effect the final result.

> 
> At the end we should also think about a big pro of SVG. The
> accessibility. It's muchh more difficult to discribe the current drawing
> if you use enable-background and composite it some times later. The
> current action should be discribed easily, readable and understandable.
> 

I have to admit the enable-background feature in compositing is tricky because 
of the way it operates. However, you can achieve some amazing results when it is 
used correctly. In terms of description of enable-background in the 
specification I plan to add some diagrams that illustrate its behaviour. This 
should hopefully make it a bit easier to understand and implement.

>> 	Adobe's ASV3 has compositing as a property on objects,
>> via the adobe-blending-mode property. Illustrator will geberate
>> that rather than use filters. Compositing can be achieved without
>> using an intermediate store which I don't think you can expect
>> when using a filter primitive.
> 
> Well, I realy doubt that we won't need intermediate buffers. The most
> graphic librarys (Qt, Cairo, Skia, Cg) don't provide some compositing
> effects mentioned in the Spec. So many viewers have to store the drawing
> and need to work with pixel manipulations, like the most platforms
> already do for filters.
> 

What Alex means is when filters operations occur they use a buffer that is 
rendered into in addition to rendering into the device canvas. This intermediate 
store has the final result before it is composited back to the canvas or 
alternatively is passed on to the next filter in the chain.

The compositing specification works directly on the device canvas. The only time 
a temporary buffer is created is when a group is encountered and 
enable-background='accumulate'. Even then the temporary buffer is just that 
because the operation is short and that case is not always encountered.

Hope this helps.

Cheers,

Anthony

> Dirk
> 
> 
Received on Thursday, 15 April 2010 08:21:09 GMT

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