Array Modifiers in Blender
Blender (go to blender.org to download) has a great tool called an array modifier, which allows one to easily make an array of a single 'base object.' The relative spacing, rotation and scale between objects in the array can be controlled with an 'empty.' An empty is an object that only has position, rotation and scale. Using array modifiers with empties, one can make all sorts of bizarre geometric fractal-like objects and animations. Yummy Spiral.
Blender is open-source and extremely powerful, but has some quirks that can make it difficult or confusing. However, with sufficient patience and google searches one can model amazing stuff, really quickly. This instructable is designed for a complete beginner (I hope) in blender.
Requirements for Modeling:
Blender (I am using blender 2.74a)
3d printer (here I am using Autodesk's Ember, a SLA (stereolithography) 3d printer)
mesh - or polygon mesh - A group of polygon faces, their edges, and vertices (where edges join together), which can be joined together to make a solid or a surface.
vertex - the points where edges of a mesh meet
modifier - some operation that is applied to an object. Modifiers in blender can be hidden or shown, and can be applied to 'bake' the object in the modified state.
Step 1: Blender Array Modifiers - the Most Important Step!
0. Start blender! Basic stuff: hold the scroll wheel and drag to orbit around the model. Scroll to zoom. Hold shift and the scroll-wheel/middle mouse button to pan. In the 3d window: Right-click does selection. Left-click accepts changes, and is rarely the first button you will hit :| If you do left-click in the 3d window the position of the 'cursor,' or the little red-and-white circle, will move. That is ok, you can always reset the position of the cursor using shift-s. The cursor becomes very useful for positioning objects and the like. Also its useful to type 'a' to toggle selecting all or deselecting all.
1. Make sure you are in 'Object Mode.' Object mode lets you select different meshes and do macroscopic things to them: move them, animate them, make relationship between them. 'Edit Mode' lets you change microscopic things: the shape of the mesh, the number of holes or the smoothness of the mesh. Hit 'Tab' key to toggle object and edit mode.
2. Add an 'Empty' to the blender scene: Hit space-bar and type 'add empty.' Select Arrows. Three black perpendicular arrows labeled x, y and z should appear where the red and white circle is.
3. Add the Array Modifier to the cube: After selecting the cube, (with a right click!), in the left-hand panel, (the properties panel), click the little wrench symbol (modifiers). Select Array. This will open a sub panel with the various buttons and parameters that control the array. Uncheck Relative Offset, which is the default, and check Object Offset. Under Object Offset click the grey box (with a little orange cube in it). A list of all the objects in the scene, besides the cube, will drop down. Select "Empty." This is the default name blender assigns.
4. PLay: That's it! Now you can select the Empty in the 3d window and move it, scale it, rotate it, and create all sorts of lovely fractal spirals or nested matryoshka dolls. You can adjust the number of copies in the array ('Count'). You can also make a copy of the array by clicking the 'Copy' button in the array panel. This will make a copy of the array you just made. If you associate this with a different empty then you can make some pretty nutty patterns. Such a simple tool, so many possibilities. Check out some of the images in the first step to see some examples.
The next steps are a bunch of editing and fiddling details to make a model that can actually be printed and is all smooth and nice:
join the base units --> apply subsurface modifier for visual verification of shape --> applying array modifier --> cap ends --> apply subsurface modifier -> check mesh --> export stl
I go into a ton of detail, assuming you have never used blender and don't want to get stuck on really annoying things that are not obvious, like how to select faces or an edge loop, etc.
Step 2: Connecting the Array
Suppose you found a neat pattern, and now want to make a physical object with a 3d printer. To make a single object that doesn't fall apart, the cubes need to be connected.
Here is where I begin to describe specific operations unique to this model and the aesthetic choices I made while creating it. The basic idea is to use vertex snapping and the 'merge' setting in the array modifier to join the units together to make a single object.
1. Turn the cubes into square tubes: Select the cube, hit 'tab' to enter edit mode. The individual elements of the mesh are now visible: faces, edge, vertices. Now switch to Face-Mode by pressing ctrl-tab, or clicking the little cube-with-orange-face icon at the bottom edge of the 3d window. Select the two faces (right-click) and then hit 'x' or 'delete,' and finally type 'f' to confirm the deletion of faces.
3. Make all the geometry in the array Snapable. In the Array Modifier Panel, click the little triangle to make the vertices of all the elements in the array active, so that they are 'snap-able.'
4. Using Vertex Snapping: Click the little magnet icon for snapping, and next to it select Vertex. Now left-click on a vertex, type 'g,' for grab. Now when you drag the mouse it will move the vertex about. With vertex-snapping active, the vertex will 'jump' to exactly match the position of another vertex. Right-click to accept the new location of the vertex.
In this case I decided to just join the two inner vertices, and leave to other ones open.
5. Set Merge in the Array Modifier Panel: Activating the 'merge' checkbox will make vertices within the set distance fuse. When the modifier is applied (at the very end) the object will then be one contiguous mesh. An alternative to this is to only use vertex snapping to insure that the vertices are exactly in the same place, and after applying the modifier use the 'remove doubles' command to effectively merge any coincident vertices. Note that if you set the distance for merging to high, it may merge stuff you don't want to intend. This is especially important with scaling arrays with very small elements.
Step 3: Apply Subdivision Surface Modifier
1. Apply Subsurface Modifier: To get an idea of what the final model will look like, apply a Subdivision Surface modifier, which smooths out the mesh. If the 'merge' check-box in the array modifier panel is not active, the subdivision surface will cause the elements of the array to shrink in on themselves, leaving a bunch of disconnected meshes.
By changing the number of subdivisions in the Subsurface modifier panel ('view' is the important one here) you can refine the smoothness. Having too few subdivisions might result in visible facets in the 3d print. Having too many often results in huge numbers of faces, which can slow down blender and post processing steps. 2 or 3 is usually good. If the length scales of the faces are close to the minimum length scales that the 3d printer can resolve (i.e. the resolution) then there is no reason to have more subdivisions.
Step 4: Solidify the Shape, Apply the Array and Solidify Modifiers
1. Add Solidify Modifier: Right now the model is a surface. It needs to be a volume, represented by bounding surface, in this case the mesh. Add the solidify modifier and chose a thickness that looks sturdy but not excessive for the 3d printer. Since the array is scaling, features can get really thin.
2. Insure Correct Modifier Order: Make sure the order of the modifiers, from top to bottom, is 1) Array 2) Solidify 3) Subsurface. To change the order the modifiers get applied, click the little white up or down arrows. Try changing the order and see how that changes the shape. (I wasted a bunch of time initially because I had solidify first and had to do extra manual editing to make sure the shape had a single, connected inside. Sometimes I find it's better to start a model over completely when I realize there is a more efficient workflow!)
2. Save: It is extremely useful to save a copy of the model that still has the modifiers. This is like the genetic code of the shape, and if someday you want to edit the shape or see how you made it this file will be handy.
3. Apply the Array and Solidify Modifiers: Hit 'tab' to go into object mode, since modifiers can only be applied in object mode. Click the 'Apply' button to first the Array, then Solidify. Now when you enter edit mode for the 'cube' you will see that you can drag each vertex of the shape.
Step 5: Crease the Base Edges
In order to successfully print the shape on Ember, an SLA (sterolithography) printer, I knew from experience that it would be good to have a perfectly flat surface so that the object could stick to the build-plate. The subsurface modifier makes everything rounded and smooth, so...
1. Select the Edge Loops: In edit mode, with edge-mode active, select one of the edges of the base of the shape while holding 'shift-option.' This will select the entire loop, which is super useful if you are dealing with a mesh with tons of edges.
2. Set the Crease value: Type 'n' to toggle the visibility of the 'properties shelf,' a panel on the right side of the 3D-window. At the top of this panel is the 'Transform' drop down thingy. Set the Mean Crease value to 1.00. This will turn the selected edges magenta. Try setting the subsurface modifier visible, and you will see the effect.
Step 6: Apply Subsurface Modifier, Export Stl
1. Apply the Subsurface Modifier: Switch to object-mode and apply the subsurface modifier, with your preferred number of subdivisions. Now you have created the final mesh! Do a double check that everything looks nice, toggle 'z' to see in wire-frame mode, which will make it easier to spot weird internal features.
- Hit spacebar and type 'select non manifold,' which will highlight edges that have more than two faces on them or edges that only have one face. Both of these cases will mess up your mesh, so if you find some you must remove extra faces, or fill holes. It is much easier to deal with these problems before the modifiers have been applied. Use undo to get the subsurface modifier back.
- Type 'a' to select all the vertices/edge/faces. Switch to face mode (command-tab), and then hit spacebar and type 'remove doubles' to remove any double vertices. It will tell you how many were removed up at the top. If it says zero, very nice.
2. Export Stl: To export from Blender hit the space-bar and type 'export stl.' The .stl file format is the current standard file format for 3d printing.
Step 7: Mesh Mixer Stuff
MeshMixer interface: Left-Click drag to rotate around model, hold 'option' and middle mouse button to pan, scroll wheel to zoom. If the model disappears go to menu bar -> view -> recenter view.
1. Import to MeshMixer: Fire up MeshMixer and import the stl you just exported from blender
2. Orient and Scale Part: Click the 'Analysis' icon in the left hand pane, and click the various arrows to get the model's flat face parallel with the horizontal plane.
3. Select Printer: Click the 'Print' Icon and select the printer, in my case Autodesk Ember.
4. Scale the Object: Click the 'Transform' button, and then 'Fit to Build Volume' to make the object as big as possible. Ember's build volume is 60mm x 40mm, and to make sure the model will fit I reduce the largest horizontal dimension by 0.1mm, just to be safe. (60 --> 59.9). Click 'Done'.
Step 8: MeshMixer Support Structures
Any sufficiently overhanging part of the model is likely to fail, since a layer at that spot includes a disconnected region which will just float away from the model after being solidified (this is SLA specific).
1. Set Support Settings: Click the little wrench/screwdriver icon next to 'Add Supports'. Set Y-Offset to 0mm, to keep the flat base on the build platform. Set the angle thresh to 19. Under 'Advanced Support' check 'Allow Top Connections.` Also in advanced support set 'Strut Density' to ~70. Set Optimize to something like 30. Go here to get an idea of what 'Optimize' means in this context.
2. Generate Support and Iterate: Click 'generate support.' The created structures may not look the way you want. Perhaps you imagine needing more supports, or needing to support larger patches of overhangs. Click Remove Supports, change some settings as you see fit, and do some iteration.
3. Remove Horizontal Spans: Unfortunately MeshMixer puts in some horizontal spans, which will not print well, since they are also overhangs. Hold command (I am on mac) and click the span to remove. There is no 'Undo' so be careful.
4. Manually Add Support: Click a region of an overhang to generate a support touching that point. Or click and drag an already existing support to add strength to supports or touch another part of the model.
5. Export Stl: Once it looks well supported, click 'Done' and export it.
Step 9: Print It!
1. Go to EmberPrinter.Com and make an account or sign in
2. Load the Stl File: yar
3. Fiddle With Settings: (See image) The settings I found that worked may be unique to the printer I used. Many people seem to have different ideas of how to deal with settings on Ember, so certainly take my viewpoint with a grain of salt. In general I have found that if layers of the print seem to be stuck to the resin-tray window, decrease the exposure time of the model layers slightly, like by .5 seconds. Conversely, if layers are getting smeared around on the part, like a stack of cards shifting about, increase the exposure time. It may be that this idea is completely backwards but it might be a place to start.
4. Check out the Layers: Scroll through the layer images. If you find only circular dots and nothing that looks like the model, it may be that the normals, which specify which side of the mesh is inside or out, might be flipped. Go into Blender and select the mesh, go into edit-mode, hit spacebar and type 'normal'. You can flip normals or make them consistent. Good normals should make the shading of the mesh look realistic (ish). If the shading is inverted and wonky that suggests flipped normals. A visual of a normal: http://en.wikipedia.org/wiki/Normal_(geometry)
4. Print! If the layers look good print. If something goes wrong check out 3, and start using the scientific method to troubleshoot. (that was really a suggestion to myself).