Dupliframes with shape keys

Is it possible to animate, using shape keys, a nurbs curve that will be dupliframed along a path? So that the duplis change shape according to the animation?

I have had success with this using object keys, so that the dupli object stretches or shrinks along the path, but what about morphing into another shape?

Are there limitations about which types of animation may be dupliframed?

I’d like to model a bar that changes in cross section along its length, from a square cross section to, for instance, a four-leaf clover cross section and back to a square again.

My idea is to use a surface nurbs square for the cross section, then morph it using a shape key and dupliframe the animation, then make the duplis real and skin them.

Thank you for any replies.


When you find out, let us know. Seriously. Unless someone else who has had the exact same idea happens to read this. You’ve outlined a plan for investigating some Blender capabilities, and you could be on the verge of discovering some very clever way of producing effects considered difficult to do, or documenting some Blender limitations. I say, go for it: try them all, save screenshots, and post the results in the Blender test forum.

Well, I have tried, and so far with no luck.

The problem is, I am a total newbie with shape keys, and I am having a tough time understanding them.

So far I haven’t found any tutorials at all that deal with shape keying surface nurbs…The tutorials seem mostly to be geared towards character animation.

Alternatively, How else would I model a bar with a cross section that changes along its length?

I’ll go aheaad and attach some images so you’ll at least get what I’m trying to do.

The first picture is exactly what I’d like to model: A square bar that is forged into a cloverleaf cross section and then twisted. If I could get it to work, I think the dupliframed shape keyed skinned nurbs surface curve would be perfect for this.

The second image is a render of a table I made, with legs modeled using dupliframed surface nurbs with object IPOs, with IPO curves varying size x and size y. The cross section of the table legs remains rectangular the whole time, however, with just the scale x and scale y actually varying.

The last image is the actual table. The client loved it–it is stainless steel, bronze, and glass, 10 feet long and 4 feet wide.

This kind of modelling is what I really wish to do with Blender, so any help would be great.

Any thoughts? Thanks!


Whit: You can model the first bar easily by using a profile made with curves and then setting it as bevOb of a path. Then tilt (t key) the control points of path to make it curvy. Check the wiki for more information about bevOb. Taper is really useful too.

How can bevob be used when the cross section goes from square to cloverleafed and back to square along its length? I understand that I can use bevob and taperob to make one cross section, but I want to morph one cross section into another. In my photo, the morph from square to cloverleafed takes place suddenly, but I’d also like to be able to change it slowly, and to various distinct shapes, so it goes from, like, a square, to an octagon, to a circle, to a cloverleaf, to a diamond, etc.

This is very similar to actual metalworking operations-- hence my interest.

Hey a fellow metal smith ! The table looks very cool . Stainless and copper ?

As for BeBraw’s suggestion - I think you can do that by editing the curves that make the cloverleaf profile themselves in the ipo window - look at some of Greybeards video turorials -he 's a master at that sort of thing . I only say this because in so far as I know you can’t use NURBS surfaces with shape keys in Blender - the NURBS system is very poor and Dupliframes don’t work with them (mesh only)
But if you insist on using NURBS you can “Skin” them by by setting them as bevOb on a path as per Be Braw’s suggestion .

Stainless with bronze wraps, which cover up some substantial welds… Thanks… The table was a good project, though I didn’t get paid for blending time. It was my first blend of anything to be actually produced.

Can you elaborate a bit on this: “…by editing the curves that make the cloverleaf profile themselves in the ipo window…”

Dupliframes DO work with nurbs, 'cause that’s how I made the stainless table legs–
they are nurbs rectangles (i.e. add surface nurbs>nurbs circle>subdivide a couple of times and scale a bit on one axis), then with ipo curves on ScaleX and ScaleY which make the cross section get flatter and thinner at the ends of the legs. It’s still just a rectangle, though, which is important. (I want to morph the damn cross section to a cloverleaf!) Then I made the duplis real, skinned them, and had a good table leg that I then duplicated for a total of eight copies to make the table model.

Very much guided by Greybeard’s dupliframes tutorial.

It’s SHAPE KEYS that I can’t seem to get to work with dupliframes, though I am having a tough time understanding shape keys at all, so I’m wondering if I’m making some dumb mistake somewhere…

Well, as far as I understand it, and I actually opened up Blender to check - Shape Keys only work with mesh objects and nothing else - you need vertices to store shape keys . NURBS don’t have vertices only control points . You don’t get the “shapes” panel in the Editing button window for curves of any kind (it’s beheind the modifier tab for mesh objects) . Shape Keys are used usually for animating facial expressions and other organic things usually not geometric stuff . You can use it to blend between various mouth shapes etc but I’m not sure if you can use them for skinning along a path like you want to (I think it’s called Lofting - like you did with legs - yeah sorry about the mistake on the dupliframe-NURBS thing it’s been a while I looked at the vid :stuck_out_tongue: and I’ve been using Blender to do organic modelling and not for design) . That’s why Orinoco posted his response like he did - I don’t think anyone’s ever done the dupliframe-shape key thing . NURBS and meshs are a different ways of representing surfaces . NURBS are much more accurate because they are based on curves but in Blender they don’t really have a lot of tools to work with . Maybe someday some programmer will make NURBS control points like vertices function but that day isn’t today .

RE:"…by editing the curves that make the cloverleaf profile themselves in the ipo window…"
Well I am rusty with the whole lofting dupliframes stuff but here is what I mean by that (I just tried my suggestion)

  1. create a NURBS surface
  2. create a bezier curve
  3. make the curve a modifier to the NURBS object
  4. Insert LocRotScale (or other) keyframes to the curve adding additional keys for whenever you want the shape to change (you do this by altering the curve modifier in object mode not the NURBS then adding a key) This is where you can use the ipo window to edit the curve modifier to get more symmetrical behavior . Though I thought there was a direct way of modifiing the curve through the ipo …
    4)add a path for the NURBS and dupliframe .
    I got a long wierd tapering thing …That’s the gist of it though I didn’t figure out how to make it do that symmetrically … you might want to play around with it to get something useful . Or check through some of Graybeard’s tuts (maybe I saw something like this in one of them I’m not sure - I do remember he did a telephone cord tut - I think that’s more along the line of what you want). Sorry I’m pretty fuzzy on the subject .

But right now it doesn’t seem like you can animate (keyframe) NURBS or curves directly in Edit Mode like you can with mesh objects . Control points are not like vertices as far as the animation system goes … But if you can’t make above work just want to create the object you could just dupliframe and edit each frame to the desired shape and then skin … I know a lot more work - but the NURBS toolset in Blender makes a lot of designers and architects run away shrieking like little girls into the arms of Autodesk …

Heres a little tutorial on how i would model the twist into the bar as shown on your first picture, Ive gone into detail so people new to blender can follow (see attached pics below)

Starting from a blank scene go into top view(numpad 7).
Add a plane(press spacebar select add>mesh>plane).
grab(G) contrain to y axis(Y) type 1 and press enter.
deselect all(A).
Select the top 2 vertices and scale(S) type .6 and press enter.
deselect all(A).
Select the bottom 2 vertices and grab(G) contrain to y axis(Y) type .9 and press enter.
scale(S) type .75 and press enter.
delete(X) and select edges.
see FIG.1 to see what it should look like so far.

change the rotation/scaling pivot point to the 3d cursor (. key).
select all (A key).
duplicate (shift-D) then press enter.
Rotate ® and type 90 then press enter.
Deselect all(A).
select all (A key).
duplicate (shift-D) then press enter.
Rotate ® and type 180 then press enter.
Deselect all(A).
select 2 vertices as shown in FIG.2.
Make an edge(F).
Repeat this on the other 3 positions.

Go into object mode(TAB).
Add an empty(press spacebar select add>empty)
Rotate ® and type 36 then press enter.
see FIG.3 to see what it should look like so far.

Select the plane object(RMB)
Add an array modifier
switch off relative offset
Swith on constant offset and set z value to 1
Change count to 11
Switch on object offset and enter Empty next to OB:
See FIG.4

Click on apply modifier and then click ok

Add a plane(press spacebar select add>mesh>plane).
Specials menu(W) choose subdivide multi select 3 cuts and click ok
Box selecct(B) the 9 inner vertices and delete(x) choose vertices (FIG.5)
select all (A key).
scale(S) type 2 and press enter.
grab(G) contrain to z axis(z) type -1 and press enter.
duplicate (shift-D) then press enter.
grab(G) contrain to z axis(z) type -1 and press enter.
duplicate (shift-D) then press enter.
grab(G) contrain to z axis(z) type 13 and press enter.
duplicate (shift-D) then press enter.
grab(G) contrain to z axis(z) type 1 and press enter.

Go into object mode(TAB).
Hold down the shift key and RMB select the first mesh object we made.
join the msh objects(CTRL-J) click ok to join
see FIG.6 to see what it should look like so far.
Go into edit mode(TAB).
Deselect all(A).
select all (A key).
On the 3d window menu goto mesh>scripts>bridge faces/edge-loops and choose segment.

Add a subsurf modifier and set faces to smooth and your done.


Thanks for the mini tutorial. All looked good till I went to the script, and got a “Python script error-check console”


Here’s the console message:

File “<string>”, line 229
edge_dict= dict((ed_key(ed), [ed, 0]) for ed in me.edges)
SyntaxError: invalid syntax

Any ideas how to address this? I think I’ll post a seperate thread about it.

Thanks, though. This looks promising, if not as handy as my nurbs idea.


This isn’t to upstage Hazza or anything but apparently you (Whit) didn’t understand my use of the term “lofting” - I think Blender uses “skinning” but both are pretty equivalent . So I made a short tutorial on “skinning” (or “lofting” as I call it) . Here is the basic how-to of what you want to make :

  1. create a NURBS circle . Subdivide it once . Select the four corner control points - this will help you figure out the order of control points when you are rotating them . TAB out of Edit Mode
  2. go to top view Shift-D then CTRL to move it snapping to grid along its length .
  3. repeat step 2 then TAB in to Edit Mode and scale pressing down CTRL the four corner control points (I don’t know why Blender keep them selected even though they are duplicates but it does) to make into clover shape . TAB out of Edit Mode .
  4. Shift-D then CTRL to move it along its length . Then keysrokes R then Y then 30 (rotate on Y axis 30 degrees) .
  5. repeat step 4 as many times as needed .
  6. to return to square shape re-scale the four control points out pressing CTRL .
  7. Shift-D then CTRL to move it along its length to make ends match .
  8. Select all NURBS circles and CTRL-J to make into one object .TAB into Edit Mode and press F to “skin” them .
  9. TAB into Object Mode and ALT-C to convert to mesh .

The most important thing to remember is that for the “skinning” to work you have to have the same number (and order) of control points - thats why all the Shift-D duplicates are necessary .
You can change the profile shape of any NURBS circle (preferably) before converting them into one object - Maybe this was the “shape keys” you were thinking about . I do not know why but you get wonky results if you duplicate NURBS in Edit Mode and skin them - I think it’s to do with the order of control points - so edit each NURBS object before you convert all into one object . And you could assign a path to them too (also while seperate) .
Steps 6 and 7 are necessary because of all the rotation the control points have gone through (you can’t just copy the first two in the series - they might look the same in the end but the order of control points are not)

Hope this helps .