Well, that was exciting! Nervous System attended the 3DPrintShow in New York City last week. Our work was exhibited in the Art Gallery and the Fashion House. We even got to watch several of our Kinematics jewelry designs walk the runway in their 3d-printed fashion show. It was a pleasure to meet all of the other designers and artists who were showing their work. Below you can see a few photos of our work on display.
The Kinematics test belt is here and it fits! This was printed in folded form and produced from a 3D scan of Jessica. You can read about that in our previous post: making a kinematics belt. Next up it is time to make the dress.
We decided to make a belt as the next step towards realizing our Kinematics concept dress. We used a Kinect depth camera to produce a 3D scan of my stomach. Then we used our kinematics software to design the belt and computationally fold it for 3D printing. After folding, the bounding box of the belt was about 60% smaller. This print will provide us with some feedback about fit and durability before we move forward with a dress.
We are steadily progressing on our Kinematics dress project. A gown will be on exhibit at apexart in NYC from March 20 – May 10, 2014 as a part of Coding the body, an exhibit organized by Leah Buechley. We are working to print the first full scale dress sometime in February.
We just received a box from Shapeways that contained our first attempt at printing a crumpled structure… and it worked! While the kinematics system always worked in theory, there were all sorts of issues with tolerances, print orientation, numerical stability, etc that we had to address before it could work in real life. Opening up the box and seeing that the print came out perfectly with smooth movement and no fusion was a huge relief.
Come work at Nervous System! We are looking to hire a full-time operations manager to help us manage and expand our studio. Please forward this job posting to anyone you think might be interested. Read the details at http://n-e-r-v-o-u-s.com/jobs.php
The Grommet visited our studio a few weeks ago and recorded a short video with us. We think it came out great! You can watch it below.
We’re working hard to get your holiday orders to you on time. We recommend ordering as soon as possible if you want to purchase a custom design generated with one of our apps. Here are our deadlines to guarantee arrival before Christmas.
12/9order custom designs from our apps
(applies to nylon 3D prints only)
12/18 orders that ship by priority mail
12/19 orders that ship by express mail
12/11 orders that ship by express mail
(we cannot guarantee arrival for any other types of international shipping)
We also have a special holiday coupon for you. Use the code KINEMATICS in our shopping cart to take 15% off your total.
Kinematics is a system for 4D printing that creates complex, foldable forms composed of articulated modules. The system provides a way to turn any three-dimensional shape into a flexible structure using 3D printing. Kinematics combines computational geometry techniques with rigid body physics and customization. Practically, Kinematics allows us to take large objects and compress them down for 3D printing through simulation. It also enables the production of intricately patterned wearables that conform flexibly to the body.
Kinematics is a branch of mechanics that describes the motion of objects, often described as the “geometry of motion.” We use the term Kinematics to allude to the core of the project, the use of simulation to model the movement of complex assemblages of jointed parts.
Kinematics produces designs composed of 10’s to 1000’s of unique components that interlock to construct dynamic, mechanical structures. Each component is rigid, but in aggregate they behave as a continuous fabric. Though made of many distinct pieces, these designs require no assembly. Instead the hinge mechanisms are 3D printed in-place and work straight out of the machine.
This project evolved out of a collaboration with Motorola’s Advanced Technology and Projects group which challenged us to create in-person customization experiences for low cost 3D printers. The genesis of the project is discussed at length in The Making of Kinematics.
a tale of two apps
We are releasing two web-based applications: Kinematics and a simplified version called Kinematics @ Home which is completely free to use.
The Kinematics app allows for the creation of necklaces, bracelets and earrings. Users can sculpt the shape of their jewelry and control the density of the pattern. Designs created with Kinematics can be ordered in polished 3D-printed nylon in a variety of colors.
The Kinematics @ Home app is targeted at people who already have access to a 3D printer. It’s our first app that allows users to download an STL file for home printing. Enter your wrist size, style your bracelet and click print to receive a free STL file suitable for printing on a Makerbot or similar desktop printer.
Kinematics case study: making a dress
Concurrently with the development of the online applications, we’ve been working on a more advanced software with broader practical applications. Kinematics allows us to design a shape and then fold it into a more compressed form for 3D printing. Items we’ve created so far are flexible, but rigid objects could be created by introducing a hinge joint that locks at a preferred angle. Here we present an example of how Kinematics can be used to create a flexible dress that can be printed in one piece.
The process begins with a 3D scan of the client. This produces an accurate 3D model of the body upon which we draw the form of the desired dress. For this example, the top of the dress conforms exactly to the torso, but the skirt has a larger silhouette, allowing for the dress to drape and flow as the wearer moves.
The surface of the sketched dress is then tessellated with a pattern of triangles. The size of the triangles can be customized by the designer to produce different aesthetic effects as well as different qualities of movement in the dress (the smaller the triangle, the more flexible the structure / the more fabric like it behaves). Next we generate the kinematics structure from the tessellation. Each triangle becomes a panel connected to its neighbors by hinges. The designer can apply different module styles to these panels to create further aesthetic effects.
Finally, we compress the design via simulation so it fits into a 3D printer. This means that an entire gown, much larger than the printer itself, can be produced in a single assembled piece. The simulation uses rigid body physics to accurately model the folding behavior of the design’s nearly 3,000 unique, interconnected parts and find a configuration that fits inside the volume of the printer.
Each jewelry design is a complex assemblage of hinged, triangular parts that behave as a continuous fabric in aggregate. Kinematics jewelry conforms closely to the contours of the human body. This is 21st-century jewelry, designed and manufactured using techniques that did not exist just a few years ago.
Kinematics pieces come in four styles: smooth, angular, polygonal and tetrahedral. Each design takes its name from the module style and number of pieces in the design. For example, Tetra Kinematics 174-n is a tetrahedral style necklace composed of 174 unique modules.
We’ve added eighteen Kinematics designs to our shop, and a limited initial run of each is currently available for purchase. Kinematics jewelry is made of polished 3D printed nylon in a variety of colors. Necklace, earring and bracelet designs are available; the bracelets and necklaces are fastened simply and securely with hidden magnetic clasps. Prices for the collection range from $25 to $350 and most pieces cost less than $100.
Most of our projects start with a natural inspiration, but Kinematics emerged from a very different perspective. This project started with a technical problem: how can we create large objects quickly on a desktop 3D printer?
Last May, Motorola’s Advanced Technology and Projects division invited us to their headquarters in Sunnyvale to discuss a potential collaboration. They wanted us to develop “aesthetic generators” that related to their new phone, the Moto X. The catch was that these apps needed to generate customized objects that could be 3D printed in under an hour on equipment that was being driven around the country in the MAKEwithMOTO van. Despite what you may have been told, 3D printing is not a particularly fast process. In fact, the more three dimensional an object is, the slower it prints. One hour is a very challenging print time to meet for an object of any significant size.
The question we asked ourselves was how could we create something that was nearly flat, but still took advantage of the new possibilities in 3D printing. Our solution was to print a flat design that could be folded into another shape after printing. What we ended up creating was a NFC-enable bracelet made of a foldable geometric pattern.
From the beginning, this project was focused making the most of the limitations of low-cost 3D printers. Unlike most of our work, which occurs almost entirely digitally before we see a real object, this required extensive physical prototyping. We used our MakerBot Replicator (v1, dual extruder) throughout the prototyping period to develop and refine our concept.
Initially, we weren’t sure it was possible to design interlocking components that a desktop 3D printer could accurately reproduce while being small enough to comfortably wearable. But looking around the 3D printing community site Thingiverse, we found a diverse array of flexible structures all designed to be 3d-printed on low cost machines. Starting from there, we knew that it could be done.
We began by modelling a hinged joint mechanism based on a double-ended cone pin and socket. Cone-based geometry works well because, with the correct angle, it is self supporting, an essential quality for low-cost home printing. We spent a lot of time tweaking tolerances to get the hinge just right: tight enough to not fall apart but loose enough to not fuse together during printing. We kept refining the joint until it was as small as it could be and still print reliably.
With the joint designed, we started out printing simple chains of components. These basic configurations were already fun to play with, but we suspected they could be much more compelling. Taking origami tessellations as inspiration, we started making triangulated, foldable surfaces. Beginning with a regular tiling of equilateral triangles, we modeled the first assemblages entirely by hand. By using hinges to connect together small triangular panels, we were able to create a faceted, fabric-like material.
However, even modelling a simple, repetitive pattern is time consuming and difficult. Before we could continue, we needed to automate the generation of the hinge mechanisms on arbitrarily complex patterns. With that done, we could start to design tools that would let anyone morph and shape a pattern to create their own fabric-like creation. Early experiments also tried different ways we could style the modules or incorporate the multi-material extrusion available on newer desktop printers.
The results were compelling. Not only were were the pieces themselves addictive to play with, but it served as a case study in customization. Using the most inexpensive home printers, we could make complex, fully customized products in under an hour. However, as we worked on the project we realized the Kinematics system opened up a lot more possibilities.
Tessellation to Kinematics
The original application for Motorola had many restrictions. In addition to the driving constraint of needing to quickly produce objects using a low-cost 3D printer, it also had to be used in-person in a van driving around the country. The geometry had to be limited to small objects that consistently printed well. The experience also had to be limited and highly directed. When someone used the app, their first step was walking up to a strange van filled with 3D printers, probably with no idea what was going on. So the app had to convey a lot of information: what someone was making, why they were making it, how to customize it, and how to get it printed. Because so much had to be presented in a short period of time, it was necessary to make the procedure very linear.
Freed from these constraints, we were able to develop a version of the app that was much more open-ended, both in terms of the geometry and the experience. We designed a new hinge for our 3D printing method of choice, SLS. This allowed us to create larger pieces and modules with more complex shapes. We also completely changed how the pieces were designed. Instead of morphing a fixed tessellation, users can manipulate parametric curves to create various shapes that are tessellated on the fly. They can also dramatically adjust the density of triangles, making the results more varied and freeform.
The most exciting thing about switching from extrusion-based to powder-based printing was that we could now design objects that were not self supporting. Though kinematics was originally developed to print three dimensional objects flat, allowing objects to be anywhere in space opened up new possibilities. The fabric-like quality of the designs we were producing got us thinking about making larger three-dimensional wearables like dresses. We realized that Kinematics had broader implications for printing arbitrary objects. We can take any shape and transform it into a flexible structure. These structures can then be digitally folded into more compressed shapes enabling the construction of objects much larger than the 3D printer’s build volume.
The project makes use of two libraries. One is glMatrix, which we use in all our projects for vector and matrix operations. It is a simple and fast library that does one function and does it well. This is exactly the type of library I love to use: flexible enough to fit in any situation and not bloated with unnecessary functionality.
We’ve also started internally developing modular code components which we can apply to other projects. glShader takes care of loading and processing of GLSL shader programs. It asynchronously loads external shader files and extracts all the attributes and uniforms from the shaders, providing helper functions to simplify working with WebGL.
The simulation portion of the Kinematics project happens outside the browser. We use openFrameworks and BulletPhysics to perform the compression of Kinematics models. BulletPhysics is an open-source physics engine used primarily for rigid body mechanics in games. It is a powerful and fast tool for physics simulation, supporting constraints, collisions, forces, and even soft bodies. There is a browser-based port of Bullet that we are in the process of incorporating as well.
Special thanks to Motorola ATAP for getting us started down this road (especially Daniel, Andrew, and Paul). Thank you Thingiverse for inspiring us and Makerbot for giving us the printer we used for prototyping. And thank you to Artec 3d for proving the 3D scan we used to develop the concept dress.
In order to generate the price of a custom design on the fly, we need to calculate the volume of the piece for 3d printing. By constantly updating the volume, the customer gets instant feedback on how their changes are affecting price. Calculating the volume of a mesh is a relatively simple and well-known problem, and I’ll go over the straight forward case as well as an optimization we’ve incorporated into our latest project.
The idea behind calculating the volume of a mesh is to calculate a volume for each triangle of the mesh and add them up. Now, a triangle itself does not have volume; it is two dimensional. Instead we calculate the volume of a tetrahedron which goes from the origin (0,0,0) to the triangle.
There is neat equation for calculating volume of a tetrahedron. Given a triangle’s points v1, v2, v3 the tetrahedrons volume is
Another way to express this is if we have a 3×3 matrix, where each row is one of our vertices the volume is a sixth of the determinant. The division by six comes from the fact that determinant is actually the volume of the parallelpiped formed by the three vectors, and you can stuff 6 tetrahedrons into the parallelpiped.
But wait, if I add up all these tetrahedrons don’t I get a mess of overlapping volumes that go to the origin? Yes, but the key thing is that these volumes are signed, so they can be negative depending on the vertex winding. If my points go one way (v1->v2->v3) I get a positive volume and if they go the other way (v1->v3->v2) I get a negative volume. Faces pointing out add to the total volume and faces pointing in subtract. What is left is only the volume inside my object. To get the total volume of a mesh, we go through each triangle, compute its signed volume, and add them up.
Volume of repeated elements
Now, onto the good stuff. What happens if you have an object that is made of (at least in part) an aggregate of a bunch of identical but complex parts. I don’t mean a booleaning together primitives, but you could imagine something like a buckyball where each face is articulated with some kind of intricate shape. The brute force approach would be to move and rotate the shape to the proper position then go through each triangle and calculate the volume. This means you have to calculate a transform on each of the points of your shape, and then go through each triangle. If your shape has 1000 triangles and you have 100 shapes, that ends up being a lot calculation. We can drastically increase the efficiency of this by computing a “general volume” for the shape once, and applying our transforms only to that simplified representation. But what does this general volume look like?
The key idea behind this general volume is the fact that volume is rotation invariant. This is one of the basic results of differential geometry. It is intuitively obvious; no matter how I orient an object in space its volume does not change. What is less intuitive is that the same thing holds true for the signed volume of open shapes. Mathematically this can be seen easily by noting that the volume is the determinant of a matrix, and the rotation matrix has a determinant of 1. The determinant of one matrix multiplied by another is the multiplication of their individual determinants. So, I can rotate my primitive element however I want, and the volume stays the same. If I was only rotating my shape, then I could calculate the volume of my shape once and multiply it by the number of shapes I have.
That only leaves translation or moving my shape around in space. We can look at this intuitively in a simplified 2D example with the area of a single line segment. The area of a triangle is one half base time height. If I translate my line segment in the x direction by some amount, I am adding that amount to my height. So the area of my translated line is:
I take my original area, and I add on some amount multiplied by my x translation. Though this is a very dumbed down example, we can do essentially the same thing for each axis (x,y,z) in our volume.
To see how this idea applies to our volume calculation, we can look at the expanded equation for the volume of each triangle, where
That may look like a lot of equation, but if look at each individual term, we notice that it is the sum of terms that look like an x component times a y component times a z component. Isolating an arbitrary term if we translate along one axis, we get something similar to our simple 2d example:
You might say, that is only translating one direction, what happens when you are doing an arbitrary translation? It turns out because of the way the terms are organized in positive and negative pairs, every term besides the one in one directional example cancels out. So our general volume becomes a vector which sums up the terms for each axis. Each axis term is all the pairs of vertex coordinates that don’t include that axis:
Just like our regular volume, we can just add these up for each triangle in our shape. Our final volume calculation becomes:
This is great not only because it allows us to calculate the volume without going through each triangle, but also we don’t even have to know how our shape is oriented! This leads to some strange facts, like if I randomly rotate each of my shapes but put them in the same spot it has the same volume.