algorithmic modeling for Rhino

I figured that before Daniel Piker drops another giant pile of awesome on all of us with dynamic bottom-up mesh topology optimization in kangaroo, I'd share a little bit of some stuff I've been doing on and off for the past several months.  I've been thinking about organic mesh modeling based on driver curves for some time...mostly because of a design idea I have kicking around in my head, but also because I've liked many aspects of the meta-ball to mesh stuff that's been going on, have been amazed by the isosurface tools available in Millipede and have been inspired by Mateusz Zwirzycki's work with Starling.  What I've been interested in is focusing on the the intersections between mesh segments.  The meta-ball/mesh-from-points approach creates even geometry, but the topology doesn't seem particularly well-rationalized, and I'm interested in those moments of intersection.

I've also wanted to try to engage in scripting with meshes on a deeper level for a while, so in my down time in the spring I started up on this, but I now have a little more time to explore it as a vehicle for my research.  Lacking the deep skills that might allow me to develop, for example, a physics-based engine that can dynamically re-write mesh topology, I've instead been focused on a top-down uses driver curves, hexagonal paneled mesh tubes, a stitching algorithm, and then a series of topology optimization passes that apply optimized patches where possible to create a unified, closed mesh.  Finally, with a little love from kangaroo and weaverbird, I do some dynamic laplacian smoothing and extract the dual.

There is still a lot more room for further optimization, and there are several approaches for me to's a matter of writing the code and/or waiting to see what Santa (aka Mr. Piker) possibly brings for us in the coming months.  I suspect that starting from a point that's at least a bit closer to an optimized mesh will accelerate the impact of new functionality in the meantime, this has been a great exercise for me to better understand scripting with meshes...

update: Thanks for the interest everyone!  In response to Andrew's request for further explanation regarding the stitching process:

Walking through it...we begin at (1) with just a series of adjacent and overlapping hexagonal mesh tubes.  The first phase of the script (2) identifies any mesh vertices that are either too close to or lie within another mesh, and it extracts all faces associated with those vertices.  Then (3) the script searches all of the newly naked vertices for proximity to other seeks the closest point and (where possible) tries to match up the topology so that the resulting initial stitch will lead to a hexagon...any place where two vertices on different initial meshes lie within tolerance it splits the difference between the two and welds them together.  The topology optimization strategy here is very primitive, and I think further refinement will be able to create a better result.  The next bit (4) first takes the naked polylines left over from the newly welded mesh and makes sure that they are split at any self-intersections.  This took a bit of time...often, naked polylines return curves that cross over themselves, which obstructs the next part.  Here (5) each naked polyline is analyzed iteratively, triangulating in sequence along the lowest angle between it looks at the polyline, finds the lowest angle, builds a mesh triangle, rebuilds the polyline and then repeats until each polyline has been fully stitched.  Here again I think there is room to improve the topological optimization process.  Next (5) comes a smoothing process with weaverbird's wonderful laplacian smoothing component.  Finally (6) the mesh is ready for testing against the patch database for any pentagons, heptagons and octagons that can be re-worked to maximize the hexagonal duals in the mesh.

Views: 16454


You need to be a member of Grasshopper to add comments!

Join Grasshopper

Comment by Nick Tyrer on October 3, 2012 at 9:13am

It rare when research actually has me excited for seeing what comes next. Really cool David!

Comment by Rodrigo Medina on October 2, 2012 at 6:41pm

Awesome work David keep it up !! 

Comment by Andrew Kudless on October 2, 2012 at 4:47pm

Thanks David for the more detailed explanation. That helped. Great work!

Comment by Michael McCune on October 2, 2012 at 4:47pm

Very impressive David.

Comment by Arthur Mamou-Mani on October 2, 2012 at 4:32pm

Great work, I really like the process and beautiful output. How did you generate such a clean mesh from curves?

Comment by David Lemberski on October 2, 2012 at 2:49pm


Comment by ILYA SOLODKOV on October 2, 2012 at 9:59am

You, set me thinking sadly about is useless spent time
your decision is tremendous

Comment by Ángel Linares on October 2, 2012 at 8:13am

Amazing meshing and research work :)

Comment by Daniel Piker on October 2, 2012 at 7:27am

beautiful meshes!

Comment by Anders Holden Deleuran on October 2, 2012 at 2:26am

Great work David! Thanks for sharing the very thorough explanation. Say hi to the CITA crew for me :)





  • Add Photos
  • View All

© 2020   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service