Jeff's MCAD Blogging
Jeffrey Rowe has more than 40 years of experience in all aspects of industrial design, mechanical engineering, and manufacturing. On the publishing side, he has written well over 1,000 articles for CAD, CAM, CAE, and other technical publications, as well as consulting in many capacities in the … More »
Is A Universal File Format Possible For 3D Printing? Part 1: STL
August 10th, 2017 by Jeff Rowe
Since the dawn of 3D printing, a little over three decades ago, there has been one file format that has dominated communicating with 3D printers — STL. Love it or hate it, and even with its limitations and shortcomings, STL has remained the de facto standard for the 3D printing industry. That may finally be changing, though, with the advent of more contemporary and robust file formats for 3D printing, such as AMF and 3MF. Over the next couple weeks we’ll be discussing the evolution, advantages, and disadvantages of 3D printing file formats, starting this week with STL.
So What Exactly Is An STL File?
Essentially, an STL file stores information about 3D models, but this format describes only the surface geometry of a 3D object without any representation of color, texture, or other common model attributes.
As it has been for three plus decades, the STL file format is still by far the most commonly used file format for communicating with 3D printers.
The true meaning of the file extension .STL has always been somewhat of a mystery. I’ve always considered it be an abbreviation of the word STereoLithography, although sometimes I have also heard it referred to as Standard Triangle Language or Standard Tessellation Language. Which is correct? Probably all of them.
Introduction To The STL File Format
The main purpose of the STL file format is to encode the surface geometry of a 3D object using tessellation. Tessellation is the process of tiling a surface with one or more geometric shapes with no overlaps or gaps. Having no gaps is especially important, as an object must be watertight to be printed. A good real life example of tessellation is a tiled floor.
In 1987, Chuck Hull invented the first stereolithographic 3D printer, and The Albert Consulting Group for 3D Systems was trying to determine a way for transferring information about 3D CAD models to 3D printers. They discovered that they could use tessellations of a 3D model’s surface to encode this information. The basic thought was to tessellate the 2D outer surface of 3D models using tiny triangles (also called facets) and store the facet information in a file.
They realized that if they could store the information about the tiny triangles in a file, the file could completely describe the surface of a 3D model that could be used for other purposes, such as communicating with a machine for producing a 3D part. Essentially, this work spawned what eventually became the STL file format that we know today.
Binary Or ASCII?
The STL file format provides two distinct ways of storing information about the triangular facets that tile the surface of an object – ASCII and the binary representations. Binary files are more common because they are more compact.
In both formats, the following information of each triangle is stored:
An STL file stores the co-ordinates of the vertices and the components of the unit normal vector to the facets.
In binary STL, each triangle is described by twelve 32-bit floating-point numbers: three for the normal and then three for the X/Y/Z coordinate of each vertex – just as with the ASCII version of STL. After these follows a 2-byte (“short”) unsigned integer that is the “attribute byte count” – in the standard format, this should be zero because most software does not understand anything else.
Slice And Dice
For 3D printing, an STL file has to be opened in what is known as a slicer — a piece of 3D printing software that converts digital 3D models into printing instructions for creating an object with a 3D printer. The slicer chops up a STL file into hundreds (sometimes thousands) of flat horizontal layers based on the settings you choose and calculates how much material your printer will need to extrude and how long it will take to do it.
All this information is then bundled up into a G-code file, the native language used by all 3D printers. Slicer settings definitely do have an impact the quality of your print, so it’s important to have the correct software and settings for getting the best quality 3D printed object.
Once the G-code has been uploaded to a 3D printer, the next stage is for those separate 2D layers to be reassembled as a 3D object on the print-bed by depositing thin layers of build materials, and building up the model one layer at a time.
Unfortunately, however, not every STL file is printable. Only a 3D design that’s specifically created for 3D printing can be produced. An STL file is just the container for the data, not necessarily a guarantee that something can be printed.
Also, for 3D models to be suitable for 3D printing, they must have a minimum wall thickness and a watertight surface geometry to be produced. Even though it’s visible on a computer screen, it’s impossible to print something with a wall thickness of zero.
There’s also the consideration of overhanging elements on a model with more than a 45-degree angle — they will require supports to ensure printing without slumping.
Whether you create or download an STL file, taking the time to verify that a 3D model is 3D printable will save you a lot of time, frustration, and wasted filament.
So, is STL dead? No, not by a long shot and we’ll discuss why next week as it competes with newer 3D printing file formats, but still remains relevant.