Laser Cut Minecraft Elements in Perspex

My son is into Minecraft and I wanted to give him a Minecraft themed present that I’d made myself (beyond creating Minecraft-like scenes in Lego). He also has an burgeoning comic collection so my thoughts turned to the idea of making bookends from coloured acrylic using my recently acquired laser cutter. My first thought was something with his name on it in Minecraft-style lettering but that didn’t really work out well (frankly it looked a little boring) so I decided instead on a block of a Minecraft element as the main component of the bookend.


Initially I considered assembling the faces of the entire block (5 faces of 16×16 pixels – minus some shared) from individual small cubes of material but I soon realised that would be tiresome to assemble and getting the lines straight would require some keying mechanism (like lego). So I came up with the idea of creating a block from a core material (which would protrude to the surface in some places) and using a facing material made from various shapes in different colours.

Creating the Design

Being a electronics/software engineer the idea of creating the cutting curves by hand didn’t even cross my mind and I started working on a Python program to generate the blocks. I have on occasion used Rhino3D and found that Rhino Python is a very good environment for creating 3D (and 2D) designs. The full script is on GitHub.


As an example here is the outline for a piece of the core (orange perspex) along with some pieces from faces which are cut in different colours of perspex depending on the Minecraft element being created (in my case lava).  I used 5mm perspex in four different colours (solid red, translucent orange, solid yellow and translucent yellow). With hindsight two different oranges or reds might have been more striking than the two different yellows but I’m still pretty happy with the end result.

Small note: There are no yellows in the picture as I took the photos at the end and hadn’t any yellow pieces left over + the orange core piece has an additional slot in it because I re-used the material for something else before taking the photo.

Achieving Exact (almost) Sizing

One of the most difficult aspects of this project was the trial-and-error involved in getting the pieces to exactly the right size so that they slotted together well. It’s easy enough to do this in the CAD tool assuming a perfect cutting mechanism but in reality laser cutters melt their way through perspex and the melted cut has a real thickness which I have found to be of the order of 0.15mm or more when cutting 5mm perspex. I compensate for this in the script by offsetting each cutting curve to compensate for the cut width.

The problem is exacerbated by the fact that cut width isn’t constant and so this figure needs to be validated for the specific laser cutter, speed, power, material, thickness and machine beam focus depth. I found that I had to increase the compensation figure (widthOfLaserCutMm in the code below) a little for the larger pieces to get them to fit and reduce it for smaller ones to reduce the gap between pieces. This may be because my logic around resizing the outline of the pieces isn’t perfect but I’m afraid I haven’t tried to think that one through any further – I just fiddled with it until I was happy enough.

Defining the Minecraft Element

The Minecraft element (in this case lava) is defined by a matrix of characters (16×16 in my program) which define a face of the block. To make life easier for myself I define only one face and then mirror and manipulate it to ensure continuity of block colour at the edges.  The letters I used (R, O, Y and X) are arbitrary and could be extended to more colours (or reduced to fewer) fairly simply.

Element Core

The function CreateCoreCuttingGeom() generates the cutting outline for a single level (of the 16 total) of the cube.  I wanted to be able to visualise the resulting block so I decided to generate in 3D first (and create surfaces/solids suitable for rendering) and then generate the 2D cutting curves from that.  This caused me to have to think quite hard about how to “draw” the blocks since each had to be in the correct orientation for the face/level being drawn.  So the main job of the function is to work out if the cutting line needs to move in, or out, or stay in a straight line for each “pixel” of the block level.

The coding generates a string such as “OFI” + “F” + “OF” + “F” + “IF” + …

This represents the directional commands: “Out Forward In Forward Out Forward Forward In Forward” and is interpreted for the level in question using substitution vectors to represent the orientation of the piece in 3D.  Each colour is generated on a separate layer to make life simpler.

A visualisation of the piece is also generated by extruding the cutting curve over the thickness of the material (5mm) and assigning to a separate layer for each colour in the visualisation.

Element Faces

The cutting curves for the components of the faces of the block are generated somewhat differently. I wanted to generate the faces using as few components as possible to simplify construction so I opted for a mechanism to trace the edges of areas of colour.  For each pixel on a face I generate curves around the perimeter of the colour and assign these to the appropriate layer.

Layout & Visualisation

The algorithm for laying out the cut pieces onto the perspex sheets is pretty rudimentary and I ended up moving some pieces around manually to avoid too much wastage.

Before going to the stage of cutting perspex I decided to use VRay to render the element.


Cutting and Assembly

Laser cutting was pretty straightforward and assembly really only involved sticking the pieces together with appropriate glue. A problem did arise however as I wanted to place the Minecraft Element nearer to the centre of the bookend as it looked better there but the bookend wasn’t particularly strong without the support of the cube. I decided eventually to personalise the bookend further by cutting out my son’s name in 5mm clear acrylic and placing this between the block and the main bookend supports to complete the piece.


robLaser Cut Minecraft Elements in Perspex

Leave a Reply

Your email address will not be published. Required fields are marked *