Skip to content

OpenScanEu/OpenScanBenchy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

3D Scan Benchmark powered by OpenScan

A community effort to compare raw 3D scan results from desktop 3D scanners on shared, standardized objects.

Info and Transparency

This initiative was started by OpenScan, but the content comes from the community. Instead of relying on hard-to-verify numbers, we scan small, standardized physical objects — challenging on several levels — and put the raw results side by side. It is far from scientific, but gathering data is a first step toward a better overview.

3D Scanner Manufacturers are very welcome to participate to keep the comparison neutral; reach out publicly or via info@openscan.eu.

Create and share your 3d scan

  • provide an unmodified .stl or .ply file and share the link on GitHub or mail to info@openscan.eu
  • note, that by sharing the .stl file, you agree, that the file becomes part of this repository with the specified licence (GNU). We also upload the results on printables.com with your specified details and individual comment.
  • specify your scanning setup and procedure (scanner name, scanning time, settings ...)
  • if you want, add your (company) details, links, etc. if you want to be mentioned as the source

Benchmark objects

osbenchy_cad.png osbenchy_full.png osbenchy_closeup.jpg

The original model was created by Valandar and can be downloaded from Thingiverse. We slightly modified this model by adding some text to the base. Get the modified version on Printables.com

We choose this model and fabrication method, as it represents a challenging real world use case for many scanners. The model has features at different scales, so that even high-end scanners should have a challenge ;) The 3d printing process creates tiny artifacts (layer lines, support residue..), which should be visible on better scanning results.

Get your printed 3d figurine

Download the model from Printables.

We provide printed models and offer free worldwide shipping. Just drop us a mail to info@openscan.eu or support the project by ordering your Benchy for 10€ (incl. worldwide shipping) through our website openscan.eu)

Alternatively, use your resin printer with 0.1mm layer height to print the model.

OpenScanBenchy

38 scanners, 50 scans

Scanners included:

scanbench_cad_01.png scanbench_full.jpg scanbench_closeup1.jpg scanbench_closeup2.jpg

The ScanBench was created by Julien Mairy and can be downloaded from MakerWorld. The ScanBench takes a modular approach to scanner benchmarking: a single FDM-printed baseplate carrying a set of dedicated test zones — spheres, threads, recessed depths, sharp angles, fine textures and organic surfaces — each chosen to stress a different part of the scanning and reconstruction pipeline. Because each challenge sits in its own zone, the ScanBench makes it possible to see where a scanner struggles rather than just whether it does. As an FDM print it covers a larger size range and shows coarser surface artifacts than a small resin object, and printing the same modules in different materials (translucent PETG, silk PLA, matte black) allows reflection, transparency and contrast to be tested on a single platform.

Get your printed 3d figurine

Download the model from MakerWorld. print settings:

  • 0.08mm layer height
  • 0.4mm nozzle
  • material of your choice

ScanBench

9 scanners, 17 scans

Scanners included:

Repository layout

Repository layout

├── benchmarks/
│   ├── OpenScanBenchy/
│   │   ├── assets/
│   │   │   ├── render/       <-- saves rendered files done by createRender.py
│   │   │   │   ├── ...
│   │   │   ├── stl_raw/          <-- drop new raw scans + sidecar yaml here, only used locally
│   │   │   ├── stl_aligned/      <-- aligned by alignScan.py, only used locally
│   │   │   ├── ...       <-- photos, rendered grids
│   │   ├── data.yaml         <-- all scanner & scan metadata
│   │   └── README.md         <-- detailed README.md for each benchmark (note the static and automated blocks!)
│   └── ScanBench/
│       ├── ...          <-- second benchmark like above
├── scripts/
│   ├── blender/          <-- Blender files with the used camera positions
│   │   ├── OpenScanBenchy.blend
│   │   └── ScanBench.blend
│   ├── alignScan.py          <-- aligns raw scans to the reference mesh and merges sidecar yaml into data.yaml
│   ├── createRender.py       <-- render all stl_aligned files and create grids
│   └── generateReadme.py      <-- update all README.md files with new renders/infos from data.yaml
├── LICENSE
└── README.md            <-- this file (only contains summary of the individual benchmarks)

Adding to the benchmark

The easiest way of adding a new 3D scan to the benchmark is sending the result to info@openscan.eu. Try to provide as much info about the scanning process as possible to make the result more comparable (scan time, preparation, scan mode...)

Each benchmark object is one folder under benchmarks/, fully described by its data.yaml.

  • Add a new benchmark object: create a new folder under benchmarks/ with its own data.yaml, assets/, and a grids: entry in data.yaml. The script picks it up automatically and lists it in the index above.

Manually add a raw scan (auto-align + auto-render + auto-update)

  • Drop the raw scan stl and a *sidecar yaml into assets/stl_raw/ (see template and naming convention below)
  • Run python scripts/alignScan.py. It aligns the scan against the benchmark's reference mesh, writes the result to assets/stl_aligned/, and merges the sidecar info into data.yaml.
  • Run python scripts/createRender.py to render it and build the comparison grids.
  • Run python scripts/generateReadme.py will update all the dynamic sections using the rendered images and data.yaml entries.
  • the README.md files have a labeled static section, which can be manually edited (though the automatic process will be sufficient, when you just want to add a new scan to an existing benchmark)

Sidecar yaml for stl_raw/

Each raw stl in assets/stl_raw/ needs a matching sidecar yaml describing that one scan. Naming convention: same filename stem, .yaml extensionalignScan.py matches them up by stem, and the stem also becomes the aligned filename recorded in data.yaml.

assets/stl_raw/
├── scannerName_scanMode_user.stl
└── scannerName_scanMode_user.yaml

Template for the sidecar yaml:

scanner: ''            # name of the device — must match exactly to group with other scans of the same scanner
price: ''              # optional retail price, only read if this is the first scan for this scanner
rec_object_size: ''    # optional manufacturer data, only read if this is the first scan for this scanner
accuracy: ''           # optional manufacturer data, only read if this is the first scan for this scanner
resolution: ''         # optional manufacturer data, only read if this is the first scan for this scanner
link: ''               # optional link to manufacturer site, only read if this is the first scan for this scanner
by: ''                 # your username
by_url: ''             # optional link to your website/profile
url: ''                # link to the 3d model (sketchfab, printables ...)
scanmode: ''           # optional, e.g. laser/IR mode
notes: ''              # optional but useful info :)

About

Let's all work together on a 3d scanner benchmark for desktop 3d scanners

Resources

License

Stars

145 stars

Watchers

7 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages