algorithmic modeling for Rhino

In response to this discussion:

I am posting my definition for generating an open foam mesh.

(I didn't post back at the time because there were some troubles with weaverbird back then and I was having to use some ugly workarounds, but now that is all fixed)

To sum up the approach -

take a random cloud of points

generate the 3d voronoi

scale the edges of the cells towards their centres, and also towards the centres of the faces.

connect these 2 sets of scaled edges with mesh quads and join

cull some of the outer faces

subdivide and smooth with weaverbird

(In the video there were some other variations on the smoothing/relaxation, both of the initial point positions and the final mesh, using hoopsnake and/or kangaroo)

Views: 201263


Replies to This Discussion

It creates this geometry (inside) direct from lines. But there is only one limitation - endpoints of these lines and these lines must match voronoi 3d cells connections (delaunay 3d). Only if this condition is true , mesh will follow the line. 

what do you think about this, finally had a chance to explore for a minute, probably not as entertaining for your skill as it is for me, but I figured I would show you. basically I am moving the voronoi pieces away from each other then lofting together same faces. I know some parts are redundant in the definition, its my first rough try. I also am using a cluster I made, its in purple. 


Very impressive, Michael!
I tried to find how to make a Kiesler style endless Voronoi (exosceleton), but you thought about it first. Credits to you


nice! i don't really understand this, but thanks for sharing 

Hi Daniel,

Can you provide an explanation or definition for the chainmail model in the last image?

I am curious how you oriented the blue rings.

will this also be in the "bonus" tab ;)

hey daniel,

Just curios ,.....

how did you achieve the voronoi for the delauney of the rabbit ... is it

3d voronoi based in the delaunay points and then intersected with the mesh ?


It is the dual of the mesh. At each vertex, draw a polyline that unites all "centers" of the adjacent faces. "Center" can be defined in various ways.

This is a basic topological modification of a mesh. This is a weak dual.

Hi Daniel (et al),

Great work! I've been working on something similar recently for two projects. Here are a few images from a workshop at University of Minneasota a few weeks ago where I worked with students to design and build a shell structure using Kangaroo and a dual of a triangulated mesh. Like you said, because Rhino doesn't support n-gon meshes, I'm just using polylines after the original mesh. But for some of the renderings later on, we converted these back to mesh tubes around each edge.

Catalyst Catenary Construction Time Lapse from Andrew Kudless on Vimeo.

What I found interesting in this project was that the cell edges begin to align with the flow of force. Where the forces are more focused down through the legs, the hexagonal cells begin to deform so that the edges are more parallel with the force vector. 

Hex Mesh Form-Finding Model from Andrew Kudless on Vimeo.

This is a similar 2D version but starting from a voronoi diagram instead of a triangulated mesh:

Vorlax in 2D from Andrew Kudless on Vimeo.

Finally, here is the same thing but with the vertices constrained to a surface during relaxation. This is for a installation I am installing at the Pompidou next week!

Vorlax on Surface from Andrew Kudless on Vimeo.

Wow, great stuff Andrew, thanks for sharing.

Looking forward to seeing pictures of the Pompidou installation.

It is indeed interesting about the alignment of the edges with the force direction, and it would be great to think of ways this effect might be built upon. I've long seen it as a sort of holy grail of form-finding to have members actively orienting themselves according to principal stresses (and without resorting to voxel based approaches or ESO). It must be possible to make this happen from purely local interactions, as it happens in trabecular bone (which links us back to the original post of this discussion).

I'm also working on some ways of improving the behaviour of catenary meshes so the mass is actually linked to surface area, rather than just lumped at the vertices in fixed amounts, which should be more accurate for structures like this.

By the way - how do you deal with the fitting of the hexagons in the installation in the first video ? are they slightly non-planar, or   is it taken up somehow in the way they fit together ?

Thanks for the node Daniel

other kind of uses:

Thanks for the MeshDual component. Real time saver.

While working on this I needed a process to create a dual of the newly created dual. The routine subdivides each n-gon into a set of triangles connecting each face to the centre. It should work with any collection of n-gon polylines.

In the attached example I used a dodecahedron as the starting point. A number of hoopsnake iterations create a series of buckyballs with increasing frequency.

This seemed useful at first, but later I realised this continuous increase in resolution is a good subdivision routine, I actually need a process that reverse the dual without increasing the resolution of the mesh.

Anyone knows how to do this?







  • Add Photos
  • View All


  • Add Videos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service