Working with photogrammetry, laser scanning, and all the other techniques I dabble with/intimately rely on, I generate a lot of 3D data. For the most part that data is usually very high resolution, and often quite noisy and in need of cleaning up. I want to detail here some of the software I’ve come across that can be used to clean up, reduce, and generally process 3D data – particularly meshes but also point clouds. As usual, my focus is on freely available software.

If I produce a high resolution mesh with photogrammetry, say, then here’s what I’ll generally want to do to that data:

Clean it up – remove spurious parts of the mesh

it up – remove spurious parts of the mesh Merge meshes – If I’ve had to scan an object in two attempts (top and bottom), I’ll need to align those meshes ideally algorithmically, but by hand if I have to.

meshes – If I’ve had to scan an object in two attempts (top and bottom), I’ll need to align those meshes ideally algorithmically, but by hand if I have to. Reduce the mesh – reducing the number of polygons makes it easier to hand the mesh for rendering etc. I’ll often keep the high-res mesh for measurements, and a lower res mesh for visualization.

the mesh – reducing the number of polygons makes it easier to hand the mesh for rendering etc. I’ll often keep the high-res mesh for measurements, and a lower res mesh for visualization. Retopologize the mesh – this is something I’ve only recently got into, but essentially retopologizing the mesh makes the polygons more evenly distributed. For most of my purposes, this isn’t entirely necessary, but for animation/modelling and the like, I gather it’s good practice

the mesh – this is something I’ve only recently got into, but essentially retopologizing the mesh makes the polygons more evenly distributed. For most of my purposes, this isn’t entirely necessary, but for animation/modelling and the like, I gather it’s good practice Re-texture/generate UV maps – I hate working with textures. Photogrammetry will generally produce a model and a texture file. But once you start editing your model, you may wish to re-texture it. Depending on your work flow, that may mean regenerating the UV maps (which tell software where to put which parts of the texture on your model) and for high-resolution meshes this is not a trivial task.

As I list the software, I’ll include the above tags to let you know what it can do.

Autodesk MeshMixer [clean][reduce][retopo]

Link: http://www.meshmixer.com/

Meshmixer is a phenomenal piece of free software. It’s really designed for preparing models for 3D printing, but it’s tools for generally cleaning up meshes are fast and easy to use.

An iguanodon phalange in Meshmixer.

It loads data very quickly, and has a pretty wide range of tools for editing meshes, including sculpting brushes, tools for reducing and retopologizing meshes, and analysis tools for fixing holes/intersecting polygons and so forth.



Same view of the raw mesh and the reduced and retopo’d mesh. We do lose the texture when changing the topology, though MeshMixer can keep colours at verticies.

Autodesk Meshmixer has become my go-to software for general mesh maintenance.

Meshlab [clean][merge][reduce][retopo][texturing]

Link to official site: http://www.meshlab.net/

Meshlab was a staple of mine even during my PhD 10+ years ago. I was going to start this section by lamenting that it hasn’t been updated in years, but having just visited the site I see that a new version was released literally just a few weeks ago, version 2020.02.

It still looks and does almost exactly the same as it has for the past decade, which is to say it does a lot. The menus are expansive, and contain almost everything you could want for cleaning up meshes and re-texturing.

Just one of the many sub-menus, this one is just for dealing with normals and curvature.







Here’s a series of images starting with the raw mesh, the progressively reducing using the ‘Quadric edge collapse (with texture) function. You can see we’ve gone from 1,288,566 faces to just 10,000 while retaining all of the texture detail.

The biggest drawbacks, in my opinion are that there’s too much to chose from, and historically it’s been a bit… crashy, when dealing with big meshes. However, the former point is much alleviated by the relatively new addition of the search bar in the top right, which enables you to find functions much faster than digging through the menus. It remains to be seen if the new version is more stable than it used to be, but here’s hoping.

CloudCompare [clean][merge][reduce][retopo]

Link: http://cloudcompare.org/

CloudCompare really took over from meshlab a few years ago for me – it has a toolset more in line with the tasks I tend to do, and is just a bit easier to use. As the name suggests, it was developed originally to work with point clouds, and one of the nuances of using cloud compare is that some functions need to be applied to the vertices of a mesh, not the mesh itself.



The Iguanodon phalange textured and not textured in cloud compare

My favourite use of CloudCompare is to align two meshes. It uses a rough and then fine alignment tool to get things really nicely aligned and then merged.

It’s generally pretty quick, but can struggle rendering larger meshes, even the Phalange in the screenshots above caused some stuttering when viewing the mesh.

Instant Meshes [reduce][retopo]

Link: https://github.com/wjakob/instant-meshes

Instant meshes is fantastic at one thing – reducing the number of polygons in a mesh. It is exceptionally fast at doing so:

It’s really that quick to go from 1.2 million polys to just 80,000 (defined by 40,000 verts).

Two downsides: firstly, anything you decimate in this way will need UV mapping, and all texture information will be lost. You can use something like Meshlab to generate UVs and then either Meshlab or xNormal to transfer the maps between meshes.

Secondly, when you save the file, you have to type the file extension for obj or ply. This is a minor point, but it catches me out Every. Single. Time.

Remember to always put .obj or .ply after the file name when you save.

xNormal [texture transfer]

Link: https://xnormal.net/

xNormal is used for transferring (among other things) texture maps and normal maps from high poly meshes to low poly meshes. The former, texture maps, means colour is transferred over, while the latter, normal maps, means that even though your new mesh is low poly, a lot of the fine detail is preserved. However, xNormal does not UV-map for you – so you have to do that first in Meshlab, or Maya or Blender, or whatever unwrapping workflow you use.

The interface has a very ‘early 00’s winamp’ feel for me.

This whole task is far more niche, at least for dealing with 3D data in my usual capacity, but I include it here because it deserves a mention.







Adding high and low definition meshes, xNormal then baked out the normal map (the blue image), and the texture map.

To show you what these do, I’ve rendered some images with Maya:

base mesh, normal mapped, and textured with normal map for the original mesh, and the reduced mesh.

Clearly, decimating the mesh and normal mapping it isn’t losing appreciable detail, but vastly reduces file size, making it easier to work with. Of course, as outlined in two recent papers here and here, you should always keep the raw data (in the case of photogrammetry, the photos), so that high resolution models can be used or at least remade in the future as necessary. But, it may make sense for your own purposes to downsample and re-texture just to make working with the models easier.

Summary

Those are the pieces of software I regularly use for playing with 3D data. I’m sure there’s more, and I’d love to check those out if I haven’t already, if you leave suggestions in the comments.

Similarly, if there’s demand for a more detailed workflow for any of the processes I’ve touched on, I’m happy to put together future posts to cover that.

[edit] – I’ve deliberately not included Blender (completely free) or Maya (free for educational use) because those are monster programs for far more than what I’m talking about here. They also tend not to be as good at some of the functions above, particularly around mesh decimation and retopology, when working with very large meshes. But, I still find myself using Maya frequently for some of these tasks, and it’s new remesh and retopologize functions in v2020 are pretty good.