Seamlesssly looping wave modifier

So I’ve a curve with a circle bevel object running around it. I’m working on a one minute animation in which I need to “loop-the-wave” modifier seamlessly, however it “warms up” before it actually starts getting into the constant animation/groove.

Has anyone have any experience doing seamless looping with things like this?

Any help would be awesome.

I’ve a link to my blend file here:

https://www.dropbox.com/s/iuhwldesdc5dw3o/wavetest.blend?dl=0

*Just an update, and an easy first route that I should have tried seems to be working. That is to start the animation several frames in until I find a nice looping point between the last and first frames. I compensated the lost frames by adding them back on at the ending point of the animation, still seems to be looping nicely.

In the Graph Editor, select the handle, click on Key<Handle Type<Vector. (shortcut V)
With the handle selected, click on Channel<Extrapolation mode & change it. (Shift+E shortcut)

This is exactly what you’re looking for: https://cgcookie.com/blender/2015/02/26/animating-perpetual-motion-f-curves/

Thank you, I looked in the graph editor, clicked on Key > Handle Type but my options are greyed out and the same in my extrapolation options. When I created the bezier curve with the bevel object around it (that’s being animated by the curve/wave motion) it did not create any key-frames to edit in the dope-sheet editor / graph mode.

I wrote a blog post recently solving this issue of seamlessly looping the wave modifier. https://www.hellocatfood.com/seamlessly-loop-wave-modifier-in-blender/

In short: First, to get the wave animation to loop seamlessly in the Speed value enter: ($width*2)/$animationlength . Replace $width with the Width value and $animationlength with how long you want the looping to last.

To offset the “warming up” period, in the Offset value enter: ((1/$width)*$animationlength)*-1 (replace the values as above)

1 Like

Hi hellocatfood.
I read your article. Very informative with clear explanations! Thanks!

I just found it annoying in the one that I have to divide the calculation result and enter it manually, so I decided to make this calculation result a driver.

If you want, I’ll post a sample Gif and the URL of the Material used to make it.

wave loop test.blend (1.5 MB)
wave loop test