low poly fruit tart header

MeshLab Low Poly 3D Scan Experiments

Back to overview

Hi everyone! I’d like to share some of my recent fun 3D work. I’m a 3D scanning enthusiast, and have been pushing for what could be the first Sketchfab meme, fire hydrant scans.

I also like the aesthetic of super low-poly, faceted models, like Jérémie Louvetz’s 3K Animal collection.

I’m very interested in combining these two techniques. I’m working on some quick and dirty workflows to make abstract, minimalist versions of high-poly 3D scans. My friend and colleague Louis does beautiful scans of food. These are great subjects for my experiment, like his recent Fruit Tart! model.

This was all done with MeshLab filters, which is free, open-source, and has a really robust suite of tools. There is even a browser version which includes an Upload to Sketchfab feature.

Initial cleanup

I delete the table and other background parts of the mesh so that we’re just working with the tart on a plate. Use Select faces in a rectangular regionDelete current selected faces. I like to do this in Ortho projection (Shift + scroll wheel to change FOV) to make it easy to select in a straight line.

delete faces in meshlab

fruit tart cropped in meshlab


Next, reduce the face count.

  1. Filters → Remeshing, Simplification and Reconstruction → Quadric Edge Collapse Decimation (with texture)
  2. I chose 2000 for my Target number of faces.
  3. Depending on the model, you might try playing with some of the options like Preserve Boundary of the mesh and/or Optimal position of simplified vertices.

meshlab quadric edge collapse with texture

Something I’ve never quite figured out: MeshLab has no simple undo function ¯\_(ツ)_/¯ . Some filters have a Preview toggle, but otherwise you’re stuck until you re-import the mesh and run the same filter script.

fruit tart decimated in meshlab

Color Processing

Now, we want a solid color on every face. At this point I usually turn off the texture ( Render → Render Mode → Texture )

  1. Filters → Color Creation and Processing → Transfer Color: Texture → Vertex
  2. Filters → Color Creation and Processing → Transfer Color: Vertex → Face
  3. *OPTIONAL* Filters → Color Creation and Processing → Smooth: Laplacian Face Color
  4. Filters → Color Creation and Processing → Transfer Color: Face → Vertex

fruit tart with colors processing in meshlab


Next, we want to make sure there are hard edges everywhere.

  1. Filters → Normals, Curvatures and Orientation → Compute Vertex Normals (usually not necessary, but it doesn’t hurt to recompute them)
  2. Filters → Normals, Curvatures and Orientation → Cut mesh along crease edges (set the Crease Angle to 0°)

Sometimes you might see an error about manifoldness.

meshlab manifold error

If this happens:

  1. Enable Render → Show Non Manif Edges and Render → Show Non Manif Vertices.
  2. Then, Filters → Selection → Select non Manifold Vertices (and/or Select non Manifold Edges as necessary).
  3. Then, Delete Selected Vertices. When everything is manifold, Cut mesh along crease edges again.

meshlab show non manifold edges and vertices


Now we’re ready to export the model and upload to Sketchfab.

  1. File → Export Mesh As…
  2. I choose VRML (.wrl) because it’s reliable and supports the vertex colors and vertex normals that we need.
  3. Give it a name, make sure Vert → Color is enabled, but you can disable Wedge → TexCoord.
  4. Finally, upload the file to Sketchfab!

meshlab vrml export options


This is pretty much the only artistic part of the process, but it’s important to make your presentation as good as possible.

  1. Fix your up-axis if necessary
  2. Add post-processing filters (in this case I just increased Saturation in Tone Mapping, but Color Balance and others are fun, too)
  3. Set a nice background color.

sketchfab post-processing filters


Et voilà! See more food here and also this rhinoceros 🙂

About the author

James Green

Sketchfab Product Specialist & Support King | Beer Enthusiast | Pokémon Master


Leave a Reply

Your email address will not be published. Required fields are marked *

Related articles