# What's the fastest / least destructive and most scalable way to create a step pyramid?

I want to create a step pyramid. Not a smooth three dimensional triangle with five faces, but a pyramid with "steps", like this:

Requirements:

• Creating the pyramid should be fast!
• You should be able to control how many "steps" there are
• No matter how big, the pyramid needs to be consistent, meaning all the steps have the same height and the distance between the inner corner to the outer corner of a step is the same
• The "actual" pyramids you are likely referring to did not look like this. What we see today is the skeleton.
– pipe
Sep 16, 2018 at 8:27
• @pipe Actually some of the earlier pyramids were step pyramids. Certain nations only knew how to do step pyramids to begin with, and didn't figure out how to slope them until later. E.g. The Pyramid of Djoser Sep 16, 2018 at 10:47
• @noClue Technically the "smooth 3-dimensional triangle" is the 'proper' pyramid. What you're asking for is a kind of step pyramid. Sep 16, 2018 at 10:48
• Guys... I think everyone will know what I actually meant. Sep 16, 2018 at 17:13
• Actually, no, I didn’t—reading only the title, I absolutely thought you meant the mathematical figure properly referred to as “pyramid.” The current phrasing is misleading and unhelpful, and should be changed. I have suggested an edit along these lines. Sep 17, 2018 at 0:20

There is a builtin addon for that, no need to reinvent the wheel. Under the User Preferences > Addons make sure Add Mesh : Extra Objects is active.

Then in the 3D View simply press Shift + A > Mesh > Extras > Step Pyramid

You can then adjust the builtin parameters as desired.

Only downside is that the addon seems to generate pyramids radially, hence a four sided pyramid seems by default rotated 45° about the Z axis in relation to world coordinates, it also is kind of destructive, in the sense that it can't easily be changed or its parameters adjusted after creation.

As mentioned by @batFINGER the Reduce Step By value needs to be twice the value of the Height parameter to obtain "square steps", where the riser matches the tread depth. Andrew Morton then clarified this is due to the reduction value being applied in relation to total base diameter, taking into account steps on both sides, rather than an absolute tread depth, thus apparently halved.

• Crunching in 45 in for rotation z on creation is one way to "fast" fix. Could you elaborate on how to set reduce step size, eg how and why it needs to be 2x height for consistent step size? Suppose I've gone down the wheel re-invention path somewhat with answer. As mentioned for an irregular base bending the regular primitive whilst keeping insets consistent could prove difficult for some. Sep 16, 2018 at 7:28
• Nice addon! Activating. Sep 16, 2018 at 11:02
• @batfinger I'll have to check on that later, not at the computer right now, never actually used this before this answer. Keeping insets consistent is a frequent problem I encounter too often when dealing with bezier curves bevel objects also. When the "curvature radius" is shorter than the section dimensions it leads to self intersections that are hard to deal with. Sep 16, 2018 at 11:10
• @batFINGER It's twice the height because there are ledges on both opposite sides. Sep 16, 2018 at 12:11
• @batFINGER I caved in to your pressure, details added Sep 17, 2018 at 1:30

A bmesh solution

As an exercise wrote a bmesh script to take a single ngon mesh and make it a consistent pyramid with steps steps of size step_size.

I've used the the primitive plane add as a default ngon. Comment that part out, manually add any single ngon face object, select it, and run script in object mode.

Basically the script takes a face, makes the base (solidify), then insets and extrudes along the normal for each extra step of the pyramid. By no means the quickest way to do this, however for non-regular based pyramids produces solution which may be easier than editing from regular pyramid created using extra objects addon's stepped pyramid.

Sample runs, on default plane, filled ngon circle, and arbitrary 6 sided ngon shaped mesh

import bpy
from mathutils import Vector
import bmesh

step_size = 0.1
steps = 10
# remove and make some single ngon active mesh object for arbitrary base
context = bpy.context
ob = context.object
me = ob.data
bm = bmesh.new()
bm.from_mesh(me)
faces = bm.faces[:]
vec = step_size * faces[0].normal #* Vector((0, 0, 1))

# make the base
bmesh.ops.solidify(bm, geom=faces, thickness=step_size)
bmesh.ops.translate(bm, vec=vec, verts=bm.verts)
steps -= 1

for s in range(steps):
bmesh.ops.inset_individual(bm, faces=faces, use_even_offset=True, thickness=step_size)
ret = bmesh.ops.extrude_face_region(bm, geom=faces)
faces = [f for f in ret['geom'] if isinstance(f, bmesh.types.BMFace)]
verts=[v for v in ret['geom'] if isinstance(v, bmesh.types.BMVert)]
bmesh.ops.translate(bm, vec=vec, verts=verts)

bm.to_mesh(me)


The simplest solution is probably the Remesh modifier:

1. Create a simple pyramid out of five faces. You can do that by selecting the four vertices of the top face and merging them (Alt+M then select At Center).
2. Add a Remesh modifier. Set Mode to Blocks.
3. Increase Octree Depth until sufficient number of pyramid steps has been achieved or surpassed.
4. Decrease Scale to reduce the number of steps.
5. Apply the modifier, optionally tweak the object scale.

At this point, you already have a pyramid shape but its mesh is rather dense. To clean up the mesh:

1. Switch to edit mode (TAB).
2. space -> Limited Dissolve. This fixes vertical faces but it leaves horizontal faces with the wrong edges.
3. Mesh -> Clean Up -> Split Concave Faces. This splits the horizontal surfaces in the way we want. Be sure to select all of the faces.
4. Num 7 -> Num 5 -> 3x Num 4 to switch to top-down view rotated 45 degrees.
5. Box select the north and south slopes and press space -> enter to Limited Dissolve again to remove unwanted edges.
6. Repeat once again for the west and south slopes.

Now you can efficiently tweak the mesh. To remove the bottom step, select the bottom face, then press CTRL + Num + -> X -> Dissolve Vertices. Similarly for the top step.

You can do this by using an Array modifier and an Empty.

1. Create a new cube, and scale it to the size of your step.

2. Very important! Hit Ctrl > A (or the appropriate command on your operating system) and select Scale. This applies the scale so that the array modifier doesn't get confused.

3. Switch over to the Modifiers tab in the Properties panel (looks like a wrench) and select Add Modifier. You should see one that says Array under Generate. Click that one.

4. Create an Empty (Shift > A > Empty). It can be any one of the options you want, we will be able to delete it later. I selected a Cube.

5. Move the empty object to where you want the offset of the step would be. I just set mine with an X and Y of 0, and then I set the Z to 1. That will be the offset each step will take.

6. Scale the empty object to how you want the steps scaled. If you do not scale it, the array modifier will just place blocks upon blocks; you want steps. I scaled mine to 0.8 which looks pretty good in my opinion. Do NOT apply the scale! It is needed for the array modifier.

7. Go back to the cube object and to the modifiers tab. Under Count uncheck Relative Offset and select Object Offset. Click the value box with the cube in it. It should show a list of objects. Select the Empty.

8. Increase the count to the number of steps you want and you should see the pyramid! Adjust it to your liking.

9. To permanently apply this to your object do this: Under the Array modifier click Apply. The modifier should disappear, but the object should seem unchanged. Now, you can delete the Empty.

10. You are done! Following my own steps I got this:

Not exactly your picture but I'm sure by adjusting the values of the empty you can get something of equal likeness :)

• This doesn't leave all steps with the same size... Sep 15, 2018 at 23:40
• Oops...I'm trying to fix that right now. I'm a beginner myself, every time I set the empty Z scale to 1 it looks weird Sep 15, 2018 at 23:42
• @Sam1370 The reason it gets weird, is that it scales down from the most recent one. So if you set the X and Y scales of the empty to 0.9, the first (not counting the original, which stays the same) will be 0.9, the second will be 0.9*0.9 = 0.81, the third will be 0.9*0.9*0.9 = 0.729 and so on.
– user27640
Sep 16, 2018 at 0:13
• This would have been my way... It works fine if your array is in say, Z, and you scale the Empty S-Shift-Z in object mode. All the steps have equal depth - The array elements pick up the XY scale. ,,Maybe the OP wanted a manifold mesh, though? Sep 16, 2018 at 0:30
• @DuaneDibbley Got it, thanks. If anyone has a solution, please edit my answer. :) Sep 16, 2018 at 1:30

If you want each step to set back the same distance and to rise the same height, 1 way I like