Greater Control with Surface Morph

Hi, I am trying to gain greater control of the surface morph output, the top image is the input brep and the two results below, however, the result is very skewed and thin, is there a way of forcing smaller, more dense units into the output surface so the input lattice retains it shape more in the output?

Hi @brittanymark.77,

Instead of surface morphing, you could try twisted box morphing with Michael’s Pufferfish library, which gives you more control over the modular distribution.
If you want me to show you how, just upload single module and your base surface!

In general, it is a good idea to provide at least a Grasshopper file, with internalised geometries, otherwise people are often discouraged to help.

1 Like

I would really appreciate that, thankyou!
One Unit.3dm (4.2 MB)

Hi @brittanymark.77,

I noticed that your module is composed out of 52 individual closed breps, which is fine, but makes surfaces morphing rather sluggish. If you want to speed things up, you could work with meshes instead. Mesh modules would also allow you to join the end result into a single mesh (if done right), instead of having to deal with slow and tedious boolean operations on nurbs geometry.

Here’s a quick example using the Pufferfish:

You might notice that the modules on the periphery are squished. This is dependant on the topology of base surface and the number of twisted boxes in its u- and v- directions. More modules obviously mean more fidelity and less squishing!

You can dial all parameters in to your liking, and better than I did. The overall height is fully adjustable as is pretty much everything else! (635.0 KB)


Thankyou so much that is amazing!
I have applied it to different curvature, but do you know why the output with the morphed lattice is not following the shape of the curvature input? I have screenshot it below, where you can see the output is substantially larger than the input surface, is this controlled by the parameters I have labelled X,Y,Z TB? I thought they were controlling the number of units in the various directions but it clearly effecting the Twist Box outline…

Finals Surface (2.3 MB)

Because it is a trimmed surface. Nurbs are evaluated by their untrimmed UV domain for most things in Grasshopper. There is no predictable way to tile a trimmed surface as there is with an untrimmed surface which has 4 sides, so what would you expect the results to be? In other words, how would you tile a circle with square tiles?

If you really need to use this untrimmed shape then I would use Rhino 7 WIP, convert the shape to mesh, quad remesh it, and use Twisted Box Mesh.

The other option is run ShrinkTrimmedSrf command on your surface to get the underlying untrimmed surface structure closer to the trimmed surface, then morph your modules, then trim the modules with the surfaces trim edge.

I tried to open your file but it took too long to open. I suggest reading some of these topics:

Trimmed Versus Untrimmed Surfaces

Lastly, turn on the control points of your trimmed surface and you will understand what is going on.

1 Like

Her module is composed of 52 individual, closed polysurfaces (if I remember correctly), which multiplied by even only a small number of twisted boxes to morph to, rapidly results in a huge number of breps.

@brittanymark.77, you should unify the individual module elements into a single closed polysurface, before performing the surface morphing. This will speed up the definition tremendously! Somehow, I really doubt that you need this many individual parts per module?

I would go with mesh or atleast use Pufferfish’s Morph to Twisted Box which is the multi threaded version of Box Morph if she is not already.

Ok right, I have unified the module to one polysurface now, and made the surface a mesh which is good because now it is following the surface perfectly, and switched to use the Twisted Box Mesh, but I have lost control of the number of modules/ height etc, which went into U,V, W on the original Twisted Box Surface Script, what do I plug into W now? To reconnect the sliders below?


w would be the range + Graphmapper for determining number of twisted boxes in the height for each mesh face. (If you have questions on any Pufferfish component the example files have an example for every single component with notes). For u and v yes you lose that in mesh as meshes are based on face divisions. So that will be determined on how you make your trimmed surface into a mesh to which there is infinite options (and why you cant panelize a trimmed surface so easy as there is no obvious result as there is with an untrimmed surface which is essentially a grid). So this will be up to the user (you) to come up with a solution. Do you simply trim the edges? Somehow conform the grid to the trim edges? Maybe just leave out any panel that falls of an edge? or maybe you want to overhange the edge? Maybe remake the ellipsoid from 4 edges to be untrimmed? All options would have drastically different procedures.

Try drawing the grid you would expect on your ellipsoid trimmed surface the way you expect it should be and then we can help you.

Here are 6 I think of for that shape off the top of my head, all will have different approaches.

1 Like

Right I see thankyou, I would like Patch, when I used Mesh it is not right, as below, so I need to go back to Twisted Box Surface, and how do I make the surface conform like the patch you showed?

It is not right because you are just converting trimmed surface directly to mesh which will have triangles. Attach your trimmed surface rhino file here.

Surface.3dm (2.7 MB)

Would you please be able to direct me to where exactly in the TB Surface script I can define the grid array for the structure? thanks

Just think about your surface differently, construct it without trims.

1 Like

I’ve got it, thankyou so much!!!