10 minute read

I’ve been intrigued by furniture design lately, and decided to take a stab at making a custom coffee table based on bathymetry data of the San Francisco bay. ​Build log is below!

Initial design

August, 2019

The idea for this table started with a strong desire to experiment with pouring epoxy/resin. Most of the existing resin pour projects I’ve seen are “river” tables, where resin is poured into a single channel between two pieces of wood. While I find these tables intriguing, I wanted the subject of the pour to be data driven. I decided I’d do a pour outlining the SF bay! Additionally, I started planning around concrete instead of wood, as it should better match my industrial loft.

Get the bathymetry data!

August, 2019

I want this piece to be engaging, and invite curiosity. And if someone stares into the resin, I’d like their curiosity to be rewarded with actual information about the shape of the bay floor. So rather than freehand this piece, I’ll leverage actual scan data. I turned to historic bathymetry data from NOAA.

Generating contour maps from bathymetry data

The first obstacle was generating quantized depth contours that I could import into a CAD program. ​I started by writing some software to accomplish the following…

  • Ingest NOAA bathymetry data (or alterntively any geoTIFF bathymetry data)
  • Visualize depth maps
  • Segment depth maps into clusters and visualize
  • Quantize depth maps into discrete tiers
  • Automate the interpretation of polygonal contours for each tier
  • Automate the creation of a CAD model from contours

I have provided all my source code here: github.com/dcyoung/coffee-table


Visualizing Raw Bathymetry Data

The easiest way to visualize the data is as a depth-map (inverse of a height map) where color represents the depth of the water.

heatmap

The same data can also be represented in a number of 3 dimensional plot (shown below).

contour wireframe surface contour (inverted) wireframe (inverted) surface (inverted)
contours wireframe surface contours_inverted wireframe_inverted surface_inverted

Quantizing Bathymetry Data

The distribution of depth values is not uniform. Plotting the depth data values as a histogram shows how the absolute range of depth values far exceeds the range of the majority of depth measurements. That is to say, there are outliers, where depth changes dramatically in a very small region. This can be seen in the yellow section of the heatmap above - near the golden gate bridge.

depth-values-histogram

In order to create more meaningful contours, the depth data is clipped (outliers removed) and quantized to better smooth the raw data for the purposes of this project. My code produces quantized depth maps in the form of colored images - with each depth contour corresponding to a single color.

Depth maps. Raw (left) and Quantized (right).
Depth map plots. Raw (left) and Quantized (right).

Once I have quantized the data, I apply some smoothing logic to reduce image noise and export both a binary mask and polygonal data for each contour. This data can be used to as templates for a laser cutter or to autogenerate the CAD models.

Shown below are the produced binary maps for a few quantized layers, before and after smoothing.

. Layer 0 Layer 1 Layer 2
Before Smoothing layer_0 layer_1 layer_2
After Smoothing layer_0_smoothed layer_1_smoothed layer_2_smoothed

3D Pre-Viz

With the contours above its also possible to get an early visual of the bathymetry in the form of a 3D mesh. I used THREE.js to quickly generate meshes in an interactive visual. I have a preview (using a different model of lake tahoe) available here: https://dcyoung.github.io/coffee-table/.

CAD Modeling

October, 2019

Using Fusion360, I modeled a few versions of the table, before landing on the right shape and size.

Cad Render Cad Render
cad-render cad-render
cad-render cad-render
cad-render cad-render
cad-render cad-render
cad-render cad-render

I parameterized the model to allow for easy adjustments of critical values or material properties. Fusion360 also has a programmatic API, which I leveraged to automatically generate geometry from the contour data produced by earlier scripts. This meant I could iterate on the data processing and see the final CAD results almost instantly. I’ve provided these scripts here: github.com/dcyoung/coffee-table/tree/master/fusion360

Laser Cutting Acrylic

November, 2019

Recent travel has kept me from working on the table, but I did manage to create some templates for the laser cutting machine. To save material and cost, I “nested” (efficiently arranged) all the parts to be cut. Jumping between different programs, I was stunned to find poor support and standardization for mechanical drawing formats. A few programs even failed to detect units in a clean .dxf file, and many others preferred SVGs. I would have expected a much cleaner and more efficient workflow for something so common. Nevertheless, I was able to make all parts fit within a half sheet of acrylic, without introducing too many subdivisions. While a more efficient layout could have been achieved, it would mean splitting more pieces and working out a method for align them at mold time. I settled on a nice balance.

template

Laser cutting the acrylic went smoothly and the parts look beautiful!

laser-cut-parts-1

I was sure to add some guide-holes to the templates before laser cutting which should help align the pieces.

laser-cut-parts-1

Building the Concrete Mold

December, 2019

The next step was building the concrete mold. I started by creating an MDF box.

I created rounded inserts for the curved corners of the table. I used a thin MDF skin and wet the back of the wood to make it more pliable.

The frame of the mold turned out pretty well.

Unfortunately, seeing the frame in person made my realize the table just seemed too large (48x42”). I decided to shorten the dimensions a bit (48x36”). Luckily this only took ~5min thanks to the previous work I’d done to parameterize the CAD model. Adjusting the physical dimensions was easy as well. I simply inserted and reinforced a new wall in the existing mold.

resized

Once the box was complete, the acrylic layers were aligned using pins through the pre-cut alignment holes, and secured together using a tiny bit of super glue. The mold is incredibly secure, but overwhelmingly intricate. This raises concerns around the feasibility of separating the acrylic from the concrete.

Test Pour Went Poorly

January, 2019

The materials for the concrete pour were acquired. Moving the bags of concrete made me realize this table is going to be HEAVY!

  • Surecrete PreCast x 5
  • Additive (5 gallon)
  • Sealer

maerials

The intricacy of the mold raised concerns about the feasibility of separating the acrylic from the concrete. So I decided to perform a test pour by first creating a small tile with an intricate acrylic inlay. I then masked the MDF board.

As an extra pre-caution, I added a silicon release barrier over the acrylic (aerosol application).

I finished the mold box and poured the concrete.

Once the concrete dried, the mold was broken apart and it was clear that the acrylic could not be separated without destroying the concrete finish.

This was incredibly disappointing, but also somewhat expected. I’m just glad to have verified before pouring the entire table. A different strategy is already in motion :)

Breaking the Mold

January, 2019

The new plan is to make a silicone mold of the acrylic and then cast a single piece of resin. That way, concrete can be poured around the resin, which will act as a inlay in the final table.

In order to make a mold, the acrylic needed to be exposed for the silicone. Two sides of the MDF box were carefully removed in case re-assembly turned out to be a viable option.

laser-cut-parts-1

Considering the volume of the mold, a brush on silicone was an inexpensive approach as it saved on material cost. I ended up using a SIlicone rubber material called EZ-Brush from “Smooth On”. The product is meant to create vacuum bag molds and even a thin layer yields an incredibly strong mold. The material was brushed on in 4 layers.

. Coat #1 Coat #2 Coat #3 Coat #4
. coat coat coat coat
. coat coat coat coat

Once the silicone rubber had cured, a thin layer of Smooth On’s Plasti-Paste epoxy was added to created a rigid mother mold.

Working with these products was an absolute treat. I could not be happier with the results and I am sure I’ll approach future projects differently knowing complex molds are this accessible.

When it Rains it Pours

May, 2020

Well… Covid hit, and surprisingly work picked up! While I’m terrifically fortunate to be busy, I all but forgot the table in the early months of 2020. Spring came, and I figured it was time to revisit the project. Eager to see progress, I rushed the pour… resulting in a few bubbles and blemishes I’m choosing to call “features” :)

To start the process I leveled the mold in preparation for the pour. This required placing weights on various corners of the mold because it had warped while in storage. The mixing and application of resin was broken into 3 separate pours, each bigger than the last. Volumes for each pour were calculated from the CAD model. I used a simple 2 part resin mix called “NuClear UV resistant Epoxy Resin​”. Despite the resin being made for thick pours, the resin cured with blemishes in the deeper sections.

  • Pour #1
    • Layers: 7, 6, 5
    • Volume: 0.65 qt
  • Pour #2
    • Layers :4, 3
    • Volume: 1.84 qt
  • Pour #3
    • Layers 2, 1
    • Volume: 5.00 qt

A Roaring Pouring Success

May, 2020

I let the acrylic dry for 2 days, just to be safe. Removing the outer hard shell was difficult around the ocean where the resin overheated and expanded slightly. But once the shell was off, removing the silicone mold was a breeze and INCREDIBLY satisfying. I’m eager to work with this material again. Overall I’m very pleased with how the resin turned out :)

​Thinking “inside” Another Box - June 2020

June, 2020

The original MDF box, originally built to house the laser cut acrylic, was destroyed during the intermediate mold. We created a new box for the concrete mold, custom fit to the final acrylic pour.

To further simplify the actual pouring of concrete, we also constructed an internal mold that hovers an inch off the surface. This should keep the concrete nicely in the side channels without having to form it by hand.

Lastly, we cut some large pieces of Styrofoam to fill larger empty spaces of the mold. This should keep the concrete pour to ~1” thick overtop the complex surface.. hopefully coming in at ~150-200lb instead of ~500lbs that would be required to submerge everything w/ concrete alone. We also cut grooves in the Styrofoam to serve as support channels for extra strength.

Concrete Evidence of Success

July, 2020

We actually poured the concrete. It finally happened!!! The internal mold worked incredibly well!

Taking the mold apart was an all hands affair. My partner Anna managed to snag a timelapse video as well. Everything went smoothly, which made the long mold making process worth it. The table still requires a bit of clean up and detail work… but overall I’m elated with how it turned out!

Finally, a Leg Up

August, 2020

Legs were an afterthought. To mount them in a sturdy fashion, I decided to create a thick inner platform out of 7/8” ply, resting on sanded and leveled risers which were epoxy welded to the concrete. The legs themselves are then mounted to the thick plywood with hardened steel bolts and a decent set of washers/lock nuts. While I didn’t like the mounting of the legs being an afterthought in the design, they’re incredibly strong. The table is a ROCK and moving it has become quite an ordeal :)

I Couldn’t Think of a “polished” Title

September, 2020

Then came the sanding… and a lot of it. I used a combination of wet and dry sanding in passes spanning 120 to 3000 grit, before a polish to make the acrylic really shine. This process took the better part of a day, and by the end I couldn’t unlock my smart phone as I’d sanded my finger prints off… ha!

Finally, after sanding and polishing, I sealed the concrete.

Comments