Slicer is a type of software that has special requirements. First of all, it should generate code that will be used by a machine (3D printer). Second, it should work with 3D models. And third, it should do some geometric calculations to slice models by layers, separate layers into entities, and convert entities to printing trajectories.

So, to start doing it, you should be (or your team should have) an expert in manufacturing (to understand G-codes), an expert in 3D graphics, and a math expert. Is it true? Particularly. Thankfully, some already implemented tools have been invented and these tools could help you with some tasks.

## Skill 1: Become familiar with g-codes as machine instructions

G-Codes. There is no need to remember all the codes that your machine has. It could be helpful. But not necessary. You always have a reference. To start developing, you need to understand that one machine code with parameters is just an instruction. It’s like a command in the command line. Later you’ll remember frequently using codes and start developing your own code dialect.

For example, for Composer firmware we’ve introduced M1000+ code dialect. Postprocessing is simple. It also will be helpful if you are familiar with engineering. But don’t worry, after some time you’ll be confident with terms like step motors, thermocouples, etc and you’ll be able to assemble/disassemble printer parts to maintain it (because when you test some software feature, you test it on hardware feature.

## Skill 2: Become familiar with 3D engines

3d-modeling is more complicated. You should know some basic stuff about performance and how to handle it. Slicer always has 3D model operations, like rotation, translation, resizing, etc. Of course, you will use an already developed 3D engine (like Unreal engine, Unity, Eyeshot and others). But sometimes, you will need to implement something special or/and you want to upgrade/change some methods in it.

And it will be useful if you know what a rotation matrix is and how to use it. It could be a problem if you have zero experience with 3d-graphics because the first thing that you’ll probably do is set up your scene. You will need to set lights, body materials, ambient, specular colors, etc. Later you’ll need to maintain collision detection, ray tracing, z-buffers, etc. So, you can always find all this information, but it could be time-consuming to learn it all from zero.

## Skill 3: Become a math expert to do geometric calculations

Geometry. Here is the math. A slicer revolves around offset methods. What is it? It is just a contour around another contour with some equal for every point distance. But not only offsets are used in slicers. There are polygon intersections, differences, unions, and cleans methods used in slicers. Thankfully, you don’t need to implement these methods from zero. Almost every slicer uses the Clipper library which does it. Of course, it has limitations, but it’s better to adapt than implement it on your own. Not in all cases of course. But, you always have special scenarios, when you need to calc something tricky. Joins polygons but only in some special manner (as composite infill in Aura, for example).

So you’ll implement a method that checks if a point is inside or outside of the polygon, calc the intersection of lines, etc. School geometry courses have covered these topics. Later you’ll probably need to develop some tricky algorithms which use graph theory, pathfinding, matrices, etc. The deeper your knowledge the more elegant algorithms you’ll have. You will not need to do it straight, you can optimize code. The result of optimizing will be a win/win combination when you have both clean code and less calculation time.

In summary, the development of 3D printing slicers requires special skills which lay beyond ordinary programming skills. Therefore, our team includes experts in general programming, CNC programming, composite materials, CAE calculations, etc. So, if you want to know something better, you can always send us any questions to the support portal, and we will try to help you with printing and development processes.