
Week 5: 3D Scanning & Printing
Table of Contents
This week, we got introduced to 3D scanning and printing. Our tasks were to characterize the available printers, scan and refine a real object, and learn how to design an object for 3D printing. In particular, I worked with Blender where among other things I learned how to perform physics simulations.
This Week’s Tasks
- Group assignment:
- Test the design rules for your 3D printer(s)
- Document your work on the group work page and reflect on your individual page what you learned about characteristics of your printer(s)
- Individual assignment:
- Design and 3D print an object (small, few cm3, limited by printer time) that could not be easily made subtractively
- 3D scan an object (and optionally print it)
Introduction to 3D Printing
In this week’s Lecture, Neil talked about 3D Printing and Scanning. We covered different printing techniques, materials, design rules for designing objects for 3D printing as well as more or less affordable options for scanning objects.
Ferdi added to the lecture by discussing early 3D printing projects, such as Popfab (portable printers that fit in a suitcase). He also hinted us at useful software like Codethread for generating G-code to print structures that you could hardly model in CAD and he talked briefly about the concept of topology optimization (TopOpt) for creating lightweight structures.
Types of Printers
There are several types of 3D printing technologies. Fused Filament Fabrication (FFF) is one of them. It is synonymous with Fused Deposition Modeling (FDM), a trademarked name that belongs to Stratasys. FFF uses different filament types, including PLA (polylactic acid), which is a plant-based, but rather porous material. Another material is PETG (polyethylene terephthalate glycol-modified), which is oil-based, recyclable, and more robust.
Selective Laser Sintering (SLS) involves the use of powder, which is heated with a laser ed until it melts. Another printing method, Stereolithography (SLA), uses photochemical processes to form solid polymer structures from specific fluids. The video R&D Tour: The engineering behind SLA/SLS Printers by Breaking Tabs was a recommended watch for that.
Additionally, there are other techniques worth mentioning, such as FFF printing with clay to retrieve ceramic objects. Similarly one could print with clay mixed with metal (see Prototyping - Metal 3D Printing by Dan Gelbart on YouTube for reference) and then removing the clay in an oven to retrieve a metal part. Another example is printing with color, as demonstrated in a project described on Hackaday.
Selected Issues with 3D Printing
With 3D printing issues may arise that require further tuning of the printing parameters: Over-extrusion (printer extrudes too much plastic) results in visible horizontal lines and overall poor quality, along with irregular layers. Wrong temperature settings lead to an uneven surface gloss. Incorrect retraction length or retraction speed cause stringing or a lack of material. Wrong belt tension, referring to the tension of the belt that moves the print head, can make the print inaccurate if it is too loose. If the steps per millimeter in the X and Y direction are not tuned sufficiently, prints will be inaccurate as well. To test this, a cylinder can be printed. If the cylinder is not round, the tuning is inaccurate. As it can be seen in the following, these issues are fortunately not significant with our printers. Warping is a problem which is rather dependent on how a model is printed. If there is a large contact area, the model bends. To combat this, brims can be added at the corners, or the object can be printed tilted to reduce the contact area.
Other settings that are important include minimal layer time, height of the first layer, and seam line position. If a printer is finished with a layer before the minimum layer time is exceeded, it waits until it is before printing the next layer. This allows the layer to cool down sufficiently before printing the next one on top of it. The height of the first layer is significant for the stability of the print. The seam line, where the print head moves up to print the next layer, can be chosen to be a straight line or it can be randomized.
How To Print
First, we looked at what is the process to get a printed object given an .stl
file. The first step was to slice the object. Slicing is a process that takes a 3D object file (such as .stl
) and yields G-code, which defines how the printer nozzle is to be moved at what speed to print the given object. To do that, a slicer software is needed. I used Prusa Slicer. When installing Prusa Slicer, one has to click through the installation wizard. When it came to choosing the printer and filament presets, I chose the 0.4 nozzle standard and input shaper presets for the printers Prusa MK4S and the Prusa XL, our available printer types. As filament presets I selected to install the ASA, PETG, and PLA presets of Prusament (filament brand from Prusa which is available at our lab) as well as the generic presets. More filament presets could be added later on. For the UI, expert mode was selected, so no options in settings and menus were hidden.


When preparing a print, the printer should always be chosen first, followed by adjustments to the print settings and filament. This was because if the printer was changed, the settings above would be overwritten.

For the first print, we chose this printer benchmark (version from 2018-02-25) which will also be used later for analyzing the printers’ performance.

The downloaded .stl
file was added to the slicer.






.stl
files (containing non-printable structures, free floating surfaces, etc.), objects that probably require support for certain structures where support is disabled, or overlapping objects when multiple objects are printed.

In some configurations, a so-called wipe tower is added by default. Its purpose is to in case of multi-filament printing wipe the nozzle after a change of filament.





If you need to print something which would need to flow in the air while printing, additional filament needs to be added which is not part of the object itself, but supports the printing process. Thus, it is called support. There are different support options available. One option is None, where no support is used. Another option is support on the build plate only, which means that support is added only on the plate, and holes above the ground are not supported. The third option is everywhere, where support is applied for both.
There are also different types of supports to choose from. Two support types are snug and grid. Another one is called organic. It creates tree-like structures, though it is harder to remove than snug.




.stl
file list and click ‘Support material’. Then, you can uncheck the ‘Generate support material’ box.Apart from that, there are some more options that could be explored in the slicing process. Infills, for example, specify how the inside of the printed object is structured. The optimal choice of infill depends on how the object would be stressed in the end. Cubic infill is fast-printed and stressable, similar with gyroid. A summary about infills is found in the video Rethink how you use 3D printer infill! by Made with Layers. Brim extends the first layer to be a bit wider around the contact areas of the object and the print bed. It creates more stability for the printed object and is helpful if there is a risk of nozzle momentum removing the object from the bed. Draft is similar to brim, but the first layer is extended everywhere, not just around the contact areas between the print bed and the object. Regarding layer height, a 0.2mm layer height is considered a good standard. The thinner the layer, the smoother the surface, but it also makes the print more unstable.
In the following, the process of printing some of the benchmark prints is depicted.






Design Rules
The group assignments everyone documented on their personal websites first. Afterwards, the content was transferred to the group page.
All benchmarks were printed for each of the printers Prusa XL and Prusa MK4S. On each printer, the benchmarks were printed twice. Once for PLA and once for PETG. We also have TPU and ASA available, but we decided, not to benchmark these filaments. Unless mentioned otherwise, we used the parameters from the presets of the corresponding filament and printer. (Prusament PLA/PETG, Prusa XL/MK4S). As mentioned above, we used this printer benchmark (version from 2018-02-25) for evaluating the design rules and the following files suggested in class: clearance.stl, free.stl (overhang), thickness.stl. From that, we derived the design rules. All prints were printed using the corresponding input shaper 0.4mm nozzle presets with 0.2mm layer height and the structural preset.
Dimensioning
The first question we looked at was how to dimension an object so that the dimensions in a printed object are as desired. For this benchmark, we considered the aforementioned printer benchmark.



Value (see photo) | target value | Prusa XL PLA | delta abs | delta percent | Prusa XL PETG | delta | delta percent | Prusa MK4S PLA | delta | delta percent | Prusa MK4S PETG | delta | delta percent |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x1 | 100.00 | 99.87 | 0.13 | 0.13 | 99.83 | 0.17 | 0.17 | 100.13 | 0.13 | 0.13 | 99.72 | 0.28 | 0.28 |
x2 | 30.00 | 30.03 | 0.03 | 0.10 | 30.17 | 0.17 | 0.57 | 30.06 | 0.06 | 0.20 | 30.06 | 0.06 | 0.20 |
x3 | 10.00 | 10.04 | 0.04 | 0.40 | 10.16 | 0.16 | 1.60 | 10.04 | 0.04 | 0.40 | 10.04 | 0.04 | 0.40 |
x4 | 14.00 | 14.01 | 0.01 | 0.07 | 14.00 | 0.00 | 0.00 | 14.01 | 0.01 | 0.07 | 14.02 | 0.02 | 0.14 |
y1 | 100.00 | 99.91 | 0.09 | 0.09 | 99.82 | 0.18 | 0.18 | 100.25 | 0.25 | 0.25 | 99.77 | 0.23 | 0.23 |
y2 | 30.00 | 30.00 | 0.00 | 0.00 | 30.11 | 0.11 | 0.37 | 30.04 | 0.04 | 0.13 | 30.04 | 0.04 | 0.13 |
y3 | 10.00 | 10.03 | 0.03 | 0.30 | 10.12 | 0.12 | 1.20 | 10.16 | 0.16 | 1.60 | 10.14 | 0.14 | 1.40 |
y4 | 4.00 | 4.03 | 0.03 | 0.75 | 4.03 | 0.03 | 0.75 | 4.03 | 0.03 | 0.75 | 4.04 | 0.04 | 1.00 |
y5 | 2.00 | 2.00 | 0.00 | 0.00 | 2.03 | 0.03 | 1.50 | 2.00 | 0.00 | 0.00 | 2.02 | 0.02 | 1.00 |
di | 8.00 | 7.83 | 0.17 | 2.13 | 7.61 | 0.39 | 4.88 | 7.81 | 0.19 | 2.38 | 7.78 | 0.22 | 2.75 |
do | 10.00 | 9.85 | 0.15 | 1.50 | 9.83 | 0.17 | 1.70 | 9.86 | 0.14 | 1.40 | 9.81 | 0.19 | 1.90 |
We considered the following questions:
- Given a desired outer/inner diameter of a (hollow) cylinder, how to dimension it during the design?
- Answer: Looking at the delta values, we can derive around 0.2mm are to be added to all diameters in the design.
- Given a desired real length (dimensions that are not diameters) in x/y direction, how to dimension it during the design?
- Answer: From the delta values it could be seen that mostly, the dimensions for larger target values have higher deltas (compare x1/y1 to the other dimensions). However, in the case of the Prusa XL PETG print, the deltas were high also for the smaller dimensions. Therefore, no clear design rule could be derived. I concluded that FFF printing is only possible to the scale of millimeters to my best knowledge. If higher precision is needed and FFF is considered, I would suggest leaving dimensions which are smaller than 100mm as they are and adding an offset of 0.1mm to 0.2mm to dimensions above or equal to 100mm.
Bridging, Angle, Surface Finish, Warping
The following questions we considered. All outcomes were the same for all printer-filament configurations.
- How steep is the steepest angle to be printed without support?
- Answer: In the lecture, an angle of 30 degrees was recommended. Following our tests, the maximum angle to print without support is 50 degrees if you want to be precise. If you have some tolerance, 60 degrees would also be fine.

- How long can bridges be without support?
- Answer: Bridging works at least up to 25mm bridge length.ngth of at least 25mm.

- How does the surface finish look at which angle?
- Answer: The surface finish dependent on the angle can be seen in the following pictures.


Wall Thickness, Overhang, Clearance
The following questions we considered:
- What is the thinnest wall i can print?
- All wall thicknesses were able to be printed. However, the issue here is that the actual wall thickness is thicker as it is assigned to be. There just is a limit on how thin the walls can be with the printer. With the given configurations, these limits are between 0.34mm and 0.37mm.


- How much overhang with 90 degree angle can be printed without support?
- All overhangs did not look good and should be printed with support.


- How much tolerance / clearance must be considered for joints?
- Following the given tests, the suggested clearance for joints is 0.4mm. With 0.3mm, the joint is a bit too tight and frictious.


Designing & Printing an Object: Alien Tree
The task was to design and print an object that could not be made subtractively. The options to do this is to print in-place printed joints, something cavitated (one object being inside another one), or very fine entangled structures.
My first idea was to do something with CodeThread, a library for processing that enables you to generate G-code. I spent much time trying to get it running, as it seems not to be maintained anymore. I ended up finding that you probably would need to implement a new library following current processing standards and take the present code of CodeThread as a basis for it. I decided not to continue with this, since it probably would have taken too much time.
Next, I thought of fabricating something for my final project, which at this point was a synthesizer. One thing I could have printed was a knob for a potentiometer or a rotary encoder. Following you see some inspirational images of potentiometer knobs.


I thought, I just do something that is fun modeling which also fulfills the assignment. The idea was a tree-like thing that encloses a spherical object in its crown.

Modeling
The following images along with their comments document the modeling process.



shift+s
to open the corresponding menu and select ‘Cursor to Selected’.

7
) and moved along the z axis by hitting g z
.

x
and selected ‘Vertices’.
f
. Note that in the left picture, there is still one unselected vertex. It needs to be selected before hitting f
. To select a loop, alt+left click
can be used as a shortcut.
x
and chose ‘Faces’ to delete the selected face to create a more proper filling of the hole.
alt+left click
, as above and hit the shortcut alt+f
. This fills the selected loop with a face containing defined edges.








Slicing


tree.stl
file and selecting the corresponding action.


Printing


Scanning (& Doing Fun Blender Stuff)
For scanning 3D objects there are many more technologies that are not covered in this documentation, but I would like to give a short overview of some techniques. The gold standard is tomography, however this comes only with very expensive tools. Another one is photogrammetry, which constructs a point cloud out of photos. It requires much computational capacity. Another technique is to cover an object with milky liquid at different heights, make a photo out of that and use basic image processing to construct a mesh. There are also contact-based scanning approaches where an object is used by touching it at (many) different points and recording those points to create the mesh. The approach that is used here is structured light scanning. This projects a pattern onto an object and observes how the pattern changes to reconstruct the geometry the pattern is projected on.
For this week, I wanted to scan something organic. Maybe wood or root-like structures. Another idea was to scan different surfaces like bark or concrete to use them for modelling some more complex object. I ended up scanning my own hand.
Scanning my Hand
At our lab we had a scanner by creality that was capable of structured light scanning. It’s interface was a software called Creality Scan.

- Blue Laser Mode
- Uses blue laser for scanning. Enables for higher accuracy, but requires placing markers and is more sensitive to ambient light.
- Infrared Mode
- Structured light scanning using IR light. Less sensitive for ambient light and well-suited for larger objects.
With the Object menu different scanning modes depending on which object was being scanned could be used. Citing the text that occurs when hovering over the question marks:
Object: Face and Body modes use the advanced data processing algorithm specially designed for face and body scanning. Normal: Except for transparent, reflective, through-holes and very thin objects. For transparent and reflective objects, it is recommended to use scanning spray before scanning. Hairs, furs, or similar tiny objects are difficult to be scanned.
Regarding the Feature option: choosing Geometry is recommended when the scanned object has rich geometric features. If this is not the case, Texture mode is recommended. If the object then does not have rich texture features, markers need to be placed.
The option Disable Flat Base controls the use of a specific feature of the scanner. However, I did not find any documentation about it, so I turned it off.
The scanner processes the scanning data to calculate probabilities for each voxel in a 3D space. These probabilities resemble the existance of an object at this voxel. After finishing the scan, all voxels with probabilities above a certain threshold are taken to be part of the object and included in computing the mesh of the object.






.obj
file for describing the geometry of the object, an .mtl
file describing where on the geometry which material was, and how the material looked was specified by an .exr
or .png
file, which was nothing more than an image file resembling the texture of the object. Note, that the file names should not be changed after exporting them, as this would lead to the texture mapping not working anymore.
Cleaning Up the Scan
After scanning, the scan needed to be cleaned. For that, I imported the object into Blender.




l
to select all connected vertices. I inverted the selection with ctrl+i
and hit x
for deleting.
Still there are some blobs attached to the hand that need to be removed. This can be done as follows.

ctrl+right click
for lasso selection, left click
for box selection, or by selecting one vertex and hitting Select > More/Less > More. For the first two methods, I toggled on the wireframe display, since otherwise, only those vertices would have been selected that were on the visible surface of the object.



alt+f
and applied the smoothing brush to it.

f
for filling) and then fixing the resulting hole as above.



Adding Liquid-Like Structures
At this point, I had the idea to modify the hand so that the fingers look like they would dissolve in liquid that drops to the ground. The resulting puddle could then serve as a stand for the model. For that, I first looked into how to simulate liquids in blender. A toy example is shown in the following images.













Sometimes, there were problems with the physics simulation. To resolve this, I made sure the playhead of the timeline was at time = 0 when I applied the physics rules. If it still did not work, I either closed Blender and reopened it, exported all meshes as STL files and imported them into a new Blender file, or deleted the cache by removing the folders containing the words “fluid” and “cache” next to the Blender file. When I had multiple objects to fluidify, I first united them using Bool Tool. For meshes with a high number of nodes, I used “decimate” to reduce the number of nodes before running the simulation.
The cylinder approach involved much trial and error as well. The fluid wasn’t thin enough, and the mesh that became fluid affected how the fluid flowed. The cylinders weren’t high and thin enough either. There were difficulties with simulating multiple cylinders as fluid, as the simulation process was buggy. Not all cylinders were simulated, or the fluid coming out of them did not join in the end. The trick was to union the cylinders first using BoolTool. After doing this, everything worked very well; the fluids flew together and looked nice in the end.
I also experimented with parameters until the fluid was sufficiently thin and flowy. I adjusted the viewport display thickness and field weights.
At this point, I applied the modifier that was created by the physics simulation to the liquid domain which then behaved just as a usual mesh. I applied the techniques learned earlier to combine the liquid and the fingers and repairing non-manifold vertices.









The object was printed with 140mm height, 0.15mm layer height structural profile of the Prusa XL, and with 15% infill of type gyroid.


Reflections
What I Learned
- When printing two separate things on the same bed each with a different filament type: do not print them simultaneously. The Prusa XL switches the print head each (or every few, did not observe it that particularly) layer. This is time-inefficient.
- Most time I spent with working with Blender. I learned about basic 3D modeling and how to repair 3D scans. I learned how to do physics simulations and how to model objects optimized for printing (considering design rules, support that is part of the design etc.).
What Went Wrong
- When printing the alien tree, I did not flatten the bottom of it. Therefore, support was printed underneath.
- When modeling the hand, I often smoothed the surface which led to knots, probably resulting in non-manifold points. Next time when I repair a hole in a mesh, I would consider remeshing first before smoothing.
- The content of the documentation was quite quite much. I started on Monday with refining and sorting the images taken and refining the notes to text. I did not have time to try out the generative AI modeling software from the recitation in the same week.
What Went Well
- Printing and slicing itself was straight-forward.
- I created a script for batch-resizing images while preserving the directory structure (see Tips & Tricks).
- I restructured shortcuts for blender (see the workshop notes)
- I was continuously getting more routinized in documentating my work.
What I Would Do Differently
- The blender skills I learned were very nice and worth the time.
- Next time, I could explore how to make my documentation workflow even more efficient, thereby finishing some parts of the documentation throughout the week. Until now, I separated the week into a making and a documenting part.
Digitial Files
- Design rules
- Alien tree (from designing & printing an object)
- Hand from scanning
Due to file size limitations the following file types are not included.
- Prusa Slicer project files (
.3mf
) and output files (.bgcode
). They can be retrieved in a reasonable amount of time from given.stl
files. - Blender project files (
.blend
). They do not contain much more information than the pure stl files. Blender files are provided only if they contain more information then the already provided files, such as keyframes, shaders, etc.
Use of Language Models
During writing this report, I used the following prompts asking ChatGPT 4o mini to
- form bullet points to prose text
1Take the following bullet points and form prose text out of them. Do not add any additional information. Only use those words used in the bullet points and, additionally, those that are absolutely necessary to build grammatical sentences out of the bullet points. Formulate everything in past tense. Correct spelling mistakes: 2 3<insert bullet points>