Improvements to Shade layer (part I)

Hey all,

When I was working on my last animation, I came to realization that Shade layer is bare bones and not very useful for shading. You would be better off with Filter group, but it’s quite cumbersome and slow to use for shading.

So I made an improvement to Shade layer by adding ‘transformation’ type to it, you know, similar to the Group layer. It’s a pretty simple modification but it does allow for a much wider usage since now you can change angle, skew and scale of the shadow.

For example, now it’s possible to make cast shadows, like this:
It’s a pretty simple example, but should be enough to illustrate new capabilities.

Or have this apple as another example:
All shadowing is done using new Shade layers with variant scale/angle/skew parameters.

The only thing I didn’t figure out is how to make GUI draw the handles of the ‘transformation’ widget for the Shade layer. Anyone has an idea where it is in the code?

Anyway, here’s the patched Synfig version where you can try it yourself: GitHub - Svarov-RZM/synfig at shade-improv-1

My question is, do you want it in the mainstream Synfig? Or am I the only one who needs it? If enough people agree, I will make a pull request after I figure out how to properly incorporate it in GUI.

Sources: (9.2 KB)


We definitely want it in the mainstream Synfig. :partying_face:

1 Like

The handles are named “ducks” in code.
You can work on synfig-studio/src/gui/duckmatic.cpp. There is a laaaarge method (badly) called add_to_ducks(). Search for type_transformation there.

1 Like

Dang, that is so cool!! Yeah, I’d like to give it a shot too, since I can’t build Synfig from source (it’s a bit too much for me). Got me very curious and kinda wanna play around with it.

Also, I’ll be honest. I totally forgot that shade group layer and filter group layer actually exist. I’m so used to just using shapes and lines to make my artworks. Probably because I find it much simpler to focus on things that I already know how to handle and tweak, and trying to incorporate those two group layers into my workflow means I might have to take quite a setback. This includes the one that I just made recently (and it was extremely messy ngl :rofl:)

Edit: of course I’m still using group layers (that’s a must). But it’s just the plain, basic ‘Group’ layers :wink:

1 Like

Alright, thanks for positive feedback guys, glad there’s interest.

Yeah, I struggled a bit with duckmatic, but in the end got GUI to show ‘transformation’ widget for Shade layer:

I changed the logic so that ‘transformation’ widget is no longer PasteCanvas specific but will accept any layer with the said type. Not sure it’s a proper thing to do, but this type is just a set of math formulas, so there’s no need to restrict it to one specific layer. Seems reasonable to make it generic.
Commit: Make transformation ducks applicable to layers outside of PasteCanvas · Svarov-RZM/synfig@2d7f341 · GitHub (I fixed whitespace in a separate commit)

It is a good technique. Quite tedious, but results are often better because you are free to shade characters/objects whatever way you want. Using tricks like Filter group or this new Shade layer will reduce your, let’s say, artistic freedom, but will speed up things.

I’ll wait a bit for some additional opinions. If no one disagrees, I will send a pull request and will work from there if something needs to be fixed.