Developed by Nervous System, Kinematics is a system for 3D 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. The system combines computational geometry techniques with rigid body physics and customisation to take large (flexible) objects and compress them down for 3D printing through simulation.
The process begins with the form design of the desired object. The surface of the form is then tessellated with a pattern of triangles. The size of the triangles can be customised to produce different aesthetic effects as well as different qualities of movement in form (the smaller the triangle, the more flexible the structure / the more fabric like it behaves). Next the application generates the kinematics structure from the tessellation. Each triangle becomes a panel connected to its neighbours by hinges. The designer can apply different module styles to these panels to create further aesthetic effects.
Finally, the design is compressed via a simulation so it fits into a 3D printer. This means that an entire form, 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 behaviour of the design’s nearly 3,000 unique, interconnected parts and find a configuration that fits inside the volume of the printer.
Kinematics is Nervous System’ first application that is written purely JavaScript. Their previous web apps evolved from work they had created in Processing and contained large portions facilitated by processing.js to transition to the web. Kinematics was developed from the ground up to be a browser-based WebGL application. The project makes use of two libraries. One is glMatrix, which they use in all of their projects for vector and matrix operations. The other library they use is poly2tri, which produces constrained Delaunay triangulations. The JavaScript version is a port of the original C++ code. The team has also started internally developing modular code components which they 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 project also uses a JavaScript NURBS library that they’re developing. This allowed them to design curves for the boundaries of the pieces in Rhino and then import them into Kinematics where users can interactively change them. They’re also expanding and refining tools they created before for loading and working with meshes in JavaScript.
The simulation portion of the Kinematics project happens outside the browser. They use openFrameworks and BulletPhysics to perform the compression of Kinematics models. Since there is a browser-based port of Bullet, the team are in the process of incorporating this as well.
Kinematics | Project Page | Process Page | Products by Nervous System






