We’re doing several fun events in the upcoming month, and we wanted to tell you about them.
3D Printing Night @Room 68 — April 4, 6-9pm
68 South St, Jamaica Plain, MA
Tomorrow night (April 4th) we’ll be at Room 68 from 6:00-9:00pm. Stores and galleries in Jamaica Plain stay open late on the first Thursday of each month, and our friends at Room 68 invited us to be involved. We love working with the Room 68 team, and we’re excited to be showing off a brand new cellular coffee table designed with our Radiolaria web app. You can also buy Nervous System lamps or jewelry and see a MakerBot 3D printer in action. Maybe we’ll make a 3D-printed cat for you!
Science Crawl @Xylem — April 18, 5-8pm
287 Third St, Cambridge, MA
On Thursday, April 18th, we’ll be hosting one of the stops on the Science Crawl, a Cambridge Science Festival event. We’re thankful to our friends at Xylem for letting us use their store. We hope you’ll come by and see the exhibition: we’re going to transform Xylem into a space where you can explore everything Nervous System. We’ll have all our new stuff on display, including tables, superhard jigsaw puzzles, and neon-colored jewelry. We’re also going to invite visitors to experiment with our interactive design tools, and Jesse and Jessica will be there to explain the math and science behind their designs. Ask them anything!
Somerville Open Studios @Nervous System — May 4-5, 12-6pm
561 Windsor St, Suite A206, Somerville, MA
In May, we’re going to be involved with Somerville Open Studios, a great event where artists all over Somerville invite people to see the spaces where they create. First, Nervous System will be featured at the Somerville Open Studios fashion show on May 1st. The fashion show starts at 7:30pm in the Center for Arts at the Armory. Then, on May 4th and 5th, the Nervous System studio will be open from noon til 6:00pm, and we’d love for you to come visit. We’ll be featuring our interactive design tools, and we plan to show some new experiments as well.
We have been working on the system we used to create the Xylem line in preparation for making a new collection of 3D printed pieces, including jewelry, lighting and furniture. We are extending the functionality and improving the performance of the simulation to take the designs from 2D cut pieces to fully 3D ones. For a bit more of an explanation of some of the things I refer to in the post, see the original paper that this system is based on.
First and foremost is making the system work in 3D. The original system uses a Delaunay triangulation to determine source neighborhoods. This allows the creation of closed cells. Closed cells are not only desirable for us aesthetically, but necessary for improved structural stability when we are making 3D prints. Having a bunch of unconnected branches would be too weak for functional plastic pieces. Computing Delaunay triangulations becomes much harder in 3D, so we switched over to C++ in order to use CGAL, an open source library of computational geometry algorithms. The other major challenge is producing the 3D surface itself from the vein data. For our previous 3D printed line, we created a simple mesh skeleton and smoothed it using subdivision surfaces. This was possible because we had a very orderly surface. However, the venation patterns are much more chaotic and it is harder to determine how things are connected. Instead, we used an implicit surface technique. This means defining a function everywhere in space which essentially returns 1 inside the surface and -1 outside the surface. A common method for computing a surface for such a function is called marching cubes. However, CGAL has an implementation of a much more sophisticated algorithm which produces higher quality meshes. We also use a CGAL implementation of Axis-Aligned Bounding Box Trees to do quick intersections and projections to a boundary surface that we import to constrain the growth. CGAL kills many birds with one stone.
These are the basic elements for a 3D growth. By projecting onto the surface as the system grows, we can also create growth on a surface as seen in this test cuff we made.
That is just the beginning of the changes we’ve been working on. We were also dissatisfied with the character of the growth. Generally, the algorithm does not produce one of the main things we would expect from venation, a primary central vein with secondary veins perpendicular to it. Everything just tends to grow out at the same time, causing veins to be more parallel then we would like. This contrasts with the real theory of how veins form based on a positive feedback mechanism between flow and flow rate. The primary vein starts to form first, then secondary and tertiary veins. To attempt to inject some of that hierarchical logic into our system, we changed the growth rules. Instead of veins growing in the average direction of all the sources flowing to them, veins grow probabilistically, the more sources flowing to a vein the more likely that vein is to grow. This anticipates which veins become primary or secondary and grows them first.
One problem with probabilistic growth is it is inherently much slower. Each step of the simulation takes just as long, but instead of all the veins growing only a small percentage grow. This led to an idea to make the simulation much faster. The way we determine which veins a source flows to is we temporarily insert that source into a Delaunay triangulation of all the veins and look at the neighbors within that triangulation. This is a computationally costly step. The thing to note is that only new veins that we add in each step of the simulation can possibly be added to or change a sources neighborhood. This is because the veins and sources never move, so adding a new vein could never cause an old vein that was not previously a neighbor to become one. Instead of keeping track of a global triangulation that gets bigger and bigger with every step of the simulation, we only keep track of the local neighborhood for each source. Since the size of the neighborhood of each source stays small, the number of new veins added in each step stays small, and the number of sources is constantly decreasing, this means that as the simulation progresses it actually gets faster (in practice it slows down sharply until the number of veins added normalizes and then gradually speeds up). The key element is to keep track of the neighborhood of each source. The relative neighborhood of veins the source actually flows to is insufficient. That information cannot be used to figure out which new veins are neighbors. Instead we let each vein represent a half plane that points away from the source. Any vein that is within this half plane cannot be the sources neighbor. It is blocked by the vein that defines that half plane. We need to keep track of the minimal set of such veins. Essentially we are defining a convex shell around each source, outside of which nothing can be a neighbor of the source. Maintaining that data structure is a similar problem to linear programming, though because the problem is in a low dimension and we incrementally add each point, it is efficient to take a fairly brute force approach. Long story short, this turns out to be much more efficient. Allowing us to create probabilistic growths faster than we used to make deterministic ones.
Delaunay triangulations in 3D are even more computationally difficult than in 2D. Using CGAL, it takes us several hours to make one growth. So applying this new technique in 3D is even more powerful. It is more difficult to keep track of the convex shell around each source, but it is still much faster. We have not finished implementing this yet, but we have made a video of our preliminary results which looks pretty promising. The next step is to insert this into our framework that uses CGAL to create the 3D mesh.
Sorry the video quality is so poor. It does not seem to compress well.
Another aspect I would like to work on is growth on a surface. Right now, we apply the 3D algorithm with sources confined to a surface and we also project each vein onto the surface. This is fine for simple surface, but for surfaces on which there is a large difference between the distance along the surface and the distance through space this can cause a problem. I would like to use geodesic distances to compute neighbors instead of distance in 3-space. This presents a lot of challenges which we are still working on.
This entire exposition would be a lot clearer with a few nice diagrams, but that is a little more in depth than I can muster right now. Stay tuned for more results and new designs with this system.
Now is the best time of year (in New England at least) to explore outside and see the underlying structures of plants exposed. The leaves covering the ground are fantastic but these dried husks from tomatillos are even better. I collected them at our local farm while Jesse was hunting for hot peppers.
For our Reaction show at Rare Device, we recreated two of our design algorithms as interactive ipad applications that allow visitors in the gallery to engage in our process and try their hand at generative design. The two applications are Cell Cycle, which creates cellular bracelets and rings for 3dprinting, and Xylem which simulates leaf vein formation. The apps were made with the help of the Cinder library.
The Cell Cycle app uses a physics simulation to sculpt a mesh for 3dprinting. Visitors can use multitouch controls to stretch, twist, and scale the basic form. Using the control panel on the left they can change the basic mesh parameters and define boundary curves along the edges of the piece. Most significantly, they can also touch anywhere on the model to subdivide cells and introduce additional springs to the system.
The Xylem app allows people to paint on and erase horomone sources that will effect the venation structure’s growth. Watch the video below to get a sense of what that means.
If you are in the San Francisco area, you can play with these apps in the gallery at Rare Device, 1845 Market St.
We have just added a new finish to a limited selection of our stainless steel jewelry. The finish is a black chromium plating that enhances the intricate details of our visually delicate designs to create a bold graphic look. The plating is nickel free and the pieces are paired with oxidized sterling silver chains and ear wires. Click here to shop the new collection.
I am working on taking our Xylem system and making into a line of furniture, starting with small stools. I am not sure it the pieces will be CNC routed or cast from 3d prints or perhaps even direct 3d printed. The first step is to take our applet which just draws a series of 2D line segments and have it build a 3D mesh suitable from rapid manufacturing. In our previous systems for 3d printing, Cell Cycle and Growth, we calculated a low polygon mesh in a precise mathematical manner by constructing joints and connecting members, and then smoothed it using Catmull-Clark subdivisions. Due to the relatively unstructured nature of the patterns created by the Xylem line, it’s impossible to create the meshes in that way so I decided to take Toxiclibs for a spin and use the volumeutils implementation of marching cubes to build my meshes. I still have a lot of work to do, but here are some preliminary images of the type meshes I can build.
While there are still a lot of issues to work out, I’m very excited about the possibilities of using our Xylem system to create a line of functional furniture where each piece is a one of a kind emergent design. The next step is to implement a similar meshing system in C++. Jesse has already created a Xylem system that grows in 3D rather than on a surface like the examples shown below but we can currently only visualize it as lines.
Now that we have an intern at Nervous HQ, we can focus a lot more on non-jewelry projects like this.
You can see the pictures larger on our flicker here