algorithmic modeling for Rhino



The Pufferfish is one of few animals which is capable of changing its shape.

This plugin is a set of components which focuses on Tweens, Blends, Morphs, Averages, & Interpolations - essentially shape changing. These components are accompanied by support components which are useful methods for the preparation of tween/blend operations such as making polylines compatible and matching surface structures. In addition, there are a few extra components which simplify some common grasshopper operations such as testing for equality with the option of tolerance and reparameterizing numbers.

Location: Grasshopper3d
Members: 91
Latest Activity: 7 hours ago

Pufferfish Info

General notes

  1. Grasshoppers native "Interpolate Data" component can "Tween" simple data types such as numbers, colors, vectors and points already. Pufferfish's Tweens of these types differ in 2 ways. The first being that Pufferfish has 3 types of tweens for each: Tween Two, Tween Consecutive, and Tween Through which perform the tweens in different ways with the input lists. The second difference is that Pufferfish uses interpolation types which match nurbs interpolation for simple data types. Those types are Linear, Chord, Square Root, and Uniform. Grasshopper's "Interpolate Data" component uses  Block, Linear, Cubic, and Catmull. Pufferfish also adds the ability to tween Planes, Surfaces, and Meshes as well as average them. 
  2. Grasshopper already has a native "Tween Curve" component however, it gets odd results sometimes, specifically when tweening polylines. Pufferfish corrects this with automatic internal polyline and curve compatibilization so that the results are more similar to Rhino's tweens.
  3. Meshes must have the same topology to tween. Unlike surfaces, meshes which come from two different sources with different topologies are almost always impossible to rebuild (automatically) to have the same topology and point order for a meaningful looking tween. Please do not ask for this feature unless you can provide some information / documentation about how to do so. As recommended by Autodesk Maya for blending meshes "A common blend shape technique is to create duplicates of a base, deform the duplicates, then use them as targets. For example, you might make several copies of a face, and then alter the copies to create a smiling face, frowning face, a crying face, and so on."
  4. A few minor components may exist elseware in other plugins (it's impossible to check them all). If they are in Pufferfish it is because I felt they are necessary to the workflow and I cannot ensure the user has other plugins installed. For example, Pufferfish has a type of "Rebuild Surface" which varies slightly from but exists also in Lunchbox.


Pufferfish Changelog

Nov 08, 2017 - Pufferfish V1.4

  • Update to improve algorithm for all "On Curve" components and all components with an "Interpolation Type" input.

Nov 01, 2017 - Pufferfish V1.3

  • Update to fix a minor bug in all tween plane components with Quaternion rotation that would result in null planes when input planes X axis's aligned. Added many new examples.

Oct 28, 2017 - Pufferfish V1.2

  • Update to add 9 new components. 3 for tweening planes on curves with Quaternion rotation, 3 for tweening planes on surfaces with Quaternion rotation, 3 for tweening points on curves (like Grasshopper's evaluate curve component except you can interpolate between user defined points on the curve rather than interpolating the entire curve) . Added tolerance input to "Is Arc/Circle/Ellipse" component.

Oct 22, 2017 - Pufferfish V1.1

  • Minor update to add Quaternion rotation option to the Tween Planes components for smoother tween rotations and prevention of Gimbal lock. Suggested by Andrew Heumann, based on a grasshopper definition by Daniel Piker. 

Oct 17, 2017 - Pufferfish V1.0

  • First release

Pufferfish Component List - 74 components 


  • Tween Consecutive Numbers
  • Tween Through Numbers
  • Tween Two Numbers
  • Last Index Range
  • List Length Range
  • Reparameterized Range
  • Equality Within Tolerance
  • Last Index
  • Partition Number
  • Reparameterize Numbers
  • Round To Nearest
  • Default Angle Tolerance
  • Document Angle Tolerance
  • Document Distance Tolerance
  • Zero Distance Tolerance


  • Tween Consecutive Colors
  • Tween Through Colors
  • Tween Two Colors


  • Tween Consecutive Vectors
  • Tween Through Vectors
  • Tween Two Vectors


  • Tween Consecutive Points
  • Tween Through Points
  • Tween Two Points
  • Tween Consecutive Points On Curve
  • Tween Through Points On Curve
  • Tween Two Points On Curve
  • Tween Consecutive Points On Surface
  • Tween Through Points On Surface
  • Tween Two Points On Surface
  • Move 2Pt
  • Pinch'n'Spread
  • Are Points Collinear
  • Are Points Coplanar


  • Average Plane
  • Weighted Average Plane
  • Tween Consecutive Planes
  • Tween Through Planes
  • Tween Two Planes
  • Tween Consecutive Planes On Curve
  • Tween Through Planes On Curve
  • Tween Two Planes On Curve
  • Tween Consecutive Planes On Surface
  • Tween Through Planes On Surface
  • Tween Two Planes On Surface


  • Average Curve
  • Weighted Average Curve
  • Tween Consecutive Curves
  • Tween Through Curves
  • Tween Two Curves
  • Net On Surface
  • Tween Consecutive Curves On Surface
  • Tween Through Curves On Surface
  • Tween Two Curves On Surface
  • Close Curve
  • Compatibilize Polylines
  • Superimpose Curve
  • Is Arc/Circle/Ellipse
  • Is Curve Linear


  • Average Surface
  • Weighted Average Surface
  • Tween Consecutive Surfaces
  • Tween Through Surfaces
  • Tween Two Surfaces
  • Fit Surface
  • Rebuild Surface
  • Superimpose Surface
  • Is Surface Closed
  • Is Surface Singular


  • Average Mesh
  • Weighted Average Mesh
  • Tween Consecutive Meshes
  • Tween Through Meshes
  • Tween Two Meshes

Discussion Forum

This group does not have any discussions yet.

Comment Wall


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

Comment by Michael Pryor on November 8, 2017 at 2:48am

Pufferfish V1.4: Update - Improved algorithm for all "On Curve" components and all components with an "Interpolation Type" input.

Comment by Michael Pryor on November 1, 2017 at 12:40am

Pufferfish V1.3: Update - fixes minor bug in all tween plane components with Quaternion rotation that would result in null planes when input planes X axis's aligned. Updated example files for Pufferfish V1.3. Examples now consists of 2 folders: Components, which has a small example of each component. Workflow, which has more in depth examples using Pufferfish components.

Comment by Michael Pryor on October 28, 2017 at 1:51am

Pufferfish V1.2: Update - adds 9 new components. 6 for tweening planes on curves and surfaces with Quaternion rotation. 3 for tweening points on curves. Added tolerance input to "Is Arc/Circle/Ellipse" component.

Comment by Michael Pryor on October 23, 2017 at 10:55am

Thanks for the example Daniel!

Comment by Daniel Piker on October 23, 2017 at 10:31am

Siemen - If you pull the vertices of one mesh onto another, you can make sure they have the same topology, so it will work with this interpolate mesh component:

This might run into trouble if the meshes are very different, as then it could get pulled onto the wrong part, or in a folded state, so in those cases you might need to add some extra goals to guide it a little.

Comment by Michael Pryor on October 22, 2017 at 7:55pm

Pufferfish V1.1: Minor Update - adds Quaternion rotation option to the Tween Planes components for smoother tween rotations and prevention of Gimbal lock.

Comment by Michael Pryor on October 22, 2017 at 11:47am

Siemen It is because using mesh machine sure you can get the same points and triangle count. However, it is very unlikely that the order of those meshes will be the same in any meaningful way to interpolate between. (that's what same topology means) hence all the criss cross between. Thats why it is suggested in many platforms like maya that you model both geometry from the same base (maybe a mesh sphere) otherwise you get that - The example they say is something like for a face if you don't model from the same base you can get stuff like an eye blending to a nose rather than to an eye. Hope that makes sense. 

Comment by Siemen on October 22, 2017 at 9:57am

Nice work Michael. Regarding the mesh morphing, I was thinking if you remesh your mesh using mesh machine and make sure you have the same amount of triangles it would work nicely. But when I tried this, it doesn't seem to work. I'm not sure if it is because of the ring-like geometry I'm using or something else.

Comment by Kourniatis Nikos on October 19, 2017 at 11:52pm

Good morning from Athens! Help us play topologically...

Comment by Michael Pryor on October 19, 2017 at 2:23pm

@Kourniatis Nikos Most likely in the next updates. I have a bunch of stuff in the works - whats here now was just polished up to get V1.0 out there. Otherwise, I would keep making forever and never actually release it:D 


Members (91)



Search Grasshopper


  • Add Photos
  • View All

© 2017   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service