I'm curious about all the ways you can come up with a solution. I'm searching for the way with the least clicks and maybe the two runner ups. I made up some rules on how to count them:

  • A default installation should be used.
  • Changes in the UI don't count, so you can zoom or pan without adding steps. Changing the pivot point or similar actions count.
  • Every press of a mouse button or key counts.
  • Combos like ctrlLMB or shiftD count as one.
  • The arrow has to be symmetrical. Proportions don't matter, right angles do. The backside of the arrowhead has to be parallel.
  • to broaden the field a bit: extra verts are OK as long as they don't distort the shape.
  • Addons belong in the realm of the second question.
  • In case two answers have the same score, the one posted first gets the checkbox.

The second and more creative question: what's the craziest, least practical and goldbergish way to do it? Feel free to contribute. Any fun solution in between the extremes is probably interesting, too.

So, who manages the least clicks and how?


  • 37
    $\begingroup$ You know... I think this setup could work well for a 3d modeler's version of code golf: create a given model in the least amount of clicks possible. That could be fun. :) $\endgroup$
    – user18695
    Commented Feb 7, 2018 at 14:24
  • 1
    $\begingroup$ Especially since time is money in the professional world. $\endgroup$ Commented Feb 7, 2018 at 15:11
  • 17
    $\begingroup$ Perhaps we could have a new tag to indicate this kind of thing. Perhaps ‘Challenge’ or something similar. I don’t know what conventions (if any) are in place for other SE sites. Maybe a question for meta. $\endgroup$ Commented Feb 7, 2018 at 15:25
  • 4
    $\begingroup$ The extra curve objects addon that is part of a standard blender install , includes an arrow. $\endgroup$
    – sambler
    Commented Feb 10, 2018 at 5:51
  • 2
    $\begingroup$ What actually made this question have 8k views when other questions have a 100 in the same time? $\endgroup$ Commented Feb 13, 2018 at 23:49

22 Answers 22


So I thought to myself: These answers are so amazing, but they're hard. Even I have trouble recreating them. I have to do something. I need to provide a simple and effortless answer and after a while, I found it.

Step 1: Create a seven sided Cylinder.

7-sided cylinder in front view

Step 2: Build this ordinary and straightforward armature (shouldn't take long) and connect it to the circle.

simple armature a la Watt

Step 3: Push the Bone that has the shape of a modeled arrow (khm) up a bit.

Finished rig

I mean, it doesn't get much easier than pushing a bone up a bit.

To explain:

The orange and red ones are simple 2 bone IK-chains pointing to the mover arrow.

The green ones are parented to the orange ones and move with them. They are not necessary but it's a bit clearer that way. You could parent dark blue directly to orange with offset.

Dark blue is parented to green.

The blue ones are again simple 2 bone IK chains pointing to the light blue targets.

The yellow circle bones sit in the middle of the dark blue bones and are the only ones having deform enabled.

The tricky bit is to find the right lengths for red and orange so that a single bone moves all the green bones just the right amount.

James Watt has discovered this green/dark blue/light blue lever for his steam engines. It's called Watt's linkage. It enables the yellow circles to move pretty much in a straight line. It's still used in trains to keep the wheels from moving back and forth.

The orientation and length of the blue bones isn't just random. I simply put the tips on the arrow verts and the roots on the circle verts. Then I duplicated and rotated them 90 degrees to get the linkage with it's required right angles. Yes, simple rotation of a bone with start and end on a circle would have been enough, but meh...

  • 29
    $\begingroup$ Argh why didn't I think of this, its so simple! $\endgroup$
    – 3pointedit
    Commented Feb 10, 2018 at 23:43
  • 2
    $\begingroup$ Once you see it, you can't unsee it. But you can beat it. $\endgroup$ Commented Feb 14, 2018 at 16:49
  • 2
    $\begingroup$ you are a god amongst men $\endgroup$
    – Derek Eden
    Commented Apr 18, 2020 at 5:41
  • 1
    $\begingroup$ I fail to see the simplicity in creating such an armature, however the usage is ridiculously simple. Am I missing something? $\endgroup$ Commented Feb 3, 2022 at 22:02
  • 2
    $\begingroup$ "Am I missing something?" @SylvesterKruin Just all the humor, just the humor. $\endgroup$ Commented Mar 2, 2022 at 21:46

Unicode font

Copy the solid right arrow 🡆 from unicode arrows

Add a font, edit mode, select text, select font, paste arrow, extrude.

  • $\begingroup$ I thought about something similar, but really it seemed too crazy :DDD $\endgroup$
    – m.ardito
    Commented Feb 7, 2018 at 10:12
  • 5
    $\begingroup$ @ m.ardito With this question, there is no such thing as 'too crazy'. I eagerly await the first truly convoluted solutions. $\endgroup$ Commented Feb 7, 2018 at 16:15
  • $\begingroup$ Note: make sure the font has a license you can use for personal/commercial use $\endgroup$ Commented Feb 8, 2018 at 15:18
  • 1
    $\begingroup$ @lat good thing to check. The font linked by the page linked by the answer is open source, so that seems to be satisfied. $\endgroup$ Commented Feb 8, 2018 at 17:41

Fewest clicks? Bah. Here's how you do it without even editing the default cube, the only solution for the truly lazy:

enter image description here

Conforms to Default Cubism rules.

  • 1
    $\begingroup$ I learned a useful alternative use for the Screw modifier from this, and I think it fixes an issue I had with the solidify modifier (and how it doesn't work well with single edges). Thanks! $\endgroup$
    – Ben
    Commented Nov 18, 2020 at 21:33

Here's a fairly crazy method.... create it mathematically using the Add Mesh: Extra Objects addon.

  1. Enable the addon (Extra Objects)
  2. Add a Mesh/Maths Function/Z Surface
  3. Enter the equation as

Optionally increase the step sizes for better resolution

This should produce something like this :

Z Surface Arrow

To explain the equation a little, it consists of two sections - one for the 'head' of the arrow (where y>0) and the other for the 'stem' of the arrow (where y<0) - and these conditionals are multiplied together to act as logical 'and' operations. For the stem, the equation


gives a high point whenever X is greater than -0.5 and also less than 0.5. For the head, we calculate the distance of the X coordinate from the axis


(ie, sqrt(x ^ 2) - which is effectively the same as an 'abs(...)' function) and combine this with the Y coordinate to create the diagonal.

If you really wanted to you could use a Boolean modifier with a cube to chop off the excess around the base of the arrow where Z=0.

Taking this further, here's a 3d version using the XYZ Function Surface in place of the Z Surface :

3d arrow

The key here is the equation :


which creates the profile of the arrow from the 'v' coordinate. This is then multiplied by cos(u) and sin(u) for the X and Z coordinates to rotate the profile around the Y axis. Y is generated directly from v to give the arrow length. Note that U ranges from 0 to 2*pi for a full rotation and V ranges from -2 (the back of the arrow) to 1.0 (the tip of the arrow) matching the constants in the equation (-2 = the back of the arrow, 0.5 the thickness of the 'tail', 1 the tip of the arrow, with the back of the head at zero. The 'v>-2' closes the back of the arrow by collapsing down to 0 for v = -2.

One (final) edit - using a helper function to simplify the repeated equation and adjusting to produce a more traditional 'extruded'-shaped arrow, but using a step size of 4, adjusting the start/end values, and adding a conditional to the X Equation (note the specific settings in the left-hand panel).

extruded-shaped arrow

  • 1
    $\begingroup$ Might save that one as a preset. IMO definitely the craziest so far. Do you find code markup doesn't work after a numbered list? Had that hassle yesterday. $\endgroup$
    – batFINGER
    Commented Feb 7, 2018 at 10:44
  • 1
    $\begingroup$ Thanks! Yeah - having no end of trouble with the markup there. It's still not quite right but it will have to do. $\endgroup$ Commented Feb 7, 2018 at 10:49
  • 2
    $\begingroup$ meta.stackexchange.com/a/99637/305735 $\endgroup$
    – batFINGER
    Commented Feb 7, 2018 at 11:02
  • 2
    $\begingroup$ Apart from the most efficient version, stuff like that is exactly what I was looking forward to. Cool! $\endgroup$ Commented Feb 7, 2018 at 11:56
  • 2
    $\begingroup$ Also note you can use the ternary operator sin(u) if u < 3 else cos(u) in your expressions. $\endgroup$
    – batFINGER
    Commented Feb 11, 2018 at 11:04

You can do this in 8 steps, or 7 steps if the arrow tip may be squished. 11 or 9 if drag counts as two atomic operations.

  • tab - switch to edit mode
  • Select mode: edge select
  • altctrlright click - select all edges oriented along the X axis
  • ctrlI - invert selection
  • subdivide from the tool shelf
  • ctrl drag edge from (0, 1, 1) to (0, 0, 2)
  • ctrl drag edge from (0, 1, -1) to (0, 0, -2)

Last step is only needed if the tip has to have a right angle

  • ctrl drag edge from (0, 1, 0) to (0, 2, 0)

enter image description here


Cylinder "triangular prism" approach.

Add a cylinder with 3 vertices

enter image description here

Edit mode, face select, select y axis normal face, loop cut 2, drops us back into edge select mode with new edges selected.
shortcut for Loop cut slideCtrlR2EnterEnter

enter image description here

go back to face select mode, select middle face and extrude in y direction. EY drag.

enter image description here


Another way:

start with a standard cube

enter image description here

scale on x

enter image description here

make a loop cut at x center

enter image description here

select top/bottom front edges

enter image description here

and scale on Z 0 (to merge them)

enter image description here

then select center loop top/bottom edges and use "rip fill"

enter image description here

then scale on Z

enter image description here

enter image description here

here is an even faster way to do the same thing: lasso select, extrude, scale to zero, rip fill.

enter image description here

  • 7
    $\begingroup$ Rip Fill, another one of all the science fiction I have missed catching. Thanks $\endgroup$ Commented Feb 6, 2018 at 21:03

Install curve galore addon

Shift+A Add curve -> Curve profile -> Arrow

enter image description here

Press F6 for detail

Press Alt+C convert to mesh

Press Del Limited Dissolve

Select all the faces Press E to extude

enter image description here

enter image description here


Adding a separate answer as it is a completely different/crazy way: knife tool (with ZC modifers) comes to rescue, here:

enter image description here


  1. add a simple plane
  2. enter edit mode
  3. press K to enter knife tool, then press ZC to activate "cut through" and "cut staight" knife mode
  4. start cutting the diagonal, then cut three more lines to shape the arrow 'base'
  5. press enter to finalize the cut
  6. now press C and select 4 edges to be deleted
  7. delete the edges pressing X
  8. select all and extrude on Z

and an even different one, where simpler tools are used

enter image description here


  1. add a simple plane
  2. in edit mode, select all and duplicate with shiftD
  3. X1 to shift the duplicated face to 1BU right
  4. press R45 to rotate it 45°
  5. now select the undesired vertex and press X then select "dissolve vertices" (now you have a quad face next to a tri face)
  6. now select all and extrude on Z

as for the crazyest, you could cut the shape from a cube with booleans, or draw an arrow shape with GP tools, then convert to mesh and extrude...

  • 1
    $\begingroup$ Sigh, So many tools I never use and the gif makes it look so easy lol. $\endgroup$
    – batFINGER
    Commented Feb 7, 2018 at 10:05
  • 2
    $\begingroup$ my poor 64kbit internet and the gifs of bandwidth death have a strained relationship ( : $\endgroup$ Commented Feb 7, 2018 at 11:58
  • 1
    $\begingroup$ @Haunt_House I've added detailed steps, to make it more clear. If not enough I'll add step-by-step images, it'll just take longer - sorry for you 64kbit net :(( $\endgroup$
    – m.ardito
    Commented Feb 7, 2018 at 12:27

Pretty sure this is the shortest method here yet. Thanks to batFINGER it is down to only five three steps!

  1. copy the code below
  2. (in blender) press ShiftF4
  3. paste in the code

Perfect arrow with nice clean topology (no double vertices or edges), and its easier and faster then any other method.

verts = [(-0.305, -0.305, -0.183),
 (-0.305, -0.305,  0.183),
 (-0.305,  0.305, -0.183),
 (-0.305,  0.305,  0.183),
 ( 0.305, -0.305, -0.183),
 ( 0.305, -0.305,  0.183),
 ( 0.305,  0.305, -0.183),
 ( 0.305,  0.305,  0.183),
 (-0.496,  0.305, -0.183),
 (-0.496,  0.305,  0.183),
 ( 0.496,  0.305, -0.183),
 ( 0.496,  0.305,  0.183),
 ( 0,     0.861, -0.183),
 ( 0,     0.861,  0.183)]

faces = [[1, 3, 2, 0],
[7, 5, 4, 6],
[5, 1, 0, 4],
[2, 8, 12, 10, 6, 4, 0],
[7, 6, 10, 11],
[3, 9, 8, 2],
[11, 10, 12, 13],
[9, 13, 12, 8],
[7, 11, 13, 9, 3, 1, 5]]

mesh_data = bpy.data.meshes.new("Arrow")
mesh_data.from_pydata(verts, [], faces)

obj = bpy.data.objects.new("Arrow", mesh_data)

scene = bpy.context.scene
for ob in bpy.context.selected_objects:
    ob.select = False

obj.select = True
bpy.context.scene.objects.active = obj
#end script

Yes the ending comment does something. (It saves a press of Enter)

  • 3
    $\begingroup$ Or shift F3 paste into console. Removes steps 3 and step 5 $\endgroup$
    – batFINGER
    Commented Feb 9, 2018 at 4:38
  • 1
    $\begingroup$ @batFINGER I tried that but could not get the multi line to work. $\endgroup$
    – David
    Commented Feb 9, 2018 at 14:28
  • 8
    $\begingroup$ Does each character of the script count as a keypress/step? We need @Haunt_House to check the rulebook ;-) $\endgroup$ Commented Feb 9, 2018 at 21:00
  • 1
    $\begingroup$ Yeah, the point about addons actually was meant to incluse any scripts. In the end, the contest isn't half as interesting as the wealth of approaches that arrives here. And it's much cleaner mesh creation than what I usually hack together. I like it. $\endgroup$ Commented Feb 10, 2018 at 23:16

There aren't any answer with curves yet (besides the Curve Galore add-on), so let's do it with curves!

  1. Add a Bezier Curve (Shift + A)
  2. Go in to Edit Mode (Tab)
  3. Straighten the curve (S + Y + 0 + Enter)
  4. Set Pivot Point to Individual Origins (. with Pie Menus)
  5. Collapse handles to points (S + 0 + Enter )
  6. Select 1 point (Box select with B)
  7. Extrude (E + Enter)
  8. In the N panel, set the Radius to 4
  9. Extrude again, this time moving the point further along the x-axis
  10. Set the Radius for the new point to 4.
  11. In the Curve panel of the Properties editor, set the Fill to Full
  12. Set the Bevel Depth to 0.2
  13. Set the Radius Interpolation to Ease

You can optionally increase the Resolution for a smoother arrow.


enter image description here


Here's a method modelling from a plane and adding a solidify modifier. Technically I think this is 13 steps - although you might rule some of them as combined (eg, Merge/At Centre - does that count as 2 or only 1?) :

  1. Create plane (Add/Mesh/Plane)
  2. Edit mode (Tab)
  3. Click Subdivide in tool shelf
  4. Increase subdivision to 2
  5. Select none (A)
  6. Choose 'Edge' mode
  7. Select two opposite corner edges (for arrow stem) - using Ctrl-Drag to lasso select
  8. Delete Vertices
  9. Shift+Alt-Right-Click to select the 'front' edge
  10. Merge (Alt+M)
  11. At Centre
  12. Object Mode
  13. Add Modifier/Solidify

Technically that's it, although the thickness might not be immediately apparent. Increase the Thickness of the Solidify modifier as desired.



Adding another weird one, since I read that proportion does not matter much, just different from any else above

enter image description here ie:

  • having vertex snap activated,
  • add a 7-circle (preset as default),
  • edit mode, then fill its face with F
  • then grab 2 vertices
  • X-scale to align with base ones
  • Y-translate to align with top arrow ends
  • select all, Z-extrude

another one

enter image description here

  • either start from a basic plane, and subdivide 3 times, or from a grid with 5/5 subdivisions (faster if a default preset)
  • select 6 top left/right vertices with a single C drag gesture
  • press X and dissolve vertices
  • select 4 bottom left/right vertices
  • press X and delete vertices

forgive me adding third (fourth and fifth method) answer, yesterday I just got fired after 17 years... I need some kind of fun... and thinking something else...

  • $\begingroup$ OK, few things. I had the first solution (7point circle) already on my screen and it's a good one since it's so minimalistic (only selection and scaling is needed) and yes, it meets all criteria. If it helps you clear your head, just create more. Ideally in separate answers, maybe. If you are interested in getting pointers to what is necessary to build your own busines as risk free as possible, I can give you some pointers that do not seem to be common knowledge although they're obvious. I'll help if I can. $\endgroup$ Commented Feb 9, 2018 at 16:36

Here's an alternative solution using a Skin modifier. Essentially, create a line of vertices and set the radius on each to create the arrow.

  1. Starting with the default cube, got into Edit mode (Tab) and select Merge/At Centre to create a single vertex.

  2. Extrude the single vertex in the required direction - E5Enter (this will default to the 'X' direction)

  3. Select all (shift-rightclick the other vertex or press A twice), click Subdivide, and change number of cuts to 2

string of vertices

  1. Add Skin modifier (optionally switch to wireframe mode - although this isn't strictly necessary))

  2. Adjust Mean Radius X to set the 'depth' of the arrow

  3. Select the 'front' vertex. Set Mean Radius Y to zero

set point to zero

  1. Select the next vertex. Set Mean Radius Y to the maximum width of the 'head'.

set head width

  1. Select the next vertex. Set Mean Radius Y to the width of the stem. Grab the vertex and move it very close to to the previous vertex (to make as close to 90 degrees as possible) - as close as possible to length/numedges, so for an arrow of length 5 with 4 evenly spaced vertices (from the subdivide) = 5/(4-1) = 5/3 = 1.66666, so, say, GX1.65Enter

set head back

  1. Select the last vertex and set the Mean Radius Y to the width of the stem.



Let's go simpler. Nowhere in the question's rules does it state that the arrow must be a single object. That is an assumption, and doing away with that assumption will allow us to refine our approach.

With that in consideration, here is what I believe to be the solution with the fewest steps:

How to create the simplest arrow: Step 1: Add a Cylinder with three vertices. Step 2: Move the "Cylinder" two Blender Units on the Y axis. Step 3: Set the Cylinder's Radius to two. That's it!

Of course, you can add complexity if you wish. You can Join the two objects into a single mesh, or Boolean them together. But those steps are not required to satisfy the problem. :-)

  • $\begingroup$ Clever. I do mean a single mesh, but since it's indistinguishible... $\endgroup$ Commented Feb 14, 2018 at 16:33
  • $\begingroup$ and because you are setting all the parameters in the add cylinder operator, you could (maybe) count this as one step. Nice one. I'd count this as 4 steps. $\endgroup$
    – David
    Commented Feb 15, 2018 at 16:43

Results first:

enter image description here It's an arrow! No, it's not perfect, yes it's transparent, no I don't care. There's some caveats:

  • It's not actually a mesh, only a displacement map. This means it'll only be visible in (viewport) render and doesn't even work in Eevee.

  • Since it's a heightmap, it also doesn't have a bottom plane.

  • Edges aren't vertical; the straighter these are, the more artifacting you get.

Shader node setup:

enter image description here

A quick summary:

Multiple shapes generated from vectors are intersected using Math Minimum/Maximum nodes; these eventually form a triangle part and a stem part. The stem part is subtracted from the triangle part which results in a (flat) arrow. This is then passed through a displacement node that gives the arrow its height. I'm using adaptive subdivision (experimental setting) to get a nicely smooth arrow.

Do note that my Mapping nodes are using the Texture vector type; the difference is that these create smooth white/black transitions. Initially I was using Point vectors; the instant value transition caused a lot of artifacting.

The group nodes simply contain a Mapping node and Separate XYZ node, which then outputs X and Y values.

enter image description here

The first part of the shape I'm building is the base of the stem, so the arrow is positioned in the center of the plane and doesn't stick to the edge. For the sake of visibility I've bypassed the clamp node on the right; this just reduces the value range to flatten surfaces.

enter image description here

The next two node groups create a square in the bottom corners of the plane. Top one handles the left square, bottom one handles the right square. In the Maximum node that follows these are combined; this yields a plane with white squares in both bottom corners.

enter image description here enter image description here

Both shape parts are now added together to create a mask for the stem. Afterwards, these are inverted so they can be subtracted from the triangle part.

enter image description here enter image description here

Speaking of which, the triangle part consists of two angled vector inputs (note the rotation on the Z axis in the node group), one as shown and the other flipped along the Y axis (or, actually rotated 90 degrees and size inverted! in hindsight this could've been done in a better way)

These two triangles are then merged into a single triangle arrow part.

enter image description here

We've now got the required masks to form an arrow shape:
enter image description here enter image description here

The Minimum node intersects these images:
enter image description here

Finally, there's a bunch of nodes that invert the mask we just made and change the shader of it to either diffuse white or transparent based on the mask color. Black is made transparent, white stays white.

The output from the Minimum node is also fed through a Displacement node which generates a displacement vector which is plugged into the material output. The material is set up so that displacement is on (Material > Settings > Displacement > Displacement Only).
enter image description here

Probably the least efficient way of actually modeling an arrow since it's not even a mesh yet (only a displaced subdivided plane) and it took about 3 hours and multiple iterations to get it working.

  • $\begingroup$ what is this black magic.. $\endgroup$
    – Derek Eden
    Commented Apr 18, 2020 at 5:35
  • $\begingroup$ delightfully perverse! :) $\endgroup$
    – Edward
    Commented Jul 16, 2020 at 22:24

Throw four Modifiers on the default Cube and add an Empty.

Arrow made from the default Cube using 4 Modifiers plus an Empty


Inspired by the numerous cool examples (John's in particular), here's two attempts of my own.

First I tried this:

1 SHIFTA Add Cube.

enter image description here

2 TAB for Editmode

3 & 4 W1 to subdivide it

enter image description here

5 CTRLSHIFTLMBLasso-Deselect all but the right corner verts

enter image description here

6 G and CTRL to move them one unit to the left

enter image description here

7 SY(RETURN) to scale them up a bit

enter image description here

enter image description here

After that, I thought... this can go the other way, too:

5 Lasso Deselect ONLY the corner verts

enter image description here

6 G and CTRL to move them one unit to the right

enter image description here

7 SY(RETURN) to scale them down a bit

enter image description here

enter image description here

If I obeyed my own rules, I think there would be more keypresses to count. But I don't count my answers anyway. I just wanna add to the variety with a bit of Lasso Select.

  • $\begingroup$ That’s pretty neat! $\endgroup$ Commented Feb 9, 2018 at 22:37
  • $\begingroup$ It's simply old. I'm not sure but it might just work even in 2.12 if you substitute lasso select with circle select, B B back then. $\endgroup$ Commented Feb 10, 2018 at 23:20

Nobody has mentioned starting with with Nurbs Surfaces yet, so just for fun, here's another way starting a surface wedge (does require extra curves addon):

  1. Convert to mesh Ctrl+C

  2. Fill both empty faces with F (two steps I guess)

  3. Scale on Y axis to desired size and rotate 90 degrees
  4. Add two loop cuts with Ctrl+R to create the base
  5. Extrude loop cuts with E to desired amount to create the base of the arrow
  6. Recalculate normals with Ctrl+N
  7. Turn on auto smooth

enter image description here

  • Add a circle, change the number of vertices to 3.

  • Subdivide one of the edges by 2

  • Extrude the newly created vertices.

  • Select all and extrude vertically (or use a solidify modifier)

    enter image description here

Terrible topology with a big and ugly n-gon, but there was no requirement on the question quads..


Here's one more that's all quads just for fun, add mesh -extra objects addon should be enabled for the triangle object.

  1. Add a triangle Add mesh>math funtion>triangle and change the face to 6 sided quads
  2. Extrude the base of the arrow
  3. Select all and extrude downward to prevent flipped normals enter image description here

Here's yet another way to do it, moderately efficiently.

  1. insert 7-sided cylinder
  2. apply Mirror modifier with Axis=X, Bisect=X (this is Blender 2.90)
  3. Tab to go into Edit mode
  4. select rightmost vertical edge
  5. in orthogonal top view (7) use G to move edge to $$x = 0.43388, y = 0.62349$$ $$x = \sin(\pi/7), y = \cos(2\pi/7)$$


create arrow from 7-sided cylinder


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .