What would be the best way to achieve a quad mesh model of this kind of surface: reference image

The object has 12 circular arrays, with 6 holes on the innermost ring, then 12, 18, 24 ... plus 6 per each ring. Please note that the hole diameter is constant.

Modeling each ring with an polar array is possible, but this results in a heavy workload of retopo. I also tried the tissue addon, but could not manage to get clean meshes at a glance.


2 Answers 2


If you run this baby script:

import bpy

idx = 1
vtx = 6
rad = 0.25
inc = 0.25

while (idx < 14):
    bpy.ops.mesh.primitive_circle_add(vertices=vtx, radius=rad)
    rad += inc
    vtx += 6
    idx += 1 

It will create a series of concentric circles with the right number of vertices. (I'm sure a proper Pythonista could do it in one line, and automate some of the steps which follow...)

  • CtrlJ Join the circles into one object
  • CtrlE > Bridge Edge Loops each pair of loops in turn, and F..AltP, fan-fill the center.
  • You wind up with a mesh with one or two diagonals out of place. I'm not sure it would matter, but I cut 1/6 out as shown, corrected the edges, and arrayed it back to a full circle)
  • Select all vertices except those on the perimeter, and CtrlShiftB bevel them, and switch to Face mode. The future holes should be selected.
  • Loop-Tools or Space-Bar > 'Circle' with a radius setting, on the selected hole-faces.
  • Delete the faces
  • Extrude or add a Solidify modifier, and throw on a Subdivision modifier.

enter image description here

The holes aren't perfectly circular but maybe good enough?

enter image description here

  • $\begingroup$ Hmm, it's not quad... but it is after one level of subdiv.... $\endgroup$
    – Robin Betts
    Nov 26, 2018 at 0:40
  • $\begingroup$ Reminds me of the stretching and Shirley mappings blender.stackexchange.com/a/93180/15543 $\endgroup$
    – batFINGER
    May 30, 2020 at 8:17
  • $\begingroup$ @batFINGER Could that have been a way through, I wonder.. I wasn't very Pythonic in those days, was I? Only a little more now, to tell the truth.. $\endgroup$
    – Robin Betts
    May 30, 2020 at 8:33

Thanks to all of you for your support. After some thinking, i came up with this method: enter image description here

enter image description here

[enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Doing this manually is not the fastest method, but i think in terms of topology this is the best result. Maybe someone can do a script to perform the steps.

  • $\begingroup$ Very nice... :) I can't help thinking there's a neater way than both of these... $\endgroup$
    – Robin Betts
    Nov 26, 2018 at 19:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.