I am relatively new to Blender, and I am having some trouble with a simple animation. I am getting very comfortable with both modeling and texturing, and am attempting to do some simple animations with a basketball model that I made.
I just want to rotate the ball around its local y-axis, 360 deg so I can make a simple repeating animation. I know I can set each frame (so if I want the entire rotation to take 4 secs, at 25 fr/sec, I would rotate the ball 3.6 deg each frame), but that is obviously tedious. I tried to set the rotation for just a few frames; first I tried 90 deg at a time, then about 45, then about 30. But Blender doesn’t interpolate the way that I want (in any of the modes constant, linear, or Bezier). The ball wobbles, and even spins quickly backward at times.
I have read about using Empties to aid in these sorts of animation tasks, but I find this a bit absurd. I love using Blender so far, but if such a simple animation requires a hack to get it to work, I feel that is rather poor. What am I missing?
You can draw IPO (interpolation) curves directly in the IPO window. This has many advantages and is well worth coming to grips with.
For Y rotation, you would select the object, then select RotY in the list on the right of the IPO window (make sure OBJECT is selected in the IPO dop-down menu). Ctrl-LMB once in the IPO Window to create a curve with one control point. Ctrl-LMB again to create a second control point. You now have an active IPO curve.
TAB over the IPO window to enter IPO Edit Mode. Select (RMB) the first control point then press N-Key to bring up the numeric panel. Enter 1.00 for Vertex X and 0.00 for Vertex Y values (Frame 1 = 0 deg rotation). Then RMB the second control point and enter 100 for Vertex X and 36 for Vertex Y. This means at frame 100, rotate 360 degrees (yes, it multiplies the Vertex Y value by ten for reasons I can’t explain). Obviously you would adjust the frame number to whatever frame value you want.
Move the frame marker now and you’ll see animation. You’ll also notice the curve is a smooth Bezier curve with ease-in and ease-out. If you want the rotation speed to be consistent then press T-Key and choose Linear to make a straight IPO curve.
Sounds like a lot of work but takes seconds when you know how to use it. Much faster than manually keyframing in the 3D window.
If you want two ful rotations, set Vertex Y to 72 and so on. If you want it to go forever, leave it at 36 then set the curve Extend Mode (Curve menu) to CYCLIC. You can also add more control points within the curve using Ctrl-LMB again and again. Points can be moved with G-Key or via the numeric panel and can be used to vary the speed of rotation within the cycle.
Okay, I understand the extrapolation feature, and how to tweak or create IPO curves by hand. I can now easily rotate the ball around any of the global axes smoothly, as many times as I want.
But I still am having trouble rotating around the object’s local axes (which are not lined up with the global axes). I understand that this will involve rotation around all three of the global axes to varying degrees. (E.g., the local y-axis is fairly close to the global, so most of the rotation will be around that one, but there will also be some around each of the global x- and z- axes.) But how do I figure out how much? Trial and error will ultimately work, but again there must be a simpler way that is eluding me.
It’s quite simple to set rotation in following way:
Add some object to the scene. (Of course you can use existing one.)
Add an armature to the scene. Make the armature the parent of the object that you want to rotate. We will use armature to rotate the model and because the rotation of the armature is inherited to the object it needs to be its parent. To make the armature the parent of the object use shift-rmb to first select the object and then the armature. Hit ctrl-p after that.
Add a Bezier Circle to the scene. This will act as the path that the armature will follow while rotating.
Use shift-rmb trick now on the armature and after that on the bezier circle. Hit ctrl-p and select “Follow Path”.
Hit alt-a or shift-alt-a to see the animation.
Note that you can edit the speed of the path in the IPO editor. You need to add speed curve first though. Use ctrl-lmb on the IPO editor while the wanted curve is selected and the IPO editor is set to Path mode. This will add the speed curve there. You can add more control points in the same way. IPO tricks mentioned by AndyD apply as well.
You can make all kind of interesting stuff this way. You can add hooks (ctrl-h while in the edit mode) to the curve circle and animate them for instance. There are plenty of possibilities.
But I still am having trouble rotating around the object’s local axes (which are not lined up with the global axes). I understand that this will involve rotation around all three of the global axes to varying degrees. (E.g., the local y-axis is fairly close to the global, so most of the rotation will be around that one, but there will also be some around each of the global x- and z- axes.) But how do I figure out how much? Trial and error will ultimately work, but again there must be a simpler way that is eluding me.
You don’t have to get into a complex setup to do what you want . If your object is not aligned with the global axis just Ctrl -A (apply scale rotation) the object you want to rotate before you add curves in the IPO curve editor . The IPO curves are always local for the selected object but only if you “set” its orientation by Ctrl-A … I think that’s a simpler way … Though BeBraw’s set up does gives you a lot more options .
Similar to what BeBraw suggested, you could also just parent the object to an empty. Add the IPO to the object but tilt the empty to the desired angle. Because Blender calculates the object rotation before the parent influence, this works. I have parented to a Lattice before because the I like the appearance of the cage. Empties can get lost. In reality, you parent to just about anything.
Oops sorry about that . AndyD and BeBraw are correct … been looking at too many beginner armatures lately …
Yes you do need to parent your object to something else and then rotate that to give you the angle you want relative to the global axis … I usually use a plain old plane (easier to visualize angles for me anyway) …
Thanks to everyone for your suggestions. Everything is working as desired.
I am still a bit surprised that tricks are required to do the simple sort of thing I wanted. However, I do appreciate the power and flexibility that path animation allows. I ended up using BeBraw’s armature/Bezier circle approach, which worked flawlessly once the circle was aligned the way I wanted to the ball’s local axes.
I do have one other question. In a large scene, how do you typically keep track of all of these extra objects and make sure that they don’t get out of position? Without x-ray option turned on, they are invisible inside my basketball, and if I move the basketball alone, I leave those others behind. Maybe this doesn’t usually pose a problem, but I do like to keep my work organized.
One way to manage it is to put the extra objects on a separate layers that you toggle based on whether or not you are rendering. I suppose you could represent the location of an object bundle with an empty by making it parent of the bezier circle and then by using it to define location (and even rotation and scale).
With 2.43 the outliner now has “Restrict/Allow Selection” (freeze) flags / icons that you can turn on, which you can use to avoid accidentally picking / moving objects that you don’t want to move.