I wanted to make a Grill, for a model, and made it from a Honeycomb Mesh which was in an Add-ons (Add Mesh: Extra Objects). Placing the Honeycomb mesh was no problem, but i wanted to make it rounded, but the Modifier "Simple Deform" doesnt bend it on the X Axes.
4$\begingroup$ Please clarify what effect you're trying to achieve. "Correctly" can be very subjective. :) Is my answer on this question helpful? $\endgroup$– Reinis MazeiksJan 19, 2018 at 21:32
$\begingroup$ @PandaX please add an image that illustrates what you are trying to do. $\endgroup$– user1853Jan 20, 2018 at 16:38
$\begingroup$ related: blender.stackexchange.com/questions/34598/how-to-curve-my-mesh $\endgroup$– user1853Jan 20, 2018 at 16:40
Unfortunately the original question doesn't tell us much about the desired effect, but it does point out something:
"I wanted to make it rounded, but the Modifier "Simple Deform" doesn't bend it on the X Axis".
So how do you control the axis for the Simple Deform>Bend modifier then?
Why would the developers put an option that reads Axis, Origin?
Because another object or an empty can be used to determine how the modifier works.
Adding an empty, it can be used to control the axis for the deformation. Rotating the empty you make honeycomb bend in different ways.
For example Rotating the empty 90 degrees will do this:
Further rotating the empty 90 degrees on the Z axis make the deformation in a different direction.
How do you know then which direction is the deformation going to occur? If you look closely at the images posted you will notice that the deformation is happening on the Local Z axis of the controlling object.
From the blender manual:
Origin The name of an object that defines the origin of deformation (usually an empty). This object can be:
Rotated to control the axis (its local Z-axis is now used as the deformation axis).
Translated to control the origin of deformation.
Scaled to change the deform factor.
When the object controlling the origin (the one in the Origin field) is a child of the deformed object, this creates a cyclic dependency in Blender’s data system. The workaround is to create a new empty and parent both objects to it.
Check this this question here creating a spherical array. It uses duplication methods in the object panel to array the other objects on a mesh, you could use faces instead of verts.
- Add an icosphere
- Change the subdivision levels by pressing f6 to bring up the menu
- Go into edit mode and select all the faces.
- Press Ctrl+B to bevel and while in the bevel mode, press V to bevel only the vertices, eyeball the ratio to make the faces as equal as possible.
- Select all the faces again and press I to inset all the faces, while in the inset mode, press I again to inset individual faces.
- After inseting, delete the faces.
This method is poor and inconsistent as some of the faces remain unequal and distorted. While you can use the duplication method to array the hex mesh onto a sphere, the array would still remain separated and some places would still have distortion. I'm sure the animation nodes add-on or sverchok could easily do it, but I have no idea how to do it. You can try editing your question to make it suitable for animation nodes, that way it would attract more people to answer your question specifically pertaining to the animation nodes or sverchok.
A couple of options come to mind.
First is to use a cage deform modifier of some sort, like a lattice or mesh deform modifier. This will give arguably the best results, and will give you the most control over the output, but is the hardest to set up.
The mesh deform modifier will give you more control than the lattice as it allows for more shapes, so I would recommend that method for bending your grill. What you want to do is make a cage mesh around your grill, and a cube that is resized to nicely fit your grill with some added edgeloops will work great for that. Then add a mesh deform modifier to your grill, select the cube and click bind. This may take a while, but once its done moving the vertices of the cage mesh will deform the grill. If you have any troubles this way, make sure the cage mesh fully encompasses the grill.
Another tip for this method is to store all of the deformations of the cage mesh in a shape key. The reason for this, is changing the vertex count of either object will break the mesh deform modifier and make you have to rebind. A shape key allows you to very easily 'reset' the cage mesh, rebind, and get back to where you were. For example, if you find you need another edgeloop in your cage, you can add it, but the mesh deform modifier will reset. Then, set the shape key to 0, which will set the cage back to where you started, just with the extra loop added, then rebind, and set the shape key to 1 again.
Here's a setup using the mesh deform modifier, showing the before and after with the modifier and shape key settings used:
The other option, and maybe the best (as in easiest way to achieve what you want, not best or most controllable result) one, it to create a mesh that follows the curve you are going for, then ensuring it is very smooth (use a number of subdivisions) and then using the shrinkwrap modifier set to project. You may have to play around with positive or negative to get the results you want, but it should work well.
The one thing to keep in mind is your grill will have to be 2D, so you will have to add a solidify after the shrinkwrap. If that isn't an option for you, you will probably have to use the first method. Another potential limitation is if your grill needs to be very curved. If it is, this method may cause excessive stretching.
Here's a setup using the shrinkwrap modifier (note the wireframe object is a just a slightly curved plane that has a subsurf modifier on it to make it smooth):
If the shape you want to get is not possible with Simple Deform even with the help of Empties, than you can use a lattice object and the lattice modifier. If more control is needed, you can even stack a ShrinkWrap to project it into another mesh.