diff --git a/.gitignore b/.gitignore index da61ed1..9e8a6aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -*.jpg public/ +images/ diff --git a/content/sundries/a-very-digital-artifact/PXL_20220723_214758454.jpg b/content/sundries/a-very-digital-artifact/PXL_20220723_214758454.jpg new file mode 100644 index 0000000..9bb885d Binary files /dev/null and b/content/sundries/a-very-digital-artifact/PXL_20220723_214758454.jpg differ diff --git a/content/sundries/a-very-digital-artifact/index.md b/content/sundries/a-very-digital-artifact/index.md index 1d11164..a2b4fa9 100644 --- a/content/sundries/a-very-digital-artifact/index.md +++ b/content/sundries/a-very-digital-artifact/index.md @@ -6,4 +6,87 @@ date = "2022-11-11" tags = ["3dprinting", "CAD", "GIS", "CNC", "art", "sundries", "proclamation"] +++ -![a CNC-carved exaggerated relief of California made of plywood](PXL_20220723_214758454.jpg) +![A plywood slab carved with CNC into a topographic representation of California][main_image] + +# A birthday wish + +Last summer, I wanted to get my wife something nice for her birthday. For many years, she had +expressed an occasional and casual desire for a topographic carving of the state of California, +where we live, and I thought it might be something I could figure out how to get her. In the end, +after many dozens of hours of work, five weeks, and several hundred dollars paid to a professional +CNC machine shop, I had the artifact shown in the picture above. This is the story of its creation. + +# First steps + +Before you ask, I did not do a ton of research before embarking on this. As I write this, about six +months later, it only now occurred to me to do a basic search for an actual physical thing I could +buy, and luckily it seems that CNC-carved wooden relief maps of the whole state are not trivially +easy to come by, so, *phew!* + +No, my first step was to see if there were any shops in the area that could carve something out of +nice plywood, about a week before the intended recipient's birthday. I found one that was less than +ten minutes away, and filled out their web contact form. They had a field for material, and I said, +"some nice plywood between 0.75 and 1.0 inches thick or similar" (I didn't know exactly what was +available and wanted to give broad acceptable parameters), and under "project description", I wrote, + +> A relief map of California, carved from wood. Height exaggerated enough +to visibly discern the Santa Monica mountains. I can provide an STL file if needed. + +For some [incorrect] reason that I only later examined, I just sort of assumed that the shop would +have a library of shapes available for instantiating into whatever material medium you might +need. But just in case, I included that hedge about being able to provide an STL file. Needless to +say, that was a bluff. + +![the programmer's creed: we do these things not because they are easy, but because we thought they +were going to be easy -- from twitter user @unoservix, 2016-08-05][programmers_creed] +*
me, every time
* + +Also needless to say, my bluff was called almost immediately, and I had the following exchange with the +shop: + +> *CNC Shop*: STL can work but I can’t manipulate it, which could save some money. If possible can it +>be exported to an .igs or .iges or .stp format? +> +> *Me*: Yeah, STP should be no problem. Can you give a rough estimate of the cost for 1x2-foot relief carving? +> +> *Shop*: Without seeing the drawings, I can’t give even a close price but in the past they range from +>a few hundred dollars to several thousand dollars. +> +> *Me*: That's totally fair! I'll get you some files in a few days. + +As you can see, I leaned even harder into the bluff; my next communication with the shop was nearly +four weeks later. But that's getting ahead of things. + +# Meshes and solid bodies + +First off, let's talk about file formats and how to represent shapes with a +computer.[^math-computers] I said I could provide an *STL +file*. [STL](https://en.wikipedia.org/wiki/STL_(file_format)) is a pretty bare-bones format that +describes the outside surface of a shape as a set of many, many triangles, each of which is described +by three 3D points. This format is popular with 3D printers, which is how I became familiar with +it. + +This type of representation is easy to create and read, but it's not great for manipulation. + +# Public data + +## From space? + +## Thanks, California state! + +## In Australia, it's pronounced "g'dal" + +## Give it a good smear + +# Test prints + +# Final cut + +# Thanks + +[main_image]: PXL_20220723_214758454.jpg "A plywood slab carved with CNC into a topographic representation of California" + +[programmers_creed]: programmers_creed.jpg "jfk overlaid with the programmer's creed: we do these things not because they are easy, but because we thought they were going to be easy" + +[^math-computers]: I'm pretty sure this is more "represent shapes with math" than with a computer, but +the computer is just helping us do the math and it's more relatable. diff --git a/content/sundries/a-very-digital-artifact/notes.txt b/content/sundries/a-very-digital-artifact/notes.txt new file mode 100644 index 0000000..f284c76 --- /dev/null +++ b/content/sundries/a-very-digital-artifact/notes.txt @@ -0,0 +1,143 @@ +inital comms with CNC shop: +------------------------------ +Me: "project description": A relief map of California, carved from wood. Height exaggerated enough +to visibly discern the Santa Monica mountains. I can provide an STL file if needed. + +Shop: STL can work but I can’t manipulate it, which could save some money. If possible can it be +exported to an .igs or .iges or .stp format? + +Me: Yeah, STP should be no problem. Can you give a rough estimate of the cost for 1x2-foot relief carving? + +Shop: Without seeing the drawings, I can’t give even a close price but in the past they range from a +few hundred dollars to several thousand dollars. + +Me: That's totally fair! I'll get you some files in a few days. +------------------------------ + +next comms with shop three weeks later: +------------------------------ + +Hi Steve, I'm sorry for taking so long to get back to you! I had a harder time producing the IGES +file than I thought I would, but I think this should be OK: + +(snip url to file) + +It's 51 megabytes, otherwise I'd attach here. + +As modeled, there's probably more high-frequency detail in the mountains than is necessary, as I'm +going for something that feels nice to the touch so smoother is better. It's also modeled at a +slightly larger scale than necessary, though not too far off (it's 500x577mm, and I'm interested in +the 400-500mm range for width; the relief height is in the 20-30mm range depending on scale). I was +imagining it would be carved with contour cuts in some thick nice ply, though I'm happy to hear +better ideas; I have literally no experience with making something like this. + +(NOTE: go back to email thread and summarize the back-and-forth over tooling) +--------------------------------- + +Note that the shop did the extra work anyway just because they were nice, and that he was glad when +I told him it was a gift for my wife. + + +Zulip dump from 10 days after initial contact: +----------------------------------- +It IS Mt. Shasta! + +After I made the mosaic out of the tiles I downloaded to cover the area, I masked it with an outline +of the state that I downloaded from a California gov geo site, then used a program called +gdal_translate to turn the image, a "geotiff" file with height data encoded, into that heightmap png +with the lowest value mapped to 0 and the highest to maxint. + +I also had to reproject the geotiff with the height data into the same coordinate system as the +state outline was in. The height data was in a system using lat/long called "EPSG:4326", while the +state outline was made from line segments with 2d vertices in a projected coordinate system called +"EPSG:3857" with units of "meters". 3857 is "web Mercator", and is the coordinate system used by +Google and Open Street Map for their map tiles and other shapes. + +It may or may not be surprising that cartography is very complicated! + +My next step is to turn this heightmap into solid geometry that I can 3d print and/or send to a +local CNC shop to have them carve a relief of California out of wood, which is close to the final +step of producing an artifact as a present for my partner. + +There are a bunch of python packages for working in this domain, but they're all just wrappers +around various GDAL libraries or tools. + +The raw topo data I got from +https://portal.opentopography.org/raster?opentopoID=OTSRTM.082015.4326.1 (that was the epsg 4326 +geocoded tiff; actually, several of them because you can only download up to 450km^2 at a time, +hence having to mosaic them with the gdal_merge.py command (the '.py' is in the name of the command +that gets installed when you do apt install gdal-bin)), then use gdalwarp to re-project to 3857, +then I had to write a python program to mask it for some reason, then gdal_translate (no .py on that +one, but they're all just python scripts) to convert to the png heightmap. I'm leaving out a couple +details in the workflow, but that's the main shape of it. + +OK, actually, now that all that context is established, here's the actual command that produced that +file from the geocoded tiff: + +gdal_translate -of PNG -ot UInt16 -scale -130 4412 0 65535 cropped_ca_topo.tif heightmap_cropped.png + +and then I used convert (the imagemagick program) to scale the png from 33,311x38,434 to +2,000x2,2308 pixels. + +the -scale -130 4412 0 65535 is mapping the height data min/max to the png whiteness in the output +file. +--------------------------------------- + +Zulip musings from a few days after that, still working on the heightmap: +--------------------------------------- +(re: non-linear scaling of height to reduce pointiness) +ok, it was easier than I thought it would be. gdal_translate has a -exponent flag you can use with +-scale, so I remade the heightmap with an exponential scaling, using 0.41 as the exponent. + +funny enough, I'm still working on this, since even when I drastically scale the size of the mesh +down in Blender (which I export to OBJ for import by FreeCAD), doing anything like modelling (eg, +extruding downward or joining with a solid base, or cutting the shape so it's CA-shaped and not a +rectangle) requires tens of gigabytes of resident memory and I keep having to kill the program and +start over. + +a 60-megabyte OBJ file turns into 21 GB of resident data in the modelling software. + +I have 32GB of RAM installed + +that 21GB expands to 30 when I try manipulating it +------------------------------------------ + +Zulip from two weeks later (July 7): +-------------------------------------- + +Two weeks later I'm finally printing something out. I've given up on converting it into a parametric +CAD-like object; it seems this is a Hard Problem, but I'm not sure why. My goal with doing that was +to give a parametric CAD file to a local CNC milling shop, per their request, since when I suggested +a mesh-based file (STL), the guy was like "I can't do much manipulation with that to make it more +manufacturable, so a real CAD file would be best". + +But at least with an STL file, I can print it myself. So that's going now, we'll see how it turns +out in no less than eight hours. + +I haven't really done anything else with my computer besides this for a while. + +(next day) +ok, I got something printed out, but I'm not super stoked on it. Also, I'm still chasing the elusive +dream of turning this into a parametric solid for easier CNCing. Vape pen for scale: +(insert shitty print photo) + +(next day after that, the 9th) +I've finally "finished": I've created a mesh that has no missing faces, is not too crazy, and can be +converted into a parametric solid, and sent that off to a local CNC shop for a quote on having it +routed out of wood. I'll also do another 3D print, since the base is now a larger version of the +coastline instead of a rectangle, and the high frequency detail is a little diminished. + +---------------------------------------- + +Links: + +https://data.ca.gov/ + +https://portal.opentopography.org/raster?opentopoID=OTSRTM.082015.4326.1 + +https://www.printables.com/model/240867-topographic-california + +https://touchterrain.geol.iastate.edu/ + +https://en.wikipedia.org/wiki/Shuttle_Radar_Topography_Mission + diff --git a/content/sundries/a-very-digital-artifact/programmers_creed.jpg b/content/sundries/a-very-digital-artifact/programmers_creed.jpg new file mode 100644 index 0000000..dae2572 Binary files /dev/null and b/content/sundries/a-very-digital-artifact/programmers_creed.jpg differ diff --git a/sass/parts/_header.scss b/sass/parts/_header.scss index 90c0fda..9c84964 100644 --- a/sass/parts/_header.scss +++ b/sass/parts/_header.scss @@ -67,15 +67,22 @@ header .main { letter-spacing: -0.5px; } + +h1 { font-size: 1.5rem } +h2 { font-size: 1.2rem } + + +/* h1, h2, h3, h4, h5, h6 { - /* font-size: 1.2rem; */ + font-size: 1.2rem; margin-top: 2em; } + */ h1::before { color: var(--primary-color);