Snake like animation

My very first Synfig animation:
Click to download SIF

It’s like a snake’s body. The center BLine representing the backbone and the perpendicular straight lines the ribs.

My main purpose with this animation was to exploit the connecting functionality of synfig.

I also tried to keep the animation independent from the drawing part. For that reason I created two paste canvases, one to draw the ribs and one too animate the backbone.

I also kept the backbone itself visible on the root canvas (although inside the paste canvases). The backbone serves as an interface, connecting the animation with the drawing.

This animation is VERY basic. But I can imagine the mess that more complex animations can turn into. Dividing big, complex things into simpler, smaller ones is very useful.

The only problem is that achieving this kind of “Linking” is very tedious. I had to create and then navigate through a lot of “nodes” in the Parameters window. Had to do each of the ribs practically from scratch each time. But I noticed that all the tasks were repetitive. It was screaming “SCRIPT ME!!”.

Some scripting functionality could make it easy to do all this in an automatic way. Then more people could leverage the awesome power Synfig has.

I need to play more with linking like you have here. Thanks for posting this example for me to play with.

I understand that you were only using it as a learning example, but you might want to check out the plant layer. For simple things like this, it can take out a lot of the repetitive nature of tweaking and still achieve the same effect - snakelike.sifz

You’re right about the scripting too. With that in place, it would be very easy to create large complex pictures and animations. Dooglus is working with Genete on several features that will give Synfig ‘particle-like’ features.

Keep 'em coming as you experiment!

Hmm, interesting. It’s far easier doing it with a plant layer.

But it still was a good learning experience doing it with individual lines. :slight_smile:

Cool animation Yoyobuae!
you can do one thing to avoid the repetitive task on complex convert combinations:

I’ve just discovered that to “copy” a convert combination and make it independent of other from other layer you can do the following:

Let’s assume that you have two parameters of the same type (real, integer, vector, etc.) in two different layers. One of them has a cool convert combination (a complex math forumula). Also some of the internal variables are exported as well. Then if you export the root value (the parameter itself) you can connect the other similar type parameter to it. Now both parameters have exactly the same convert combination… but hey! they are exactly the same! If I change one of the internal non exported values it will change in BOTH layers! (as well as they are connected to an exported value). How to solve that? Go to the parameter list or the ValueNode child list and over the exported parameter select right click ->Unexport. It will unexport the exported root parameter (for both layers but it will keep the cool convert combination for both layers also!!

-Export the convert combination
-Link other parameters to it
-Unexport the convert combination
-The convert combination are kept and independent from other layers.

I have to put this on the wiki… :slight_smile:


Nice trick Genete. It’s quite useful.

For example if I wanted to “attach” a straight line to both ends of my snake thing:

Then I can easily “copy” the convert combination defining the first vertex in the curvy BLine into the first vertex of the straight BLine. And copy the last vertex from the curve into the second vertex of the straight one.

When the convert combination gets “Unexported” it makes each one independent. But the internal “exported” convert types remain connected to each other. This can be solved by again doing the whole copying operation on those convert types, or simply disconnect them and export them again if they are not a complex combination.

The only thing is that if the root node is something important, already connected to other things, then when you unexport it, all those connections will be lost on both, the original and the copy.

This can be avoided by inserting a “Reference” convert type just under or just above any important “exported” convert types (which by coincidence I already did on my snake’s backbone’s vertexes). This way you can work on the “Reference” keeping the exported root intact.

But if you try to insert a “Reference” on the root of an already build convert combination, then all the child nodes are lost, and the “Reference” only contains the hard value that the root node had at that point.

It would be nice if converting into a “Reference” kept the underlying convert combinations intact, and put them inside the “Link” parameter.

Or if there was an “Re-export” function, that allows you to copy a exported convert type, and rename it in the same step. This way all the connections into the original can be kept, but you’ll end up with a new independent exported convert type, which can be then connected and modified as necessary.

I was just playing with the convert type copy technique. I tried modifying one of the convert types after unexporting the root one. Both changed. They appear to remain linked, even after the unexport operation.

It seems that being exported and being linked are two different things. Convert types can be linked without being exported, or exported but not linked. Exporting convert types just seems to be a convenient way to link convert types, but the link can remain even after unexporting.

So I guess “copying” ain’t possible after all. :frowning:

You’re absolutely right. I was blind for the excitement. For the moment there is not way to copy a convert composition (between two existing layers).

I’ve discovered other cool think related to that export/connect thing.
If you want maintain linked two parameters in the same layer you usually export one of them and link the other. That brings the problem than when you duplicate the layer, then all the exported values remains linked (in fact there is only an exported value and the rest is linked to it).

But if before duplicate the layer you unexport the parameter that is internally linked, then it still linked but only inside the same layer. I mean you can change the value at the duplicate layer and only the linked parameter of the same layer change. The homologous from other duplicated layers are not modified. In this way you can duplicate a complicate convert type between layers but keep linked inside the layer itself.

For example: In your snake file I’ve opened the canvas1 and go to the ValueNode child list. Then I have unexported all the “attach#” and “position#” exported values. Then all the layers keep its convert type composition. Then to demostrate how it works, I’ve deleted all the layers “NewBline016 Outline” but not the last one. Then just duplicating the layer and modifying the Amount parameter from the first BLine Vertex convert type, I’ve place each layer at the correct position. Notice that when you change one of that Amount parameter in one layer it changes also the same Amount parameter in the other Bline Vertex convert type of the same layer but not the homologous of the rest of the layers.

In that way you can avoid to redo all the convert type. Just export, link internally and unexport. After that you can duplicate the layer.

Here is the file modified.

Have fun!

PS: See this wiki page for more details.

Yeah, that works quite well. Duplicating layers seems the way to go.

But I’m gonna take an slightly different approach. Whenever I need a complex convert combination, I make a new object to contain it. It doesn’t matter which object, just that it has a parameter of the same type as the convert combination you want to make.

If you want to calculate a vector, you can just make a circle, any circle, even one with radius zero will do. You create the combination on the “Center” parameter. Once the combination is completed, you duplicate.

Then you can start linking, first exporting the parameters that you want to share across all objects. Then duplicate again. And finally customize the combination to a specific case. Then you can connect “Center” to where you want that combination to be. Unexport it, and delete the circle duplicate you wont use anymore.

I like this way better because you keep backup copies at each step of the convert combination creation process. Which is always is nice.

For this specific use, it would be better to have objects that contain only a single parameter of an specified type. For example a “Vector” which only has a single parameter of type vector. It would be easier to work with convert combinations alone first, and then link them where appropiate (duplicating them as necessary to obtain several “instances”).

I seem to remember dooglus talking about something similar…

Played a bit with a snake skin texture and with Warp layers:

Texture link fixed

You’ll need to download both, the SIF and the texture image, in the same folder also. You might want to increase the Zoom value to, say, 1.5 when previewing, the texture looks a bit sharper that way. The rendering time is longer, but it’s worth it. :slight_smile:

What I did was to create 16 warp layers on top 16 import image layers.

The import image layer was encapsulated and it’s canvas exported to make sure only a single image instance existed. It would be a waste to load the same image 16 times. :slight_smile:

Each warp layer takes a section from the source image. The source rectangles are defined right next to each other, from left to right. The destination is defined by the vertexes of the blines that define the ribs, using linking. Each section from the source maps to each section between a rib and the next.

But something tells me that the warp layers are not meant to do this kind of mapping. It seems they were coded to simulate perspective, rather than directly to map a source rectangle to a destination one. For this reason sections gets distorted, which is more noticeable on the curved parts.

That’s a cool effect. The image link seems to be broken.
Please create a wiki tutorial for this cool effect.
BTW, last night I wrote the duplicate/export/Connect/delete procedure on the wiki (as I said in my previous post).

Thanks. :slight_smile:

Image link fixed.

I will need to learn to write wikis first, so it might take a while before I create the tutorial page.