Grasshopper

algorithmic modeling for Rhino

Dynamic remeshing - now with feature preservation, curvature adaptivity, and minimal surfaces

This will be incorporated into future releases of Kangaroo, but because it is so much fun to play with (not to mention useful!), I was excited to share this as a standalone component right now.

This is a tool for remeshing, as I first wrote about and demonstrated here.

However, since those first videos over a year ago, this has been improved upon and developed a lot. 

One of the most significant changes under the hood is that it now uses the custom half-edge mesh class Plankton developed as an open-source collaboration by myself and Will Pearson (to whom I owe great thanks for all his fantastic work on this). Big thanks also to Giulio Piacentino for sharing his great work on Turtle, and to Dave Stasiuk, Mathias Gmachl, Harri Lewis, Jonathan Rabagliati and Richard Maddock for helpful mesh discussions.

High quality triangular meshes have many applications, including physical simulation and analysis.

Since I shared some examples of remeshing scripts here, I have also added a few more features in response to discussions and requests:

Feature preservation

This allows the user to set curves and points to be preserved during the remeshing. These can be boundaries or internal curves, and can be useful for keeping sharp creases, or separate regions. (One of the major applications of this tool is creating high quality meshes for input into analysis programs.)

These features can now even be moved while the remeshing is running, and the mesh will stay attached.

Curvature Adaptivity

When a mesh contains features with tighter curvature, smaller edge lengths are needed to faithfully represent the geometry. However, applying these reduced mesh lengths across the whole surface, even in flat areas where they are not needed can be impractical, and slow everything down. A solution is to refine the mesh according to local curvature.

'Fertility' model from AIM shape repository, remeshed with curvature adaptivity. Here the edge flipping option is also set to valence based, which causes the mesh to become anisotropic in the direction of curvature.

Minimal surfaces

Relaxation based purely on 1d elements will not give accurate minimal surfaces, we need to use proper 2d elements.

However, when relaxing meshes to produce minimal surfaces, generating a high quality initial mesh can be problematic and tedious. Uneven meshing can cause the relaxation to fail or give incorrect results, especially when the relaxed geometry changes significantly from the input, causing the triangle quality to degrade even further.
By continuously updating the connectivity of the mesh to maintain even sized and nearly equilateral triangles, even very large changes to the boundaries become possible, and the surface still minimizes mean curvature.

This allows exploration of sculptural forms in a more dynamic and flexible way than I think has ever been possible before (seriously - try it out, I think you'll enjoy it).

Surfaces may 'pop' if the boundaries are moved suddenly or too far apart - as sometimes no minimal surface solution exists with the given boundary conditions.

Any plugin claiming to produce minimal surfaces which lets you move the end rings of a catenoid arbitrarily far apart and still gives a tubular solution is lying! The only proper behaviour in this case is to collapse into 2 flat disks. (As it is currently, the disks will remain connected by an infinitely thin strand, as I have not yet implemented anything to allow genus change, but maybe in the future.)

Here is the component and a basic example file. Feel free to ask any questions about its use, report bugs, or request changes or additions. This is still a work in progress.

MeshMachine.gha

Plankton.gha

Plankton.dll

Remesh_new_examples.gh

To install, unzip and place the dll and 2 gha files in your Grasshopper libraries folder (replacing any previous versions of these you may have installed - these are more recent than other releases). Make sure they are all unblocked, and restart Rhino.

Views: 56440

Comment

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

Comment by Dragos Naicu on April 23, 2014 at 6:14am

Amazing work, Daniel! 

Comment by panhao on April 23, 2014 at 3:41am

Great job.It works well.But there are two Plankton.dll.The old one is from Kangaroo 0096.Can I delete the old one?

Comment by Esteban Pacheco on April 23, 2014 at 2:14am

Hey Daniel! First Many Thanks for sharing your Awesome Plugins...

I did all As descripted:

1) copy all the above posted files to the libraries file, overwriting the old ones

2) I have checked if they're blocked (by opening the attributes tabs, and checking if they can be written)

I still have the problem that Meshmachine cannot load, because Plankton.dll is ALSO unable to load...

Im running in the last version of grasshopper...

i've tried this so far:

i copied the plankton.dll from Kangaroo in (overwriting the One ABOVE) and it runs, BUT the Kangaroo doesnt want to Jump :)

many thanks for your answer

Comment by Daniel Piker on April 23, 2014 at 1:41am
Hi Esteban, I'll need a bit more info than that to be able to help!
Comment by Esteban Pacheco on April 23, 2014 at 1:11am

Not Working in here!!!

Comment by Christian Schmidts on April 22, 2014 at 4:04pm

Hello Daniel,

also working for me on 0.9.0075

Great news and a bunch of good ideas. I would definitely vote for controlling the edge lengths with vertex colors. It is a little bit more complicated but you can control them much preciser. You don't even have to use uto's mesh paint categorically - with components like mesh spray or mesh or mesh blur you could really create well defined transitions.

And you can also quite easily color a mesh according to the distance to some points if you want it that way..

A "jumping dead" kangaroo would be great in that sense that you could integrate it tighter in other processes. Could this also have a slider input (from 0 to 1) where you can iterate throught the steps like on a kind of timeline?

Comment by Daniel Piker on April 22, 2014 at 3:42pm

Thanks ng5.

Anyone who it is not loading for please double check - all 3 files (Plankton.gha, Plankton.dll, and MeshMachine.gha) are in the libraries folder, and each one has been checked to see it is unblocked. The version of the Plankton libraries posted above is a special build, and it will not work with the 0.3.0 release found on the Plankton group page. Also fully close Rhino and re-open.

If it is still not loading please let me know.

Comment by ng5 Alex on April 22, 2014 at 3:17pm

Amazing.!

all working ok with gh 09.0070 and the files you provided

Comment by Maurizio Barberio on April 22, 2014 at 3:08pm

Amazing job!

Comment by Daniel Piker on April 22, 2014 at 2:59pm

Has anyone successfully loaded this from the files above? I'm trying to figure out what could have gone wrong here, and it would help to know if it is broken for all or just some of you.

About

Translate

Search

Photos

  • Add Photos
  • View All

Videos

  • Add Videos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service