0
$\begingroup$

I have an animation with many objects falling to the ground and then bouncing and rolling around normally as dictated by physics. For the objects that fall starting at frame 1, everything works perfectly. However, when I try to keyframe an object to fall starting at frame 150, it either hangs in the air or falls within a single frame. When I remove the keyframes, the object jumps from its place above the surface (frame 1-2) to another location (frame 3), then falls at a more realistic rate until it goes through the surface and bounces there. In all scenarios, the rigid body type is Active. The object is a grouped object. More details about the object here.

Scenario 1 - Hanging in the Air

Based on this thread. Rigid body is active. I have set location and dynamic keyframes at 149 (dynamic off) and 150 (dynamic on). Object hangs in air after frame 150 and does not fall.

Settings for scenario 1

Scenario 2 - Drops Through Floor in One Frame

Based on Blender Manual Rigid Body Tips. At frame 149 (animate enabled) the object hangs in the air, until frame 155 when it switches to animate disabled and abruptly goes through the floor in a single frame.

Scenario 2 - falls through floor

Scenario 3 - Rigidbody with No Keyframes

There might be keyframes, but I have tried to find them and can't. From frame 1-2, the object is hanging in the air. Frame 1-2 object hangs

Frame 3, the object instantly rotates 90 degrees and is translated to a different location. Object translates in a single frame

The object then falls at a normal rate, going through the ground surface at frame 60 where it bounces a little. object falls normally, but goes through the floor.

This seems like a relatively simple thing to do. What am I missing here?

$\endgroup$
  • $\begingroup$ In case you've missed it, in the "Scene" properties at right and down in it's "Rigid Body Cache" tab are the Start & End sliders that determine over what frame-range the physics will cache. Check if that covers the frames numbers you're using for the physics stuff. $\endgroup$ – Edgel3D Jun 7 '18 at 12:12
  • $\begingroup$ It covers 1 to 250, with both start and end sliders greyed out. The frames run from 149 to 150 - 149 is the last frame the object hangs in the air, 150 is when it drops. Am I doing something fundamentally wrong here? $\endgroup$ – Zeesy Jun 8 '18 at 21:54
  • $\begingroup$ I have to admit, I've struck the same problem when wishing to exit animation and switch to physics. The sliders are greyed out possibly because physics aren't being used at that particular frame. There are sliders and tweaks that can make quite a difference to it's behavior and I have to confess to the need to experiment with all before I get it right sometimes. When I cannot I revert to using keyframes and adjust their F curves in some instances. It takes practice though but at least it's predictable. Like many, I have a lot to learn in this and many other areas. $\endgroup$ – Edgel3D Jun 9 '18 at 3:04
  • $\begingroup$ To add to the above - I did fix one perplexing display of curious physics by saving the project, exiting Blender, deleting cache files and anything in the Blender's 'temp' folder, and reloading the project. $\endgroup$ – Edgel3D Jun 9 '18 at 3:08
  • $\begingroup$ I've gone into Users/username/AppData/Roaming/Blender Foundation/2.79, but there is no cache folder. I've also tried clearing the cache through hitting Free Bake All in Scene>Rigid Body World, but that had no effect. Removing Rigid Body World has made it so there are no physics at all in any of the objects, even though the keyframes haven't changed. $\endgroup$ – Zeesy Jun 14 '18 at 21:09
1
$\begingroup$

Emulating bounce physics -

.--.

Producing the basic bounce -

Set the timeline cursor to frame 1. Set the 3D window to Ortho view mode.

Add a ground plane and keyframe it's Z axis location. Padlock it's location strip in the Dopesheet so it can't be moved. Give it rigid body properties (physics) and untick the "Dynamic" box, give it's "Bounce" a value of 1.0 .

Set up a ball (sphere) at some height above the ground plane. This will be using Blender's physics engine to give us a sequence of bounces with which to emulate with a 2nd ball. Give it physics and tick it's "Dynamic" box so it will fall and hit the plane. Set it's bounce slider to around 0.6 or whatever suits.

Run the animation to check the physics ball falls and bounces off the ground plane.

Set the maximum animation frame to some time after the last bounce.

Take the timeline cursor back to frame 1 and add another ball, take it to the same starting height as the 1st.
Keyframe it's location slots at right. This will be our keyframed version.

What is required now is at the frame where the physics ball hits the ground, drag the 2nd ball down to the ground also and keyframe it's location.

Do the same at the frame where the physics ball rises to it's maximum bounce height. Take the 2nd ball up to that height and keyframe it again.

Repeat the process throughout the bounces. When played, the 2nd ball won't be falling and rising anything like the physics model, but it should arrive at the ground and maximum bounce heights at the same frame as the 1st ball.

Select the 2nd ball and go to the Graph editor, padlock out all strips that are not the 2nd ball's Z axis location graph.

Make a 3D viewing window, say at top right so you can see what you're doing when you start shaping the curves.

At extreme left select the Z axis strip so it's highlited, then move the arrow back into the editing window.

The z axis' blue curve should be quite prominent. Press the Home key to center it all.

The bouncing characteristics are determined by the shape of the curves and can if required, be varied to suit any particular scenario.

As we are going for a natural bounce here, emulating the physics ball's bounce is simply a matter of using each keyframe's handles to reshape the curves so the 2nd ball more or less echoes the 1st ball's movements.

At the ground collision frame, a sharp Vee shaped curve is required and one that places the 2nd ball at the ground level, not above or below. It has to descend and not slow down as it approaches the ground, rather be ripped back upwards rapidly on contact.

At the top of the bounce, it's the opposite situation. Our ball must slow down and pause slightly before falling again. This is more easily achieved by stretching the top keyframe's handles out to about a third the distance to the previous and next keyframes at each side, give or take. Keep the handles reasonably horizontal.

The falling side probably needs a little more handle length than the rising side.

Curves that look like steep hills seem to work best.

Once you get it looking right, you'll have a set of reliable bounce curves that can be used as 'Masters' for other projects.

-=================-

Importing 'Master Bounce Keyframes -

Simply append the keyframed Blendfile, go to the appended scene, (top scene menu) and select the 2nd ball, press CTL-C to copy it, animation and all, into the copy buffer.

Go back to the parent scene, get into the layer that's to take the bouncing ball and press CTL-V to copy it.

The ball will retain it's animation keyframes, along with it's other attributes. It will also appear in the Dope sheet.

Assuming the object that's to take these keyframes has no animation at all, select it's layer, then the object itself. Take the timeline cursor back to frame 0 (zero) and keyframe te object's location & rotation. This will give it an appearance in the Dopesheet.

Go to the Dope sheet and padlock out all keyframe strips that don't belong to the new (unbounced) object. We don't want to mess up anything that's not to be changed.

Press A in the title strips at left so no strips are highlited.

Select only your project's object, (not yet bounced) so it's header at left is all that's highlited. Select it's Z axis only and padlock out it's X/Y axis' and all rotation strips..

Place the mouse cursor in the Dope sheet's main window and press A until no keyframes are highlited.

Box select the imported (bouncing) ball's Z axis keyframes. Press CTL-C.

Set the timeline cursor to frame 1 and the mouse cursor into the new object's strip. (This shouldn't be necessary but you can do it anyway - a bit like blowing on the dice before they're rolled)

Press CTL-V and the copied keyframes should appear along the new object's Z axis strip and importantly - beginning at frame 1.

Run the animation and the new object should take on an identical bounce as the imported ball's.

The new object's curves can be varied to suit and once happy, the imported one can be deleted. So too the appended scene.

-===================-

In the new project's Dopesheet, keyframes can be offset and varied to avoid 'mirrored' animation. Curve handles in the Graph Editor can also be adjusted, again to avoid mirroring other objects that may be using the same imported keyframes.

$\endgroup$
  • $\begingroup$ Thanks for this! Tested out on a blank scene and it seems like a good approach. However, I can't get the basic physics to work on the object in my real scene. The surface and test sphere meshes also move out of place after frame 1 (and then perform expected physics). Will try to figure this out before trying out your example in the scene. $\endgroup$ – Zeesy Jul 19 '18 at 19:38
  • $\begingroup$ Can't say I'm clear on what you're doing but when I employ this method, you either use physics on an object, or keyframes. Mixing both can be unpredictable. When removing physics, remnants can still be left in the Dope sheet. They have to be deleted along with any existing animation. i.e. start over, or even safer, use a brand new object/model imported/appended. Physics once applied, do tend to cling to objects even when removed. If the ground plane (surface?) is moving, try clearing it's animation in the outliner. $\endgroup$ – Edgel3D Jul 20 '18 at 0:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.