0
$\begingroup$

I'm currently modelling a sofa. Each seat has two cushions, a horizontal one for sitting on and a vertical one for back support. Both have been deformed with sculpting and proportional editing to give them a used look.

I want one cushion to sit on top of the other with the bottom of the upper cushion deformed to fit the contours of the cushions underneath. So far I've been achieving that by placing the two meshes so they intersect, then pulling up the individual vertices of the upper cushion using snap to face so that they follow the form of the lower cushion. See included test render.

enter image description here

enter image description here

This works, more or less (as you can see from the included test render there are a few places where the two meshes still interfere with each other and the line vanishes), but is annoying and slow, plus getting enough distance between planes to allow Freestyle to draw a line without them looking like there's a gap is a process of trial and error. There has to be a better way of achieving the same effect. Is there a way you can get Blender to deform one mesh so that it fits properly against another?

I am aware that you can just push one mesh through the other, but I'm also using Freestyle on this project, and Freestyle apparently can't render lines where meshes intersect, so the two meshes have to sit flush to each other and not pass through each other or there will be no line in the final output.

$\endgroup$
2
  • 3
    $\begingroup$ Shrinkwrap modifier + using a vertex group as parameter for this modifier. Set the vertices that are supposed to be in contact in this vertex group. You can also tune the proximity (in the modifier settings) and the weights of the vertices in this group (weight paint). $\endgroup$ – lemon Feb 1 '20 at 18:24
  • $\begingroup$ Sounds good, but I'm still a newbie and don't know how to do most of that. I'd be happy to accept an answer that covered the how-to in greater detail. $\endgroup$ – GordonM Feb 1 '20 at 18:27
1
$\begingroup$

Use the Shrinkwrap modifier with vertex groups. Select the cushion you want to deform add a shrink wrap modifier, in the target option select the second cushion, change the order of the modifier to make sure the shrinkwrap modifier is below the subsurf modifier, then in edit mode (for the first cushion) select the vertices thats touching the second cushion and add them to a vertex group(go to object data properties, select the plus sign under vertex group, rename the group if you want, then with the desired vertices selected in edit mode click on assign), deselect everything and click the select button under the vertex group option to make sure only the desired vertices are part of the vertex group, then in the shrinkwrap modifier, under the vertex group options select the vertex group you just created. And you should be good. Just make sure not to move the second cushion cause it is using it as a reference, if you do the first cushion would get distorted.

$\endgroup$
1
  • $\begingroup$ Took a bit of messing around because the answer's lacking a bit of detail but I was able to figure out the important bits on my own after this, so thanks. $\endgroup$ – GordonM Feb 7 '20 at 20:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.