2
$\begingroup$

I've created this character which has those strips wrapped around their body. the character in their default poseIn addition to making a pattern of color on the character's silhouette, the strips also make some sort of frame for each yellow eyes placed on the body. the left shoulder eyeMy issue is that when animated via a rig, the strips don't act as I'd want them to.

First, the strips disappear into the body mesh when I pose the character. the strips getting under the character's skinSame with the eyes. the eye disappearing into the body - the pupil is not an actual problemIs there a way of telling Blender to treat the sum of the meshes in the default pose as one mesh? Is it a weight paint issue kind of situation? What I've done was selecting the body, all the strips and eyes and then shift selecting the rig to parent them. I've tried to join the meshes into one object before parenting the whole thing to the rig but got similar results.

Second, about those eyes placed on the character's body. When I bend the knees or shoulders of my character, the strips go haywire, the contour of the eye they were forming get deform big time. the knee eye frame going haywireWhat I want instead is having those eyes follow the knees and shoulders without getting deformed. Should those eyes be solid independant object parented directly to the corresponding bone in the rig rather than meshes that get deform like the rest of the body? The thing is those eyes are design on arms-extended-shoulders and straight-legs-knees and I thing their general curvature need to change a bit to adapt the new topologies that would be bended knee and arm along the body. the curvature difference between the two extreme states of the shoulderWhat is the best way to make this work?

EDIT#1 : You can download the blender file here : https://wetransfer.com/downloads/ee218f5eb1922adf887edcccbcaf461a20230209103118/e6fee73f1b6e23087b5f88280f6c161c20230209103149/9105d8

EDIT#2 : Use a Data Transfer modifier, moonboots said. Didn't know about it, educated myself, clever idea, did not work. So I'm back on the strips-being-part-of-the-body option.

So I did some tests and this where I am : enter image description here

  1. is just the base mesh I used for the test.
  2. is the base mesh parented to the armature with the strip added in edit mode afterwards.
  3. is the same as 2 but with the strip weight painted after the parenting.
  4. is the base mesh with a strip added in edit mode with the whole thing then parented to the armature.
  5. is the base mesh with the strip extruded directly from it's surface

Option 2 obviously doesn't work, 3 is super tedious (hence the buggy result), 4 is a joke that I'm not even going to concider and option 5 would be excruciating for this number of strips, especially considering the fact that the topology of the body has nothing in common with the path of the strips.

I don't understand why this is so complicated to get working. It's strips around limbs. Going with option 5 means spending a lot of time recreating a topology that I've already spent a lot of time making and that already exists. It's right there. But there's just no way to tell Blender to simply treat all those meshes like one solid piece or tell the automatic weight paint to act as if it was. Boolean, Shrinkwrap, Data Transfer, CMD+J, nothing works.

Are shape keys compensating the deforming the best option I have left? Should I further educate myself on weight painting since option 3 is the closer to the desired effect?

EDIT#3 : Use a Surface Deform modifier, Nathan said. Didn't know about it, educated myself, clever idea, mainly worked. I'm very close to having this thing working. One issue, though. Does anyone knows why the render doesn't seem to render what the viewport is showing me? enter image description hereenter image description here Some strips have a Mirror modifier and I thought it was causing the issue by not being applied but that's not it. Any ideas?

You an download the new file here : https://we.tl/t-8XvyKq52ne

$\endgroup$
11
  • 1
    $\begingroup$ Hello, maybe you should make one unique object for the body + bandages? $\endgroup$
    – moonboots
    Feb 9 at 9:04
  • $\begingroup$ maybe share your blend file, because we have no idea how your mesh looks like, how you made it, what objects are in the scene ...and no idea what settings you made. So i would recommend providing (maybe simplified) blend file so we can check it out. $\endgroup$
    – Chris
    Feb 9 at 9:16
  • $\begingroup$ @moonboots, I tried that or so I think. I've selected all the meshes, joined them together before parenting the whole shebang to the rig (and got similar results). Is there another way to fuse them together (except actually modeling the body directly featuring strips and eyes) ? $\endgroup$ Feb 9 at 10:27
  • $\begingroup$ @Chris, yeah, I'm going to do that (see edit) $\endgroup$ Feb 9 at 10:28
  • $\begingroup$ Yes I meant merge the bandages with the body, that said maybe it works as 2 separate meshes if the weight is correct? $\endgroup$
    – moonboots
    Feb 9 at 10:30

3 Answers 3

2
$\begingroup$

Maybe try the Data Transfer modifier: Select a bandage, remove all its vertex groups, give it a Data Transfer modifier, choose the body as Source, enable Vertex Data and Vertex Groups, click on Generate Data Layers and apply. Also put the Armature modifier above the Subdivision Surface. If it still doesn't work well you can try to correct with some drivers and shapekeys. The last resort would be to make the bandages part of the body (extrude the bandages from the body mesh itself).

enter image description here

$\endgroup$
4
  • $\begingroup$ Not a success, edited my post $\endgroup$ Feb 10 at 1:42
  • $\begingroup$ @Doctor Famine OK so I don't know how you can do it, other than solution 5, but maybe someone will have a better idea $\endgroup$
    – moonboots
    Feb 10 at 9:21
  • $\begingroup$ @Doctor Famin You could try a cage that will be the object deformed by armature, and give a Mesh Deform modifier to the body + bandages, but I never tested that for a whole character $\endgroup$
    – moonboots
    Feb 10 at 9:27
  • $\begingroup$ I further my tests during the night and I do think the answer lies in the weight paint. I inspected the model (in its CMD+J state) in the weight paint mode and I clearly saw areas that need a few strokes. My new problem is my computer that seems to be unable to process that much bandages vertices anytime I try to paint. I really wish I had thought of saving my character when all the bandages were still curves. But I'm gonna try and understand what you just told me and experiment with that. Keep you posted. $\endgroup$ Feb 10 at 10:00
1
$\begingroup$

Your subsurf level doesn'r match between viewport and render, (probably because the bind depends on vertex indicies, and gets invalidated)

enter image description here

Quick fix is to set to 1, and add a second subsurf after the surface deform, with 0 and 1 as viewport and render levels

Better fix would be to just rebind all the objects from the rest pose after setting subdiv

Overkill fix would be to have one surface deform bound to level 1 only active in viewport and an other bound to level 2 only active in render. This could save some performance in the viewport

$\endgroup$
0
$\begingroup$

I figure I would give out the whole process.

1_MODELING

After having modeled the body, I started creating strips using Bézier curves with a bevel object, using alt-S to change the scale of the bevel object on each points and ctrl-T to change its orientation along the curve's axis. enter image description here

I then converted those curves into meshes before getting rid of the maximum of unnecessary vertices in order to keep the total number of vertices, edges and faces at a minimum. enter image description here

I don’t know if I used the best method to do this but I did was selecting certain loops by alt-clicking them and then using the Dissolve Edges deletion mode. I found out a bit late that you actually can shift-alt-click multiple loops in order to dissolve them at the same time as long as they’re not consecutive. enter image description here

2_SURFACE DEFORM MAGIC

Once all my strips (and eyes) were in place, I used a Surface Deform modifier on each one, choosing the body as the target.

enter image description here

Unlike what I’ve been told to do, I had better results when placing the Subdivision Surface modifier (if used) below the Surface Deform. enter image description here

Keep in mind, though, that the Surface Deform modifier is very sensitive to the number and positions of the mesh’s vertices. So anytime you make any change to the surface deformed mesh or target mesh, you have to go back to your default pose (likely in frame zero), unbind the target and then rebind it. Even the Subdivision Surface can confuse the Surface Deform if placed above so be careful having your Render and Viewport levels matching eachother if not doing a more subtle and complicated set-up. enter image description here

3_LAST STRUGGLE

The last bit of trouble I’ve encountered after all that, was those little patches of strips going under the skin again (!).

enter image description here

I figured it was because certain vertices that were deleted by me after the conversion of the curves into meshes should have not been, forcing the strip mesh to take shortcuts through the body. It was all easily fixable by going back to Edit mode and adding loop cuts and/or subdivisions to smooth things out locally, keeping the vertices count as low as possible without forgetting to unbind and rebind all the corrected meshes in the end.

And voilà, everything is working great!
 enter image description here

Thanks to everyone!

$\endgroup$

You must log in to answer this question.

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