Need advice with a chain setup to reduce file size and improve performance

Hi, I’m having trouble with a chain I need to setup for a machine I’m animating. It’s going to be a short animation showing the function of the machine for our marketing department. Bear with me while I do my best to explain the scene requirements and the issue I’ve come across.

My scene:
I have two sprockets (about 20” in diameter and ½” thick) these sprockets are spaced about 7’ apart and a large chain is runs between them. (think a bicycle chain but much bigger). Now each link in this chain has a hole and on the entire chain there will be 16 bolts, nuts, sleeves and 16 mechanical hooks.

Engineering provided me with an obj model that has everything except the chain. I placed a curve along where the path of the chain needs to be. Next I modeled a single link connection of this chain and used an array and curve modifiers to wrap the chain around the two sprockets.

This is where I am running my issue, my issue is one of performance. There are 112 chain links, 16 bolts, nuts, sleeves and hooks for the chain setup. It ends up being a massive amount of vertices for a single chain setup, making it very very dificcult to rotate and animate it. I have a fairly beefy system (i7, 16GB, GTX680 and ect…) Not to mention the final scene calls for two of these chains to face each other and a roller hanging between them off the previously mention hook.

My question is: Are there better, more efficient ways to model and rotate a chain setup like this instead of using the array? Using the array on items that are copied so many times seems to kill performance. I’m still rather new to blender and I can’t help but feel my model setup is a bit noobish and needless complicated, but can’t think of a better way to setup it up.

I should note that the chain links, bolts, nuts, sleeve and hook have to be somewhat detailed as the scene calls for the camera to zoom in on a section while rotating.

Any feedback, insight or questions would be greatly appreciated

For some reason the blend file won’t upload so I’ll provide screenshots. Here you can see the chain setup:


Closeup of the links and the bolt (I haven’t yet added the nuts, sleeve and hooks. With just the chain and bolt the vertices count is already getting very high)


The modifier for the chain link


Here is a closeup of the chain link I used the array and curve modifiers on.


The problem is , you are trying to be very realistic with model. Let’s look at your last model picture (“close up”) . you don’t need the hole for screw in it. since the screw is going to pass through it, hole won’t be visible. so remove it. same goes for the smaller chain part. also, use normal and texture map to fake the closed screw (holding the chain). Your screw is to much detailed. you don’t need this much detail in animation. to create a simpler screw. Create a 8 vertices circle extrude it , add 8 sided cylinder. join them and texture them for grooves at the bottom.

It will save you lots of geometry.


and here is the blend

http://www.pasteall.org/blend/18836

If it’s of extraordinary importance that you maintain all the highly detailed information, there is a workaround you could use until render time. I would still highly recommend culling some excess geometry. For example, remove threads on bolts and simplify/remove anything which wont be visible.

These steps will assist your working file state, but will not reduce render demands, heed the suggestions of dukejib above.

Select the link, press Alt-D (duplicate/instance) and remove modifiers from the resulting copy, also it’s best if you Alt-R (remove rotation) as well. Move this object out of the way, perhaps to another layer. You will notice that any changes made to this instance will be made to the original chain-link. Next, Shift-D (duplicate/copy) the lone link; this copy will hold the mesh information for your high-res links until you’re ready to render. In OBJECT MODE, Move this 2nd copy off the 1st, not far, just separate them. Re-select the 1st copy. We’re going to greatly simplify the mesh data and reduce geometry. This will not be seen when you’re done with your project, so the only thing to maintain is the basic volume/footprint of the link; delete/merge EVERYTHING else. After you do this, you should notice your system running a bit smoother, as all modifications to this mesh were made to the original link as well. Go about animating as you would have before.

When you’re ready to switch back to the detailed mesh, select the 1st copy (low-res) go to edit mode, select all verts. Back in object mode, press Shift-S (cursor to selected) then select the 2nd copy (high-res). Go to edit mode, DESELECT all verts. Back in object mode, press Shift-S (selected to cursor). Shift-Select 1st copy (2nd copy should still be orange), press Ctrl-J (join). When you tab to edit mode, all low-res verts should be selected and no high-res verts will be, delete selected.

Now all your high-res mesh data has been swapped back in place of the low-res but will not interfere with any animation data. Render. Done.

It is a long winded post, but the technique is very simple, it’s just important to get it right. Make sure you don’t accidentally move the mesh data in relation to the object origin. Also, make sure not to reset the origin of any object, it will mess this up.

Thanks, I took Duke’s advise, went back into the mesh of the bolt, nut, sleeve, chain link and cleaned them up so I have far less geometry now. The rotations in edit mode work much better. And thanks for that awesome tip dlax, will use that later to bring a higher geometry chain in for the render.

I’ve hit another wall and am in need of assistance once more. I now have the chain, bolt, nut and sleeve setup with an array and curve modifier. This leaves me with a chain running over two sprockets and 16 bolts spaced evenly across this chain. Where I’m stuck on now is, a mechanical hook needs to be attached to each one of these 16 bolts and the hook needs to swing freely on these bolts. in fact later when I animate this chain rotating (rotation is going to be pretty slow) the hooks need to swing slightly as the machine starts and again when it stops. But, I’m getting ahead of myself.

I was toying around with just using an array on the hooks but I ran into an issue. These hooks are formed from sheet metal so when I use an array they deform at the top and bottom of the chain arc. This is a no no and not to mention I need them to swing freely later on.

My next though was to just manually duplicate my hook model 16 times and simply parent each hook to one of the 16 bolts, then just use constraints to keep them hanging down. But I don’t see how I can do this to the bolts as the 16 bolts are generated via an array, if I apply the array to get 16 separate bolt models, the bolts no longer track on the chain path.

So this is a rough render of the chain around the bottom sprocket without the hook (ignore the obvious misalignment between the bolts and chain link holes)


And here is the hook, manually moved into place for this render. See how it points down and is bolted in place near the top in the dimple? The bolt holds it on the chain but doesn’t lock its rotation. This hook and it’s ability to swing and swivel on the bolt as the machine starts up and stops is going to be the focus point of one of the animations.


Sorry for the wall of text but I wanted to make sure I explained things. Sometimes I tend to over explain…

you could also do it with simple curves and dupli OB along curve

should be faster !

salutations

Huh, didn’t know I could do that. I will give that a try. Thanks

You can achieve the effect via animation as well as via rigging. I recommend you to watch a tutorial on blendercookie.com “Piston Animation” i think. It will give you a very good idea.

I can’t seem to get it to work :frowning: I tried duplicating it along the curve but the results weren’t what I needed. So lets try a more direct approach. Attach is a blend file, this file consists of:

  • a curve roughly representing my chain path.
  • the link and bolt as a single object. (this link has an array and curve modifier so 10 links are duplicated around the curve. If you grap it along X it rotates nicely along the curve)
  • Finally the hook object with no modifiers. (the hook has a small hole at the top where it needs to bolt to the link)

Now, what I’m trying to achieve is I have 10 links with bolts, I need each of the 10 links to have a hook hanging off the bolt and when the chain moves or rotates along the curve the hooks need to move along but stay pointing downwards and have no deformation at the top and bottom of the curve.

chain_setup.blend (493 KB)

I finally got it work!:smiley: the blend file I attached in my previous post the chain link has two modifiers 1. Array which controls how many times and at what spacing the chain link is duplicated and 2. Curve which forces the chain link(s) to follow my curve.

All I did was apply the array modifier, after this each of the 10 links had it own editable mesh. Next I added a an empty and parented the empty to an end verticy in the bolt mesh. Finally I added a copy location constraint from my hook to this empty.

Now when I rotate the chain links along the curve the hook follows perfectly! Thanks for all the input, much appreciated :slight_smile:
chain_setup_FIXED.blend (646 KB)

Attachments

chain_setup.blend (643 KB)

but how do you rotate you chain around the curve ?

thanks

In the chain_setup_FIXED.blend file from my last post, select the chain, press G and then X to move it along the X axis. This causes it to rotate perfectly along the curve.

In my other model I have now setup a Transform Constraint on the chain to the top sprocket. Now when I rotate the top sprocket around it’s Y axis the chain nicely rotates with it.

can you make a step by step summary for creating this so that other peoples can redo it

then we can use this thread as a reference for chain making

thanks

Will do. I’ll wait until I have fully setup and successively animated my chain to make sure there aren’t any more unexpected issues.

Can I use your system if I give you credit?
I am making a game, and could re-make your work… if I knew what you had done…

@BluePrintRandom:

Can I use your system if I give you credit?
I am making a game, and could re-make your work… if I knew what you had done…

Are you talking about the chain_setup and chain_setup_FIXED.blend files I uploaded? If so then absolutely, feel free to use and abuse those files. I just created quickly them yesterday to help solve the setup issue I add, and I certainly don’t require credit for it.

If I can get my screen casting to work tonight I’ll record a quick video of how I created it and got it to rotate around the curve.

I have re-worked etc what you have done, but don’t really know how I am going to translate it into the game engine, would I need a ton of key frames?

And a credit in a game is better then a poke in the eye with a sharp stick :slight_smile:

Attachments

ChainRework.blend (1.35 MB)


Nice chain design, looks deadly :evilgrin:

As for your question about how to incorporate it into the game engine, I’m afraid I have zero experience with the game engine. I did notice that each of your chain links are separate objects which follow the curve. If you intend on rotating this in the game, wouldn’t it be easier if they were all connected?

Anyways, on layer 3 of your file I re-created with all the links connected. I also added an empty circle and setup a transformation constraint from the chain to the circle. Now If you rotate the empty around the Y axis, the entire chain rotates along the curve. (Also the empty has it’s rotation limited to Y only)

ChainRework_RotationConstrainedToEmpty.blend (1.37 MB)