9
$\begingroup$

I have seen other similar questions but they don't seem to be what I want, please correct me if I'm wrong.

For simplicity: delete the default cube, NumPad7, add cylinder, rotate X 90, then add torus with ext/int 1/0.75 and raise it above the cylinder. It should look like this:deform.

What I want is to deform the torus against the cylinder, but make it as if it's a projection. This means that, when looked from above, it will look like a normal, undeformed torus (volume changes), but when viewed with NumPad1, it will look like a round-end tube following the curvature of the cylinder, while still having the same round cross-section. To make it worse, my object needs to be deformed by a more complex surface, such as sin(x).

If I'd use soft body, it will look shrinked when looking from above, i.e. it will preserve the volume. If I use shrinkwrap, it either does a projection with its circumference intact, but all flat, or it will project it (similar to what I want), but only the bottom side vertices, like a curtain.

Mesh modifier gets me nowhere since I have to manually tweak the surrounding mesh, and curve modifier also preserves the length/volume, while also squishing the section of the torus at the bending points.

My question(s): is there a way to project (mold) the torus onto the cylinder while preserving it's cross-section? Can this be extended for more complex meshes to be projected or to be projected on?


This is, roughly, what the side view (along Y axis in the 1st pic) would look like after the deforming of the torus:

after

The unselected shape above is the torus (as it is in the first picture), and the selected shape is what it would look like after the deform, or molding, whatever you want to call it.

And here is what it would look like when seen from above (top view, along Z axis)): https://i.sstatic.net/HVOCo.png (can't add more than 2 pics)

The view would be the same before and after the torus is deformed.

$\endgroup$
1
  • $\begingroup$ I don't want to cut anything, I'll update the question with a sketch of what I want. $\endgroup$ Commented Mar 14, 2016 at 14:50

6 Answers 6

8
$\begingroup$

Create a lattice that has no depth, and is as large as the torus and place it near the torus, where you want it to make contact with the cyclinder:

enter image description here

On the torus add a lattice modifier and select the lattice as control object:

enter image description here

Select the lattice and add a shrinkwrap modifier with the cylinder as target, Mode project, and select the correct axis for the projection:

enter image description here

$\endgroup$
2
  • $\begingroup$ That's a nice workaround, but, unfortunately, it doesn't keep the cross-section intact. I tried to cheat by adding a second lattice and a second, larger cylinder, the difference being the torus' thickness, but it still doesn't work. I'll try to see where this is going, though, it seems promising. $\endgroup$ Commented Mar 14, 2016 at 17:29
  • $\begingroup$ Differently from what user1853 wrote, I can see that Blender 3.2.2 deforms a surface onto a cylinder if I click on Shrinkwrap -> Wrap Method: Nearest surface point, whereas it does not return any deformation for a lattice with the Shrinkwrap -> Wrap method: Project command. User1853 maybe will kindly explain why they used the Project command instead of Nearest surface point. $\endgroup$
    – user176704
    Commented Jan 2 at 0:58
6
$\begingroup$

The Curve modifier solution looks good, you could also try this one:

  • Create a plane behind your torus, subdivide it. Create a cube that encompass your torus like a cage, subdivide it.
  • Give your plane a Shrinkwrap modifier with the cylinder as Target. Disable the Display Modifier in Viewport option for the moment (eye icon).
  • Give your cube a Surface Deform modifier with the plane as Target. Click the Bind button.
  • Give your torus a Mesh Deform modifier with the cube as Target. Click the Bind button.
  • Enable the Display Modifier in Viewport option of the plane's Shrinkwrap modifier.

enter image description here

$\endgroup$
4
$\begingroup$

I think I might have found an answer, I was looking at the problem from the wrong direction.

The torus can be built by bevelling a curve, which can be pre-scaled to fit the length of the surface/curve/function over it's projected on.

The curve can have a shape as the bevel, which makes the whole process applicable to almost any shape.

Then, this generated bevelled-curve shape can have a curve-modifier, applied to a Bezier, or NURBS, or a converted mesh.

The minor downside (and the reason I say I "might" have found the answer), is that there is a slight deforming of the cross-section towards the ends of the curve, though not as much as in cegaton's example.

Finally, as an example, here's what a round-section, ellipse-torus looks like when bent over a gaussian bell-like curve (slight perpective):

result

$\endgroup$
3
$\begingroup$

adding a pinch of salt to @moonboots's answer blender-2.8

1 create torus

2 create cylinder beneath torus

3 create plane above cylinder and below torus

x0

4 create cube to bound torus/enclose it inside

x1

5 subdivide cube

x4

6 subdivide plane

x5

7 add a mesh deform modifier to the torus with the cube as target then bind

8 add a surface deform modifier to the cube with the plane as target then bind

9 add a shrink wrap modifier to the plane with the cylinder as target

x6

NOTE: the cylinder was rotated between 6 and 9 so the subdivision of the cube matches that of the plane other wise it wouldn't work as expected. Also target mesh for the shrink wrap modifier with more subdivisions/vertices produces a better wrap

$\endgroup$
1
  • $\begingroup$ This should be marked as the valid response from Blender 2.80+ $\endgroup$
    – Luis U.
    Commented Feb 22, 2021 at 13:11
2
$\begingroup$

The best I was able to get was using a Simple Deform modifier set to Bend. With the torus just touching the cylinder, adjust the bend angle until the torus just touches the the cylinder sides.

enter image description here

$\endgroup$
3
  • $\begingroup$ It's attractive as a simple enough solution but, even if it would work in this case (it doesn't, plus the cross-section gets distorted), I don't know what I'd do in the case of a sin(x) surface. $\endgroup$ Commented Mar 14, 2016 at 17:31
  • $\begingroup$ I don't think the cross-section does get distorted with this method. $\endgroup$
    – Xtremity
    Commented Mar 14, 2016 at 18:47
  • $\begingroup$ I couldn't bend it tightly across the cylinder and, as I increased the angle, it showed distortion. Maybe I did it wrong but, even if it did work and there were no distortions, this seems to be applicable only to a circle-type curve, which this simple example is made of. If the surface would have more bumps and/or irregular profile, it would not work. $\endgroup$ Commented Mar 14, 2016 at 19:29
0
$\begingroup$

If your shrinkwrapped object is of constant depth, adding a solidify modifier after the shrinkwrap will give it depth again. You can probably also achieve results for other shapes with creative use of other modifiers.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .