Talk:Blend Method Parameter

From Synfig Studio :: Documentation
Revision as of 18:14, 20 February 2008 by Yoyobuae (Talk | contribs) (New Blend Method, postintg an idea)

Jump to: navigation, search

New Blend Method

I would like to have a blend method that allows apply effects over a certain region of a composition. Let's call this new Blend Method "X". So the Layer stack would be like this:

Effect Layer (Blend Method: X)
Cropping Layer (Blend Method: A)
Background Layer (Blend Method: doesn't matter)

A is any Blend Method.

The blend method X would do the following:

Apply the effect over the background using the composite blend method:

Effect Layer (Blend Method Composite)
Background Layer 
Effected Background Layer

Then apply a Straight Onto blend method over the Cropping layer

Effect Background Layer (Blend Method Straight Onto)
Cropping Layer 
Cropped Effected Background

Later apply the result on the background using the Cropping Layer Blend Method

Cropped Effected Background (Blend Method A)
Background Layer
Cropped Effected Background Onto Background

I propose call this X Blend Method: "Cropped Onto"

Layers as Function objects

Let's say layers behave like a function: f(x), where f is the layer defined operation and x the context. The result is passed on to the next layer, which does something similar.

When we have several layers (in this example: f, g, h, i) we end up with: f(g(h(i(blank)))

A paste canvas is a bit different though it takes two arguments: p(x,y) where x is the context and y is the context returned by the top layer of the inline canvas. Lets now put this paste canvas on top of the layers in the previous example: p(f(g(h(i(blank))),y(blank)) where y is the inline canvas.

From this point of view all of this is very similar to how function objects work. But we lack the ability to compose function objects (like STL does, with SGI extensions that is).

Lets say there is a layer type: compose. This layer takes its context, and renders an inline canvas on top of that context. So that: compose(context(),inline()) = inline(context())

This would allow applying a certain effect, as defined in the inline canvas, far more easily.