Blender: import an SVG and turn it into a mesh
Import an SVG into Blender as curves, find it when nothing seems to happen, fix its size, give it thickness and convert it to a mesh. For Blender 5.2.
Published
Blender opens an SVG through File, Import, SVG as Curves (.svg). Each shape arrives as a flat curve object, not as a mesh, and it usually arrives very small: by the importer’s code, a drawing 100 pixels wide comes in 28 mm wide, which in a scene measured in metres is a speck at the centre of the grid. That is why the import so often looks as if nothing happened. To get a mesh, select the curves and choose Object, Convert, Mesh.
The menu names on this page are from the Blender 5.2 LTS manual. The sizes are worked out from the importer’s own Python code, taken from the Blender 5.2 release branch, which we read and ran on test files outside Blender. They have not been measured in Blender itself.
Import the SVG
- Choose File, Import, SVG as Curves (.svg) and pick the file.
- Look in the Outliner. The importer makes a new collection named after the file, such as
logo.svg, and puts one curve object in it for each shape in the drawing. - Click one of those objects and choose View, Frame Selected (the full stop key on the number pad). The manual describes it as changing the view “so that you can see the selected object(s)”.
The manual says the curves are “created in the XY plane”, so the drawing lies flat on the floor of the scene. When we ran the importer’s code on the test files, a drawing with a viewBox landed with its bottom left corner on the world origin.
The importer is one of the add-ons that ship with Blender: in the 5.2 source its code sits in scripts/addons_core/io_curve_svg. The manual’s page on importing says some formats are “distributed with Blender” and “can be enabled in the Preferences through the use of Add-ons”, so if the menu entry is missing, look there.
Why it comes in the wrong size
The importer’s code counts 90 pixels to the inch. Browsers, and Inkscape from version 0.92, count 96, so a file sized in pixels comes in about 7% larger than a browser would draw it, and still far smaller than most people expect in a scene measured in metres.
The test drawing in this table is a square 100 units wide.
| The SVG says | How wide the square should be | What the importer’s code gives |
|---|---|---|
width="100" height="100" (pixels) | 26.5 mm at 96 to the inch | 28.2 mm |
viewBox="0 0 100 100" and no width or height | no stated size | 28.2 mm |
width="100mm" height="100mm" viewBox="0 0 100 100" | 100 mm | 100 mm |
width="50mm" height="50mm" viewBox="0 0 100 100" | 50 mm | 50 mm |
width="10cm" height="10cm" viewBox="0 0 100 100" | 100 mm | 1,000 mm |
width="4in" height="4in" viewBox="0 0 100 100" | 101.6 mm | 2,581 mm |
width="100mm" height="100mm" and no viewBox | 26.5 mm, on a page 100 mm wide | 28.2 mm |
Only one kind of file came out at its true size: width and height in millimetres, with a viewBox. Centimetres came out ten times too large and inches 25.4 times too large. Without a viewBox, the units of a drawing are pixels whatever unit the width and height are written in, and the code reads them at 90 to the inch. Take these figures as what the 5.2 code gives when run outside Blender, with the scene’s Unit Scale taken as 1, and not as a measurement made in Blender or a promise about every version.
So there are two ways to get the size right:
- Before importing, give the file a size in millimetres. Resize SVG writes
widthandheightin mm and adds aviewBoxif the file has none, which is the form that came out at its true size. The SVG viewer shows what size a file states now. - After importing, select the curves and open the sidebar’s Transform panel (3D Viewport, Sidebar, Transform). Dimensions shows the size of the selected object’s bounding box. Type the size you want there, or change the Scale values. Each shape is its own object, so for a drawing of many shapes, join them first (Object, Join, described below) and one Dimensions value then covers the whole drawing.
The scene’s own units are under Properties, Scene, Units, where Unit System can be Metric or Imperial.
What the importer leaves out
The manual is blunt: “Currently the importer only supports SVG path geometry. Other SVG features such as gradients, fills, strokes, text objects, images, and filters are ignored during import.”
In practice:
- Text is not imported. Convert it to shapes first: in Inkscape, select the text and use Path, Object to Path.
- Line thickness is not imported. A stroke comes in as a bare line with no width. If the drawing is made of strokes, turn them into filled outlines first. In Inkscape that is Path, Stroke to Path.
- Gradients, embedded pictures and filters are dropped.
- By the 5.2 code, a filled shape arrives as a flat, filled 2D curve. A shape with
fill="none"arrives as a 3D curve: an outline with no surface at all. In the same code, basic shapes such as<rect>,<circle>and<polygon>were read as well as paths, and a plain fill colour became a material. The manual does not promise either, so convert shapes to paths if something is missing.
To see what a file holds before importing, open it in the SVG viewer: it counts the paths, shapes, text elements and images.
Give it thickness
There are two routes, and both are in the manual.
On the curve, before converting. Select a curve and open the Geometry panel in the curve’s properties. The Extrude value pushes the shape out to both sides of its plane, so a filled outline becomes a slab. Bevel, with a Depth, turns a bare line into a tube, which is the way to give a line drawing some body.
On the mesh, after converting. Add a Solidify modifier, which “takes the surface of any mesh and adds depth, thickness to it”, and set its Thickness.
Convert the curves to a mesh
- In Object Mode, select the curves.
- To end up with one object instead of dozens, choose Object, Join (Ctrl J) first. It merges the selected objects into the active one, and they must all be of the same type.
- Choose Object, Convert, Mesh.
The manual says the conversion “keeps the faces and volumes created by closed and extruded curves”, so a filled, extruded curve becomes a solid mesh.
How smooth the mesh is depends on the curve’s resolution at the moment you convert. In the curve’s Shape panel, Resolution Preview U sets “the number of points that are computed between every pair of control points”. Raise it for smoother curves and more vertices, lower it for a lighter mesh, and do it before converting: afterwards the points are fixed.
If overlapping shapes fill wrongly, or a letter loses its hole, look at the Shape panel’s Fill Solver and Fill Rule. The rule is used by the Delaunay solver. The manual describes Even-Odd, where overlapping regions may cancel out, and Non-Zero, where the direction of each outline decides which regions are holes.
If nothing appears after importing
| What you see | Likely cause | What to do |
|---|---|---|
| Nothing changed in the viewport | The drawing is there but tiny | Select it in the Outliner, then View, Frame Selected |
| A thin outline and no surface | The shapes have no fill in the SVG | Give them a fill before importing, or add Bevel depth to the curve |
| Lettering is missing | Text is not imported | Convert text to paths in a vector editor |
| Parts are missing | The file uses pictures, gradients or filters, which are ignored | Redraw those parts as plain filled paths |
| It is far too large or too small | The file’s size is in centimetres, inches or pixels | Resize it to millimetres, or set Dimensions after importing |
| An error about XML | The file is not well-formed SVG | Open it in the SVG viewer to check it draws at all |
The other import: SVG as Grease Pencil
File, Import, SVG as Grease Pencil brings the drawing in as Grease Pencil strokes for 2D drawing and animation. Its options are Resolution, Scale, Scene Unit (“apply current scene’s unit”) and Center on Bounds. Use it when you want to keep drawing on the artwork, and SVG as Curves when you want a model.
Exporting an SVG from Blender
Blender’s SVG export is for Grease Pencil only: File, Export, Grease Pencil as SVG. The manual warns that “the exporter only works in Object Mode”, and that the export “is always from the view of the largest 3D Viewport in the current workspace”. You can export the active, selected or visible Grease Pencil objects, with or without fills. A mesh or curve has to be converted first, with Object, Convert, Grease Pencil.
If you only want a 3D print
When the aim is a flat shape raised to a thickness, such as a keyring, a sign or a cookie cutter, Blender is more than the job needs. SVG to STL raises the filled shapes of an SVG to the thickness you set and gives a watertight STL in millimetres, which Blender also imports if you want to carry on from there.