Feature-Preserving Mesh Decimation in Grasshopper

Hello everyone,

I’m working on a workflow in Grasshopper to reduce the polygon count of a 3D mesh (specifically a low-poly bunny model) while preserving important features and details. which we traditional do with ReduceMesh but
The standard ReduceMesh command in Rhino reduces the overall polygon count but tends to lose important details and features in the process. I’m looking for a more intelligent approach that:

  1. Identifies sharp features (ears, nose, edges) that should be preserved
  2. Primarily decimates flatter, less detailed areas
  3. Maintains the overall character and silhouette of the model

I’ve started by using Deconstruct Mesh and Mesh Edges components to analyze the structure, but I’m not sure how to identify which edges are important features that should be preserved during reduction.

What I’ve Tried

I’ve connected a mesh input to both the Deconstruct Mesh and Mesh Edges components (see my attached screenshot), but I’m struggling with how to:

  • Detect which edges represent important features
  • Apply different weights to edges during the reduction process
  • Connect everything properly to achieve a feature-preserving reduction

Does anyone have experience building a feature-preserving mesh decimation workflow in Grasshopper? I’d appreciate any guidance on components to use, how to connect them, or example scripts that accomplish this.

Thank you!

I think to build something clever is not as easy as you might think it is. What I usually do in such cases is that I add a little bit of a manual workflow. E.g. you could select areas to be reduced with a fade-out.
Another possible way of detecting “features” is to work with face angles. Obviously an over-tessellated mesh adds more faces to an almost planar part of the overall surface. This can however be right if it follows a sharp, but curved, edge somewhere. So as I said, this is nothing trivial.
And last but not least, dynamic tessellation is also an underestimated feature of having a surface representation. So you might now add an extra workflow just to compensate the lack of using Nurbs in the first place.

1 Like

Related threads:

1 Like

@DanielPiker