New Bongo user... I'm Stuck

I’ve been trying to figure things out, and I’m really confused.

Basically, I have a robot I want to animate. I’ve gotten a blockout version done. I’m expecting to do some very straightforward, hand-made frames for its animations; less than 30 frames. Then, in theory, I’m going to use Bongo to attach the final versions of the model to this basic version and render out the animations, following the blockout’s rotations, etc.

Problems:

  1. Setup isn’t well-documented and I ended up on Reddit to figure things out. At first, I was working like I usually would, with Groups. That doesn’t work; if you build a hierarchy with Bongo, it selects one of the objects in the Group, not the entire thing. Reddit said, “use Blocks”, so I made all the Groups into Blocks. That’s unintuitive, but it works.

  2. I quickly discovered that Thou Shalt Not Rotate More Than One Block in a given Rotate action. Somehow, this breaks things, despite all the geometry now being in Blocks, with a hierarchy. This probably doesn’t bother anybody but me, but I just wanted to rotate both of my robot’s forearms in a single step to set up Frame 1, and it broke things, lol. It seems like if you Rotate multiple objects, then the hierarchy solver should be checking all of them for Children, not just the first Block you’ve selected.

  3. Now I’m stuck.

I have Blocks, and they’re in a valid hierarchy (I think). Everything looks OK in the Animation Manager.

When I move a thigh, the shin moves, when I turn a shin the foot rotates, etc. I’m not using IK or anything fancy like that; I’m probably going to use the interpolation only a little bit.

So, it sounds great… but.

What I want to do, immediately, is to make several frames where nothing is moved, rotated, etc. I need these keyframes for various reasons; for example, at the end and start of a walk cycle, you generally need “home” frames, so that the interpolation is correct and arrives at the correct rotations exactly on time.

However, I’m stuck here. If I make a frame where “nothing happens” on Keyframe 0, Bongo shows a Keyframe… but if I move anything on Keyframe 1 and then go back to Keyframe 0, Keyframe 0 is then changed.

This is precisely what I don’t want. Frame 0 is meant to be a neutral pose frame that I can copy and paste to where I need a fresh new keyframe. I don’t want any other Keyframe to ever alter it. Right now, while I’m experimenting, it doesn’t matter; I just Undo. But it’ll really, really matter later, when that’s where I’ll need to make new geometry the Children of the existing maquette.

So, er… what do I do, to make keyframes where “nothing happens”? How do I Copy such a Keyframe? I don’t even see a method to Paste one; the manual mentions something about CTRL-drag, but I literally need to copy the state of Frame 0, select Frame 5, then paste it in- with every single rotation exactly how it was in Frame 0. How do I do that?

Anyhow, here’s the file. I’m realllllly confused by Bongo’s process, and the only video I found about setting up Keyframes was for something really simple, where an animation went in one direction on the timeline; I need to be able to do something a bit more complicated here, and I desperately need a way to copy and paste all of the states of all of the joints, etc.

DerpBot.3dm (5.9 MB)

Hi,

Yes, using groups is difficult. Groups are a selection tool in Rhino. It doesn’t make a “new” object. When you add a rotation keyframe to those grouped objects they’ll all rotate around their own center and not the group center. The group doesn’t have a center to rotate around anyway. There’s some work arounds discussed here:

Rhino - Problems Using Groups?

For you it might be easiest to build out your hierarchy with points and then make your different parts children of those points.

For this you can select all your animated objects, right click on the timeline at Tick 0, Add Keyframe → Selected objects(s) → Precalculated.

This will insert keyframes for all animated properties with default values. For motion that means no scaling, rotation or translation shown here in the Keyframe Editor.

Then if you need that later need a copy of this blank position later you can select those objects again, right click they keyframe, and there are options to copy/move/delete.

I think it might help to consult to documentation. There are tutorials covering how to create and manipulate keyframes.

Looking over your example you did a good job building the hierarchy. I would still make a block out of the head part.

Thanks!

So, Precalculated means it thinks everything is zeroed? I’ll try that, and pasting a few frames to the positions where I roughly think I’ll need them to bookend the walk cycle.

The head’s left out of the hierarchy on purpose; it’s just a positional guide. In the final use case, the head’s being rendered in another stage, along with other things like lighting.

No. Since there are no keyframes it will add zeroes. If there were other keyframes it was in between Precalculated will insert a keyframe that is tweened value there. It doesn’t change the animation but adds an extra keyframe.

I see in your screenshot what I’ve screwed up here; I apparently need to have clicked Animate when making the keyframes. Otherwise, no state is recorded.

It looks like I’ve set up the bookends properly, let’s see if I can get this sucker walking and interpolating properly while preserving the initial state, lol. Sorry for the stupid questions; I knew it had to be something like that…

OK, two more weird things.

  1. I’ve built the bookends for a very simple walk cycle and built the interpolated frames. Looks good when I move through the keyframes now; so far as I can tell, I’ve done the process correctly. But when I go to the Keyframe Editor, there’s nothing there, not even for the first frame where I selected everything, hit Animate and built a Keyframe. Strange.

  2. Now that I have a few keyframes set up… CTRL-clicking does nothing; it’s not letting me drag to copy frames now. That’s weird.

[EDIT]

I have problem no. 2 solved. You need to re-select everything again. Then ctrl-drag to copy works. That’s not intuitive; I just presumed that I’d select a keyframe in the UI and drag-copy.

Ahh… same with viewing the keyframes. If you select all the geometry and bring up the Keyframe Editor, you can now see the keyframe steps. Otherwise, you can’t see them.

Bringing that up froze Rhino for several seconds.

I think I can figure out the rest of this now, but we’ll see when I go back to the first frame and try dressing things up by adding Children.

Well, things were going fine today until:

If you change any Block after assembling an animation, all Blocks lose all frames.

You cannot, for example, use ExplodeBlock on Frame 0, make changes to the “chest” block, turn it back into a Block named “chest” and then keep going.

I presume all those red crossed circles are trying to tell me it has lost state.

IDK whether this will affect anything that’s made a Child of existing Blocks… but that’s almost a showstopper here.

I want to get a “skeleton” working properly, test all animation states, etc., then make some changes to final geometry for the production version. After exploding a Block to just change some Materials, I’ve lost all of my work, presumably because the hierachy’s been broken.

I’ll revert, but that’s a major problem. I thought I was out of the woods earlier, lol.

instead of exploding & remaking a block, maybe try using blockedit on it

we can attach data to a block definition or instance, but if you delete those and remake them, that data is gone

Hi Gregory,

The ”red crossed circles” in the Animation Manager indicate that animation is disabled for that object. Right click on the item in the list to “enable” animation.
image
This feature can be used to temporarily freeze an object or chain.

And indeed, yes, exploding a Block destroys the attached Bongo data. Like @jdhill suggests you should instead use the BlockEdit command to modify your blocks. It will keep the Bongo data.

In the first minute of my tutorial video on the whys of IK https://youtu.be/gqIxqM7Qfz8 the principle of Hierarchical Linking is explained. It might help you.

And when you post one of your trial experiments I can possibly grasp what you are trying to achieve and maybe give some tips.

Luc

I’ll try the BlockEdit feature; sorry for my ignorance @jdhill, I haven’t really used Blocks much, so I’m almost certainly making mistakes as I learn, and using ExplodeBlock seemed like the only way to break up my Polysurfaces to apply Materials, etc., and I simply wasn’t expecting to break all of the animations. I’ve started that part over again, a lot more carefully!

Thanks for the explanation of the red circle.

As for what I’m trying to do, it’s not a typical use-case for Rhino or Bongo and I’m sorry that I’m pestering you folks with all my issues.

I’m trying to build visual variations on a common robot design, where (ideally) I’d be swapping out body parts, then running the render to produce final frames of animation.

The animations are the same for every variant, and all of the variants have to have identical lengths for key things like arms, etc., so that key locations, such as the final position of hands, remains consistent across designs.

Right now I’m trying to get a working “skeleton” built, that is the minimal geometry all of the designs share in common; greebles of various sorts would, ideally, get built, turned into Blocks, then attached to the relevant body part as a Child, allowing for rapid production of a lot of variations. Then I’d render the hips and legs out as one animation, and the upper body separately.

That part alone appears to be a bit more difficult than I expected, because Bongo doesn’t like it when we use Hide… but that’s OK, I can make a separate file for the legs / hips when I’m pretty sure I understand the process I need to use; the leg animations are pretty simple compared to the upper body stuff, where I need to animate my robots in a variety of poses and animation sequences.

I’ll investigate whether BlockEdit would also allow me to add / remove geometry from the Block, without destroying the Block or the animations; that would solve most of my remaining problems.

Also, here’s the second variant, after cleaning things up, applying Materials, etc., showing the walk cycle now that I’ve rebuilt it, etc.
DerpBot_2.3dm (9.0 MB)

As you can see, this isn’t exactly Disney-level animation here; this is all being rendered for a video game where the final composited version will be at a super-low resolution and seen from a top-down POV, something like this:

image

Here’s one way you can reuse the keyframes assuming your dimensions don’t change. First, create your hierarchy with points and animate them. Then use orient to put the real parts in as children of the points. This would even work for groups of parts. Then when you want to try a different set you can delete the old parts and orient the new ones in.

Wave_Example.3dm (71.0 KB)

It looks like using BlockEdit to add / remove the additional geometry from the Block should work for this admittedly-weird use-case.

After a few more newbie mistakes, I’ve gotten everything set up, and so long as I do not remove all of the geometry from a Block that’s being used to animate, I can add / remove things with the Block at the start.

The only wrinkle is that this then copies said geometry into the Block, and then I have to delete it. But at least now I have a reliable way to move things into and out of what I need to animate. I think this may actually work :slight_smile:

Gregory,
I’m working on a possible solution for your ‘swapping’ with comment.
image
Possibly for tomorrow.
Luc

That looks fabulous :slight_smile:

Hi,
I have to say I’m very glad your model is build with discipline, respect for symmetry and use of the grid. Working on such model is comfortable for me.

First some comment on your model ‘DerpBot_2.3dm’:

  • Object 179 (the hips) isn’t moving or rotating, so no keyframes are needed. Although it appears to be head of the chain because it doesn’t carry any data that need to be passed on children, not is any form of animation is needed. All animation is removed.

  • The same goes for Object 148 (the head). It only needs to be child of Object 177 (the chest) when it is supposed to receive data from that. When the head isn’t supposed to move or rotate at all during the animation is doesn’t need any form of animation.

  • Object 178 isn’t moving or rotating, so no keyframes are needed. Keyframes are deleted.

  • In order to have Objects 174 and 171 (the forearms) in a horizontal start position the zero datum at tick 0 isn’t necessary. It isn’t necessary for any object for that matter. It is merely automatically installed because mostly animation starts at tick zero, but that is not mandatory.

  • The technique Joshua suggested (using ‘Add keyframe > Selected object(s) > Precalculated’) resulted in far too many data. That made the KeyframeEditor behave very poorly.
    So for all objects I removed the unnecessary data in meaningless parameters.

In the KeyframeEditor you can now mark the option ‘Only show animated parameter’.
Image 4


Doing so the file size is shrunk by nearly half.

DerpBot_2 001.3dm (4.9 MB)

I also renamed the objects in the chain.
Image 5
Strongly recommended to keep a clear head!
Mind you, these are the names of the ‘objects’. Although there are substantive similarities with the block definitions, Rhino does not care at all.

To the heart of the matter: I think Rhino’s ReplaceBlock command is the answer to your swapping of body parts issue. On this page of Rhinoceros Help you’ll get some idea.

But first some enlightenment on Blocks:

A Block definition describes a combinations of (mostly) various objects with their individual properties like Layer and Material. Different “instances” of the block can be brought into the model at different positions using the command Insert. When the Block definition is edited (by using BlockEdit on one of the instances) every other instance is updated.

Working with the BlockEditor needs a bit getting used to it. It brings you in a secluded space only containing the objects composing the Block – a bit as if you were working in a separate individual Rhino model. Whitin that space you can use every necessary Rhino command within the Block including creation of objects, modification, removal etc… Also applying materials to objects, change their layer, display colour etc… whatever. Once you are done editing you go back to the normal world via OK.

The 3 buttons are maybe somewhat confusing at first.
image

‘Add object…’ brings a copy (yes a copy) of a object that already exists in the model (but outside the Block) into the Block’s space/definition.
‘Delete object…’ moves an object from within the Block to the outside world.
Inside the BlockEditor you can the Rhino’s Delete command to simply get rid of an the object completely, and any creating command (like Point, Line, Plane, Box, Cilinder….) to create a new object into the Block.
A error newcomers tend to make (I myself, back then) is to think one has to create new objects to be part of the Block outside the BlockEditor and then take them inside the Block by using the ‘Add object…’ button (hence leaving these unwanted copies behind). Simply keep in mind it’s as if you were working in a separate individual Rhino model.
Tip : Inside BlockEdit the Osnaps can also be used on objects ‘outside’ the Block. That can be an advantage.

The ‘basepoint’ of a Block is the gripping point, among others used to position the object like when the ‘Insert’ command is used.
It is also the Bongo pivot’s position by default .

First consequence : it isn’t necessary to, like you did in your model, make a dedicated Block for e.g. the left hand and the right hand. Their block definition is the same and an instance can simple be mirrored. Likewise for the arm and leg parts.

Secondly using ReplaceBlock to interchange body part will only function properly when the basepoint of the source coincides with the basepoint of the target.
To have a something to hold on I decide to use the place where de pivot should be. Not that such is mandatory (the pivot of a Block can freely be placed everywhere) but is it seems meaningful and logic to me. So I moved the base points in all the Blocks in your model to the hinging point.
I’ve also build a kind of skeleton as a guideline during the creation of the various design part.

For some objects (like the hand) that don’t have obvious Osnap (i.e. Center) to locate the pivot I implanted a point into The Block, just to have a visual marking of the Block’s ‘basepoint’ .
Also note that Rhino’s Osnap ‘Point’ can be used on a Block’s basepoint, even when there is no point there.

So there you go. Alternative robot parts can be build to your heart’s content separate from the animated version, free of animation-wise concerns, with or without BlockEdit. The only bother is that the end products must be Blocks, and that the position of their ‘basepoint’ must be in the exact place.
Mind you that every Block needs a unique name.

All you further need is ReplaceBlock


DerpBot_2 002.3dm (5.0 MB)

For demo and test purposes I only created just some parts. I choose to build the right side of the manikin – the left side parts of the animate figure are mirrored instances. When you want to work further on this my model you should do likewise (build the right side, I mean).

Luc

PS. I also introduced some layers. It can help to keep thing apart and to temporarily hide stuff you want out of the way.
Interesting to know is that the display colour of object inside a Block is recorded inside the Block. That will not be overruled by altering the display colour of a Block instance.

PS 2. What did you mean by “Bongo doesn’t like it when we use Hide”?

2 Likes

I really like using this plugin for more flexible block editing - it makes some of the command line block options a bit easier to discover (like ReplaceBlock) and allows a ‘double-click to edit block’ workflow.

1 Like

@Luc : that looks amazing. I’ll be trying that setup out as soon as I’m back from PAX East.

@Patt: thanks for that recommendation, that looks like it’ll be super-useful for getting all of this done!