Blender 2.79b on Ubuntu 16.04. I have dozens F-Curves with Noise modifier. I use option “Restrict Frame Range” on N-panel for each of them to set particular frame intervals where modifier must be active. Is it possible to move these intervals simultaneously for all F-Curves? It would be ideal to see them in the Dope Sheet, but they are not there. It is very inconvenient to change the settings of each curve separately each time (on N-panel). Copying and pasting modifiers is very time consuming too. Is it any more handy ways (like Dope Sheet)?
Baking an action may help, but I can’t really tell what you are doing because I can’t see your blend. For example, one object? Several objects? One action? Mixed actions? Using the NLA in your animation? etc.
Many objects, many mixed actions, using the NLA.
Actually, I make a simple 2d animation, in which at certain moments an earthquake occurs sporadically, and at these moments the camera and a multitude of objects in the scene simultaneously begin to shake along two axes, independently of each other. I use the Noise modifier for these purposes.
The general problem of Blender is that it is impossible to simultaneously move the entire selected part of the animation. It would seem that Dope Sheet is intended for these purposes, but in practice many things do not displayed in it, for example, already mentioned f-curve modifiers, or particles emission start and end. All these things needs to change in many places manually every time. It is very inconvenient and time consuming. That’s why I ask if there are any simpler ways.
Make your shake for each one as a separate action. Then, bake your shake (with modifier) as an action in the graph editor. Rename it to something useful in the dope sheet. Push it down to the NLA. Now you can select as many as you want and move them. You can group them in a metastrip and move them etc.
import bpy offset = 25 for ob in bpy.context.selected_objects: for fcurve in ob.animation_data.action.fcurves: fcurve.modifiers.frame_start += offset fcurve.modifiers.frame_end += offset
This operates on selection… just change the offset value. However it just takes the first curve modifier in the list so… if you have anything else here it will move the frame range whether or not it’s a noise modifier. You can hover over any value slider to get the data path then use it in a script.
edit curve modifiers can’t be named so you have to check for their type :
import bpy offset = 5 for ob in bpy.context.selected_objects: for fcurve in ob.animation_data.action.fcurves: for mod in fcurve.modifiers: if mod.type == 'NOISE': fcurve.modifiers.frame_start += offset fcurve.modifiers.frame_end += offset
This should be foolproof…
Thanks, it can be solution in some cases, but in my case I need not only move interval of active modifiers, but also independently change start and end of them. I apologize if I initially did not accurately describe the task. Or if I misunderstood you, please correct me.
Tthanks. Approximately the same comment as the previous one. For each f-curve, I have many modifiers, and each of them is assigned to its own frame interval. If I understand correctly, your script will shift the beginning and end of each modifier on the curve, but I do not need it.
And in any case, using scripts for such simple operations is not a user-friendly approach. As I wrote above, it would be best if all such entities were displayed in Dope Sheet (by default or by checking some checkbox). When I started this topic I thought that I missed this option, but seems that I’m not. So this is a question for Blender developers…
Ah, screw it. Who cares if it’s user friendly ? Are you trying to get anything done ? Bam, you can do it. Welcome, bye.
that’s why you include a blend file. But you can limit this to whatever you want. I leave it up to you to figure it out now as obviously you didn’t try it.