Attractor on Grasshopper (Vasarely like)

I am trying to achieve as per the image attached using grasshopper but to no avail.
I have tried rhino 5 using weight point edit and got a similar result but not as good.
Can you help ? Optical-Illusion-Metal-Wall-Art-Decor-Stainless

Yes we can help. This questions was asked many many times, just have to remember the name of the artist who did this first !!

Victor Vasarely, I got it. So you could now surely solve your problem. One clue Use the search on this forum :stuck_out_tongue_winking_eye:


There’s probably another, better way to do this, but here’s my attempt: (55.6 KB)

To adjust the shape you just have to move the control points of the geometry in Rhino.


Thank you for that Laurent

Thanks JB
You are great help. It helps me to learn more about grasshopper.
Marcel Mittelman

Wow, that is super cool @jasongberger! Well done. I managed to reconstruct an R5 version and have two questions:

  1. How did you get the Geo surface?
  2. What is the point of the MD Slider? Changing it or even deleting it appears to have no effect on the model? (16.7 KB) (why is this so much smaller than yours?)

Thank you for the compliment @Joseph_Oster!

  1. The Geo surface was a simple rectangular plane I constructed in Rhino, rebuilt it with 10 U and V points, which I then dragged the middle bunch along the z-axis, and symmetrically away from the center.

  2. Edit: Aside from a couple of brief demonstrations of Sporph on the forum, The only tutorial on Sporph that I could find is from this youtube video:, which does a poor job explaining the function MD Slider, only that it is necessary for Sporph to function. I just tried deleting it, but received an error message. Upon opening your GH file, I found that you’re using Sporph from Jackalope’s plugin (mine is from the native morph), which may explain the discrepancy. Perhaps this is why my file is so much larger than yours?

That step is the trickiest part! Would love to see a parametric way of generating it?

Ah, so. I had forgotten when I last used it but just did some digging and found this thread from ~two years ago:

Fun, fun! Thanks for the reminder and sharing your fine work on this one. Cheers.

1 Like

Here the script, as mentioned a close problem was already answered here

So I reuse my script with some modification to add polygons.
The base surface as a width, length of 20, you can choose the radius of deformation 0 to 10
The “step” of deformation
the number of points in polygon
and if you want smooth curve or polyline curve
Hope it helps and don’t forget to post reference of what you want to copy it helps always recreating it or finding the good links.

And it works on R5, the trick is to put # to search for old components (16.8 KB)


This could be another way using Field withPoint Charge as an attractor. (15.3 KB)


I hacked away helplessly for a couple of hours before giving up. Stepping away from a problem is highly recommended. This morning I used an entirely different approach, quite simple in fact. And it works GREAT! Highly parametric with inputs for ‘UV divs’, ‘radius’, ‘rMax’ (max radial vector) and ‘zMax’. (19.6 KB)

Using your Rhino surface as a visual guide, I tuned my params to roughly match your shape: (15.1 KB)

Unfortunately, integrating my parametric surface into your code from yesterday isn’t going so well and I don’t know why yet… :frowning:





Wassa matter?

1 Like

If you want a parametric surface deformation you can test that (15.7 KB)

I’ll check it out, thanks, but I’m happy with my parametric surface deformation. Still investigating (at a leisurely pace) and found that Sporph and Map Srf give identical results so I’m wondering if fiddling with Sporph inputs might fix it?

P.S. I’m looking at your but integrating it into @jasongberger’s code from yesterday looks like more effort than I want to expend on it, since it’s a bit rough…

I spent a little time investigating your problem, and I think the source of the problem is with the “Surface from Points” component. As you can see with the radius turned down, the circles are the correct shape, but become disfigured at the UV axes adjacent to the borders, like they’re not actualizing.

You do have the correct number of U count, so at the moment I can’t think of a work around or fix for this using this “Surface from Points” component.

I’ve spent way too much time investigating this, rediscovering unpleasant realities about surface UV anomalies that I had pleasantly forgotten. Nonsense like this is what I hate about GH.

P.S. How again did you create your surface manually? I got what you said and spent time last night carefully trying to replicate what you did, both manually and in GH, but never came close to reproducing that surface.

P.P.S. By the way, thank you @laurent_delrieu and @HS_Kim for posting your solutions, esp. the R5 versions. I looked at them and may do so again but was intrigued by holes in the “distorted” compound surface in @jasongberger’s code and would like to reproduce it.


Hey look! I can make pretty colors with my variation too! (56.4 KB)

@laurent_delrieu Thank you for (re)posting your Vasarely code, I found it interesting the way you manipulated the control points.

It’s really not difficult, just a little tedious. Make the square surface, rebuild it to 10V and 10U. Next show the control points, select and move up the center 16 control points 2 units, then move those center 4 control points around that up another 2 units. Then move the same 4 center units 1 unit away from the center along both the x and y axes.


Three different methods for creating the surface: SrfGrid (from points), Loft and NetSurf (using both U and V curves). Each produces different UV results, none like your “tedious” manual Rhino method. (21.4 KB)

Not fun anymore.

1 Like

select and move up the center 16 control points 2 units, then move those center 4 control points around that up another 2 units.

Let me introduce you to SoftMove and SoftEditSrf

With Pufferfish and Weaverbird (12.1 KB)