Cartoons

This page describes the different works that I’ve done on vector graphics cartoons in the past. Most of it is already described in my Ph.D. thesis (in French) or in the following papers:

I’ve worked on representing 2D cartoons with different formats, namely Flash, SVG and derivatives, and MPEG-4 BIFS. The input source was either some proprietary format from dedicated authoring tools from MediaPegs or the cartoons were transcoded from Flash. I’ve also worked on compression of these cartoons. Finally, I’ve worked on memory managment for long-running cartoon animations.

Representation

The first question to ask when creating vector graphics cartoons is how to represent cartoon characters? There are two possible representation:

  1. using a single vector graphics object, as it is done in the Flash Shape object, i.e. with a pseudo planar map represenation (left color/segment color and width/right color);
  2. using a composite of several small objects.

In languages like SVG or MPEG-4 BIFS, the only option is 2. because there is no way to use multiple fill colors or multiple stroke colors or widths within a single object. This is a bit of a problem. The Flash representation is very easy to render using a sort and a scan-line algorithm. Oppositely, the SVG/BIFS representation requires rendering several objects separately; then compositing them, possibly with transparency and aliasing problems;  and also keeping the path elements (and the grouping structure) for DOM access, CSS styling. I believe that there is room for improvment in SVG, along the line of preserveDOM=”false” and aliasing=”grouped” attributes on grouping nodes. This would enable getting rid of the DOM tree once it has been parsed while keeping the vector graphics representation.

The second question is how to represent and animate the layers composing the cartoon. SVG/BIFS follow a painter’s algorithm which is inline with the cartoons layered representation. The hardest part is therefore describing the animation of these layers. This can be done in different ways, for example by changing the objects on each layer at each frame. In SVG, one can use the set or the animate elements for that. However, because of the absence of z-order in SVG, one has to rebuild the entire layers description at each frame. So the animate or set cannot be used to animate xlink:href attributes of layers. Cartoons may be long-running and there can be many animations, so a progressive description of all the frames is desirable.  Even though it is possible to define consecutive descriptions of layers, enabled/disabled at specific times by set elements,  a stream representation as in MPEG-4 BIFS or LASeR provides a more efficient representation.

Compression

Compressing cartoons implies two aspects. Cartoons have very repetitive patterns in the way the layers are animated so the question is how to remove this redundancy. In BIFS, this can be done using prototypes. But even with an important file size reduction, this is not sufficient. Cartoon characters are using floating point values which can be given with different resolutions, which can be viewed as some sort of quantization, but the questions are how to do it: what is the level of granularity, what distortion is acceptable, what complexity does it add?

Streaming and long-running animations

I’ve studied here two aspects: how to best deliver these cartoons, using true-streaming or progressive download approaches; and how to manage the memory consumption for long-running animations.

Groupe Multimédia / Multimedia Group