Back in the early part of last year, I 3D printed a map of London from LiDAR data to hang on my wall. The resulting map was lovely, but my process was somewhat crude, and hard to replicate. Still, my end goal was to do another one for San Francisco, and so I've been trying since then, on and off, to make that happen.
It took quite a while, but I've finally finished that new 3D map, and managed to improve my map-building software and construction in the process. Helpfully, I also documented the process on video along the way - you can see my two-part series on my YouTube channel.
However, not everyone has the time to go through half an hour of video, and so I want to run through some of the different parts of the process here to give you an overview of what's involved.
Raw LiDAR Data
The first difference to the London map was that the San Francisco data I was working from was raw LiDAR point clouds, rather than the pre-processed heightmap that the Environment Agency provides for their UK coverage.
LiDAR point clouds contain information about every single laser bounce that happened while the survey plane was flying overhead, and so they have no sense of surface - just a series of points that, to the human eye, look like ghostly landscapes and buildings.
This means that, if you want to create a 3D model from them, you need to either calculate 3D surfaces that flow through all the points - something I am not good enough to write the code for without some serious research - or down-sample them into a heightmap and use the same code as for London.
I chose the latter option, and used the LASTools suite to take the LiDAR point clouds, thin them down, and then convert them down into a DEM (Digital Elevation Model), which is what the LidarTile code I wrote last year accepts, meaning I could re-use the same process to turn those heightmaps into 3D-printable STL files.
Why did I choose a rather odd 3:40,000 scale? It just... seemed about right.
The tiles I printed last time were at a scale of 1km to 7.5cm. I wanted to keep the same scale for my San Francisco map, as it will hang next to my London one, but the area I wanted to print for San Francisco was much larger, and so I would have ended up printing out - and lining up - 45 small tiles.
Lining up tiles so they are perfectly flush is one of the most difficult parts of making the map look good from all angles, and so the more tiles you have, the more effort you need to put in to all those edges. To mitigate this, I doubled the tile size while keeping the scale - making the tiles 15cm on each edge, cutting the number of tiles I needed to glue and align to only fifteen.
Larger tiles come with some drawbacks, namely longer printing times - some took over twelve hours - and longer processing times to create the 3D models. The high-detail versions of those 2km-by-2km 3D models are 100MB each, and most 3D printer software will crash when it tries to load and slice them. However, these are both manageable with a bit of work, and worth it for the much easier final step of mounting the tiles to form a map.
The other reason the London map had noticeable gaps between the tiles was forone simple reason - the tiles weren't perfectly square. You try tiling non-square tiles and see how far you get making them line up!
The reason for this is down to the 3D printer I used to print them - a Rostock Max v2 from SeeMeCNC. Now, the Rostock is a lovely printer, but it is a bit unusual, in that it uses a delta-robot mechanism to move its print head.
What this means is that, rather than use perpendicular X, Y and Z axes to move the printer around, it uses three parallel axes and a series of parallelogram-based arms to move around the print head (the "hot end"). If it sounds confusing, that's because it is - it's easiest to understand if you watch this small segment of my video about it.
Because of the movement mechanism, working out how to move the motors so that the print head ends up in the right place not only involves some complex trigonometry for the printer's CPU to do, it means there are fifteen or so different parameters to adjust during calibration. I had managed to get the printer calibrated so it was flat and level, but try as I might, I could not remove the very slightly rhomboid shape it was giving to all of my prints.
I solved this by, of course, buying a new 3D printer - a cartesian one. The Cetus 3D which I purchased is relatively inexpensive at US$300, but does really good quality prints for the money, and more importantly, they are nearly perfectly square. The Cetus also helpfully has much better control over "stringing" than the Rostock, which I suspect is due to the direct drive extruder.
As I was making this second map, part of me was trying to consider alternative methods of fabrication to overcome some of the inbuilt limitations of 3D printing. The two I looked at in particular were CNC milling and casting.
CNC milling is sort of the reverse of 3D printing - it is about removing material from a starting block rather than adding it to a base. It's incredibly precise, and allows you to machine things out of harder plastics or metals, but it has a serious drawback, which is its speed.
The 15cm tiles might take 10 hours to 3D print, but to mill them out of even soft plastic would - with the machine I have access to at a local makerspace - take around 20 hours, with several tool changes.
That machine doesn't have an automatic tool changer, and I can only use it in four-hour blocks, and so as much as I would love to mill the tiles out of aluminium or frosted acrylic, I would need dedicated access to a milling machine. I have, however, pursued other terrain projects on the milling machine, which you can see a sneak preview of at the end.
Moulding and casting is not a direct replacement for 3D printing or milling - it needs something to make the mould from - but I was looking into it as a way of helping me make multiple copies of the map, with a view to making small production runs possible and selling maps.
Of course, the very reason the map looks great - the tiny details and narrow streets between buildings - make it a nightmare to cast pieces from, and even with vacuum-degassed resins, the taller buildings still trap air bubbles underneath them. I suspect I would have to move to casting in a pressure chamber to try and get this to work - something I'll look into over time.
Like the London map, I've mounted these tiles onto foamcore, using hot glue. Foamcore is not particularly strong, but it's very lightweight, and combined with the innate strength of the tiles and a couple of pieces of wood along the back for support, seems to hold up quite well.
Given that the tiles are printed in PLA, the map as a whole is somewhat fragile - as well as the obvious risk of breaking off one of the skyscrapers (yes, I did this and had to reprint a tile!), PLA's glass transition temperature is only 60°C, meaning that there's a risk that prolonged direct sunlight might start melting the plastic.
For indoor wall artwork, though, this seems totally fine - among the other items I have hanging up are a tapestry and original movie posters, which I want to keep out of direct sunlight anyway.
As well as ongoing experimentation with milled or cast versions, I might also see what the results look like when they are printed in ABS plastic. ABS is not as good for the environment and emits particulates as it prints, but it's considerably stronger and the finish generally looks a bit nicer than PLA.
But, after all this, I feel I have got the production process down enough that I would be comfortable selling the end result - the London map was a bit rough-and-ready on close inspection, but this new SF one has only a few minor apparent blemishes, and that's only when you get close.
Of course, production is still very labour-intensive, given the number of 3D prints to slice and supervise and the final mounting process, meaning costs would likely go into the hundreds of dollars at least, not to mention the pain of shipping something this fragile around.
That said, if you would be potentially interested in commissioning one of these - for London, SF, or another of the many cities with available LiDAR data - send me an email at email@example.com and we can discuss logistics!
I've also completed a reprint of my London map using the same techniques, and I'll be finishing and mounting that up this week - you can see the loose, unmounted tiles all printed out in the picture above. I'm really quite happy with how much the quality has improved for the whole process.
The next thing I'm looking at is larger-scale terrain models - in particular, I am trying to make a minature 3D terrain of every US National Park to track my ongoing quest to visit them all.
I'm milling them out of solid aluminium, and so far the results look really lovely, even if they do take 3 hours and four tool changes to mill each. I'll have more updates on that in future blog posts and videos; progress is a bit slower as I can't do it at home, unless I try to sneak a CNC milling machine onto my balcony, anyway.