After seeing Neri Oxmans MIT Media Lab group work on functionally graded materials in 3D printing, but seemingly not continuing, I decided to do some research myself and bring this interesting topic to RepRap printing.
Since we are pretty much limited to fusing filament together right now, I had to consider the limitations. Using gas to get porous extrusions for example is not really possible with our small nozzles and level of engineering. We cannot easily blend two liquids to create gradients. And so on...
But wait, actually, FFF is ideal for simple functionally graded materials! As far as I know, it is the only additive process that doesn't require unused material to be extracted out of internal cavities. So in theory, this is the only process that allows for completely enclosed internal structures. With decreasing layer heights, it is also possible to print steep overhangs without too much sagging.
And last but not least, the enormous material portfolio that FOSS 3D printing accumulated over time enables us to combine several materials that exhibit different properties but still can be welded together to a certain degree.
So not only can we print nearly arbitrary cavities, but also a combination of several different materials. Not a bad position to start from.
When thinking about how to implement FGM in RepRap-able fashion, Voronoi Cells seemed to be a very sensible solution to me. Arbitrarily sizeable, known algorithms to calculate in 3D and an organic form all appealed to me. Blender comes with an extension called "Cell Fracture" that essentially uses the particle system of an object to calculate voronoi cells. Exactly what I needed.
The process is as follows:
Using an arbitrary 3D model, a very basic simulation of loads is performed or depending on user set properties, (in)flexibility of a volume is accounted for. This can be achieved by using particle systems that react to force fields, which are set by the user. The particles form the base for a voronoi cellular fracturing of the object. After setting the wall thickness, the cells are subtracted from the model to form cavities. The finished model with cavities is sent to a slicing program.
A simple demonstration:
[attachment 24322 1_Particles.jpg]
1. Attach 2 particle systems to the object. One has to be generated in the volume of the model and the other has to have a very high mass and be attached to the faces. The high mass makes these particles immobile. If the surface of the model doesn't have enough points to calculate the cells from, there will be missing cells later on. In the middle, I have set a force field that drives the volume particles outside so that the center of the cube is less densely filled with particles than near the surface.
Force fields can also be used to attract particles for higher density. I have also experimented with boid AI systems so that swarms of particles follow a certain behavior. For more complex particle patterns, boids might be more useful than "dumb" particles, but they are a little hard to set correctly in my opinion.
[attachment 24323 2_Fracture.jpg]
2. After the fracture (margin set to 1/2 extrusion with - this will result in a gap with the width of the extrusion width). Red surfaces indicate original surfaces of the object. You have to join all the cells together to one object and repair the mesh a little bit (removing doubles usually solves all problems).
[attachment 24324 3_Inside.jpg]
3. As you can see, the inside is less densely populated, just like a bone.
[attachment 24325 4_Boolean_Trim.jpg]
4. Trim the cells a little bit (half the wall thickness of your final object), so that later boolean operations work without problems. Use the "Solidify" modifier to make the faces of the cube solid.
[attachment 24326 5_Boolean_Final.jpg]
5. The cells inside the original object, ready to cut out cavities.
[attachment 24327 6_Boolean_Applied.jpg]
6. Applied the boolean modifier, now the cavities are clearly showing.
[attachment 24328 7_Inside.jpg]
7. The inside of the cube. Most of the faces you see from the "back" or "inside" because you are look into a mesh of which I have hidden several faces to show the inside. However, I have also hidden some faces of the cavities (near the center) to show the cavities themselves.
[attachment 24329 8_2D_slice.svg]
8. One slice, saved from skeinforge.
The actual print will follow tomorrow.
This method works when you don't have parts that are thinner than 2 times wall thickness plus a little bit of tolerance since the wall solidify feature of blender will cause self-intersections if you set the wall thickness too high. I hope that future versions will merge self-intersections (or maybe if I find time to do that, I could also try to fix this myself).
For organic-looking objects, voronoi cells may be superb, but what about predictable behavior or even calculable performance of printed objects?
I am in the planning phase to write a custom specialized slicer that is able to vary the infill density by subdividing cubes as they can be subdivided and nested rather easily. The density would thus vary in exponential terms.
Obviously, something complex like a slicer will take some time to program. There are also other commitments that I have to attend to, but I hope to be able to present to you something even more interesting than what I already have by the end of the year.
[attachment 24331 0_Cubes.jpg]
The nested cubes approach might look something like this.
By the way: Does anyone know whether GPL-licensed software and contained algorithms / construction methods can be patented by someone else? It would really suck to develop something just to be taken and patented by some big company so that even the creator cannot legally use his software himself. And I really want this piece of software to be as free as possible and for anyone to use.
Since we are pretty much limited to fusing filament together right now, I had to consider the limitations. Using gas to get porous extrusions for example is not really possible with our small nozzles and level of engineering. We cannot easily blend two liquids to create gradients. And so on...
But wait, actually, FFF is ideal for simple functionally graded materials! As far as I know, it is the only additive process that doesn't require unused material to be extracted out of internal cavities. So in theory, this is the only process that allows for completely enclosed internal structures. With decreasing layer heights, it is also possible to print steep overhangs without too much sagging.
And last but not least, the enormous material portfolio that FOSS 3D printing accumulated over time enables us to combine several materials that exhibit different properties but still can be welded together to a certain degree.
So not only can we print nearly arbitrary cavities, but also a combination of several different materials. Not a bad position to start from.
When thinking about how to implement FGM in RepRap-able fashion, Voronoi Cells seemed to be a very sensible solution to me. Arbitrarily sizeable, known algorithms to calculate in 3D and an organic form all appealed to me. Blender comes with an extension called "Cell Fracture" that essentially uses the particle system of an object to calculate voronoi cells. Exactly what I needed.
The process is as follows:
Using an arbitrary 3D model, a very basic simulation of loads is performed or depending on user set properties, (in)flexibility of a volume is accounted for. This can be achieved by using particle systems that react to force fields, which are set by the user. The particles form the base for a voronoi cellular fracturing of the object. After setting the wall thickness, the cells are subtracted from the model to form cavities. The finished model with cavities is sent to a slicing program.
A simple demonstration:
[attachment 24322 1_Particles.jpg]
1. Attach 2 particle systems to the object. One has to be generated in the volume of the model and the other has to have a very high mass and be attached to the faces. The high mass makes these particles immobile. If the surface of the model doesn't have enough points to calculate the cells from, there will be missing cells later on. In the middle, I have set a force field that drives the volume particles outside so that the center of the cube is less densely filled with particles than near the surface.
Force fields can also be used to attract particles for higher density. I have also experimented with boid AI systems so that swarms of particles follow a certain behavior. For more complex particle patterns, boids might be more useful than "dumb" particles, but they are a little hard to set correctly in my opinion.
[attachment 24323 2_Fracture.jpg]
2. After the fracture (margin set to 1/2 extrusion with - this will result in a gap with the width of the extrusion width). Red surfaces indicate original surfaces of the object. You have to join all the cells together to one object and repair the mesh a little bit (removing doubles usually solves all problems).
[attachment 24324 3_Inside.jpg]
3. As you can see, the inside is less densely populated, just like a bone.
[attachment 24325 4_Boolean_Trim.jpg]
4. Trim the cells a little bit (half the wall thickness of your final object), so that later boolean operations work without problems. Use the "Solidify" modifier to make the faces of the cube solid.
[attachment 24326 5_Boolean_Final.jpg]
5. The cells inside the original object, ready to cut out cavities.
[attachment 24327 6_Boolean_Applied.jpg]
6. Applied the boolean modifier, now the cavities are clearly showing.
[attachment 24328 7_Inside.jpg]
7. The inside of the cube. Most of the faces you see from the "back" or "inside" because you are look into a mesh of which I have hidden several faces to show the inside. However, I have also hidden some faces of the cavities (near the center) to show the cavities themselves.
[attachment 24329 8_2D_slice.svg]
8. One slice, saved from skeinforge.
The actual print will follow tomorrow.
This method works when you don't have parts that are thinner than 2 times wall thickness plus a little bit of tolerance since the wall solidify feature of blender will cause self-intersections if you set the wall thickness too high. I hope that future versions will merge self-intersections (or maybe if I find time to do that, I could also try to fix this myself).
For organic-looking objects, voronoi cells may be superb, but what about predictable behavior or even calculable performance of printed objects?
I am in the planning phase to write a custom specialized slicer that is able to vary the infill density by subdividing cubes as they can be subdivided and nested rather easily. The density would thus vary in exponential terms.
Obviously, something complex like a slicer will take some time to program. There are also other commitments that I have to attend to, but I hope to be able to present to you something even more interesting than what I already have by the end of the year.
[attachment 24331 0_Cubes.jpg]
The nested cubes approach might look something like this.
By the way: Does anyone know whether GPL-licensed software and contained algorithms / construction methods can be patented by someone else? It would really suck to develop something just to be taken and patented by some big company so that even the creator cannot legally use his software himself. And I really want this piece of software to be as free as possible and for anyone to use.