3D QR code: an embossed code ready to print
A 3D QR code isn't an image: it's a piece with the code in relief and its own color. Create one here and see how it works.
1Content
Also accepts tel:, mailto: or any address. The shorter, the better it prints.
Always use the guest network: anyone who scans the code can read the password.
Or start from a template
2Code design
On the 3D object the logo becomes a single-color silhouette.
3Turn your QR into a 3D object
Up to 28 characters. A short text multiplies scans.
Code preview
Everything is generated in your browser. No data is sent to a server.
3D object
- Modules
- —
- Per module
- —
- Size
- —
- Triangles
- —
What a 3D QR code actually is
A 3D QR code is a physical object where the code's pattern is modeled as geometry: the dark modules stick out (or sink in) relative to a base. Unlike a sticker or a printed sign, the code is part of the piece itself, can't peel off or wear away from rubbing, and can be made from the same material as the object holding it.
Technically the file contains two separate bodies: the base and the relief. That separation is the key to everything else, because it lets the slicer understand they are different pieces and assign them different materials.
Relief or color: what actually makes a 3D QR readable
It's tempting to think relief alone is enough for the camera to tell the modules apart. In practice it isn't: a phone's camera reads brightness, and a same-colored relief only creates shadows, which depend on where the light is. Indoors under diffuse light — a restaurant, a hotel hallway — those shadows nearly disappear and the code stops reading.
What makes a printed QR code reliable is the color contrast between the two pieces. Relief is still useful: it adds texture, reinforces the shadow and, above all, is the natural way to print two colors on an FDM printer without needing multi-material hardware (a single filament-change pause at the base height is enough).
Combinations that work, and ones that don't
| Base | Code | Result |
|---|---|---|
| White or bone | Black or navy | Optimal, always reads |
| Cream | Terracotta or forest green | Very good, more elegant |
| Black | White | Works (inverted QR), some older readers fail |
| Medium gray | Dark gray | Doesn't read: insufficient contrast |
| Wood grain / glitter | Anything | Unreliable: the sheen confuses the camera |
How this tool builds the model
- The code is generated in the style you pick (square, rounded, dots...) and its real module matrix is read back.
- That same styled code is rasterized to black and white: it's the mask for the relief, so the printed piece is identical to the preview, rounded corners and logo included.
- Adjacent pixels are merged into the smallest possible number of rectangles. A typical code goes from tens of thousands of cubes to a few hundred prisms, and the file drops from several megabytes to a few tens of kilobytes.
- Each rectangle becomes a prism that sinks 0.15 mm into the base, so the slicer welds the two pieces together without leaving an air gap.
- A 3MF file is written with the two or three pieces and their colors.
Common questions
Does a 3D QR code scan the same as a regular one?
Yes, with a phone's camera, no special apps. The difference is in the physical conditions: contrast, size and margin. If those three are met, the reader can't tell a QR code printed on paper from one printed in 3D.
Is it better raised or engraved?
Raised. Engraved (recessed) forces the code's filament to print before the base and complicates the color change; dirt also collects in the recesses. QR3D always generates relief.
How much should the relief stick out?
Between 1 and 2 mm. At 1.2 mm (the default) you have enough layers for the color to be opaque without lengthening the print. Below 0.8 mm the color underneath can show through.
Can I do this with a single-color printer?
Yes. Print the base and, when the slicer reaches the base's height, insert a pause and change the filament. Every modern slicer has that feature ('filament change' or 'pause at height').
What if my link is very long?
The code needs more modules and each one gets smaller. The tool shows you the millimeters per module in real time: if it drops below 1.5 mm, make the piece bigger or use a link shortener.