Re: [Gimp-developer] [FYI] Filter layer implementation in gimp-2.8+

2017年8月8日(火) 5:50 Alexandre Prokoudine <alexandre prokoudine gmail com>:

On Mon, Aug 7, 2017 at 8:09 PM, sigetch wrote:
IMO, both layer filters and filter layers have their use.

Also, to quote mitch from today's IRC discussion:

"it's a medium joke to implement "adjustment layers" is the generally
used term... in fact a layer *is* a filter on the stack below, just
need to replace gegl:buffer-source by another op, in simple terms"

Okay, maybe we have several design choice of adjustment layer actually,
including Krita, Photoshop, Clip Studio, and others.

I'd like to point out some of the design point for filter layer from my
experience as a user. Be careful that filter layer is somewhat different
from the simple "history of the gegl operation to the stack."

1) Whether filter layer itself is a "layer with surface", or just the
"filter operation" on top of the stack.

In Krita, Photoshop and my branch, filter layer itself has a surface on the
stack. That means surface projection is generated from the projection of
the stack, and generated surface is composited into layer stack. This is
useful because we can affect stack in two way (filter and composition).
This feature is practical if we consider the post-processing by filter to
the existing photo.
We sometimes copied base image layer, applied some filter for copied layer,
and composite copied layer onto base layer.
I think we can naturally follow this step when using filter layer.

2) Clipping and masking can be applied to the layer or not

Like Krita's filter-mask, and Photoshop's filter layer, applying filter to
part of the image is very common requirements. Krita's filter layer is
applied to whole projection, that is not attractive to me.
In my branch, filter layer is derived from basic filter. So resize, and
layer mask can be used with filter layer.  In short, filter layer can be
the placeholder of the masks and clipping bounds.

3) Operation to the stack? or operation to the one-layer's projection?

Krita separates non-destructive editing in two ways. Filter layer and
Filter mask. Filter layer affects whole layer stack, and filter mask goes
only for one layer.
Of course, both mode is useful in different use cases.
Photoshop has an option to restrict filter only to underlying layer's
projection. I think just inserting filter layer into stack, and then
specifying which projection to apply, is the easiest way.

4) Filter update frequency

Krita's filter reflects the updates of underlying filter immediately, and
displays it in real time. I was annoyed with that. Updating process
prevents other event processing, thus brush stroke cannot be smooth as
In my branch, all update propagation is suppressed when underlying filter
is changed.
This kept brush stroke smooth, but of course, we can see the lag of the
updates of filter layer. We need to see further consideration on update

As a result of above consideration, I designed my specifications of filter
Any comments are welcome.

GEGL filters can have either automatically generated or custom UIs.
There even is some metadata to help build more sensible UIs, from
using custom widgets instead of regular spinboxes to "adaptive"
layouts. E.g.: (available in upcoming

Great work! Good news to me.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]