Looking for advice on how to handle complex clothing

I’d be very grateful if anyone experienced in creating and binding outfits could give me some advice. I’m working with the Blender pipeline.

I have a character who requires a complex safety harness worn over their clothing. The problem is that it includes a lot of buckles and fittings that don’t share vertices with the underlying cloth mesh.

I was thinking of parenting the underlying waist belt (cyan color) to the hip bone, but the straps and shoulder pads need to be a cloth object so they bend to follow the avatar’s movement.

I’m trying to decide if I should try to join the buckles to the mesh, and weld a vertex to each item, or if I should leave all of the hard objects unbound, and try parenting them to vertices on the underlying mesh once I reimport the harness back into Blender.

I’m not sure that having the odd connected vertex would even work when I try to transfer skin weights from the avatar.

I don’t have too much latitude to change the harness itself, because it’s for safety training and must have all the parts that a real harness has.

I’m feeling very stupid and defeated, and I’d be really grateful for any advice.

I did some experimentation, and found that I could position and sculpt all the soft body stuff like the straps and the pads, then join the hard surface buckles to the mesh, one item at a time. I made sure that each buckle was welded with a single vertex - either at the center if it was on a continuous strap, or in the center of each end if it joined two straps.

I kept the waist belt and the large D-ring looks as separate meshes.

I then imported the harness mesh, the belt, and the D-rings into CC4. I positioned it and sculpted the underlying coveralls to make sure there were no collisions.

I attached the belt to the pelvis as an accessory, and turned the harness into a cloth object, and transferred skin weights to it. The D-Rings were added to other bones as accessories.

And glory be - it worked. I can attach screen shots if anyone else is struggling with this kind of messy accessory.

Attach any screenshots you think might be applicable. I’ve been thinking of doing something similar like this, but with a scuba suit.

The routine may vary from case to case, but this is what I usually do when I need to have a rigid objects (like buttons for instance) as part of the cloth AND it’s located somewhere in-between 2 or more adjacent bones.

I certainly do not convert to accessory because it’s kind of harsh to give it 100% influence from one bone or another, when it’s in-between them.

So I split the influence and do uniformly for all vertices of a particular rigid object and do it in Edit mode.

I basically look at all weight values assigned to a particular vertex of a soft mesh under (or closest to) the rigid object. For instance, I see that closest “soft” vertex has Spine01 - 0.62 and Spine02 - 0.38.
I then go to Edit mode, select ALL vertices for the rigid object, select Spine01 in Vertex Groups, type 0.62 in Weight box and click Assign. Same for the Spine02, select it, type 0.38 for the Weight and Assign.

Now that I have all vertices weights uniform for the object, it will not stretch or shrink when you animate the character. It still might not be perfect, but at least it would be a lot better than making an accessory out of it which is basically assigning 100% influence from Spine01 bone for instance.

But as I said this will vary from case to case and you have to make a decision: to leave it painted as is and have it stretch with animation, make it accessory and have it “fly” in/out of body, or have “in-between” solution I described.

1 Like

Wow, this is great stuff. Thanks for sharing it.

It’s amazing how few useful tutorials there are dealing with clothing characters in anything more complex than a T-shirt and a pair of pants.

Will do. A word of warning, though: I’m by no means an expert with this stuff. :wink: I’ll follow up with a couple of posts and screenshots a little later today.

1 Like

I ran into some problems, which I’ll relate, along with screen shots. I apologize in advance if some of the stuff I mention is too basic: I’m just learning how to use these tools.

I found that if I try to transfer skin weights to a complex mesh with non-contiguous objects, parts of the mesh tend to be left behind, or bind with weights too different to allow them to stay in place when animating. My first coveralls for this character were lazily built - with the reflective bands being separate meshes. They just stayed put at first, and though I tried painting weights in manually, I found it really difficult, and didnt’ seem to work well.

I ended up remaking the coveralls as a single mesh, and everything worked after that.

For the harness, I decided to try welding a single vertex between each separate part of the harness, so for example, if a buckle joined two straps, I would merge a single vertext on each end ot the buckle that corresponded to a vertex on the nearest strap. My reasoning was that the whole thing would be treated as a contiguous mesh, and the vertext weights would be more evenly spread.

This does mean that some rigid objects might deform slightly during animation - but I haven’t seen any really noticable distortion when testing the character after completing it.

To start with, sculpt the underlying clothing mesh and porition all the parts as separate objects - to minimize the stretching and deformation that can happen during sculpting. We don’t want little details on rigid objects to get stretched or distorted while moving things around.

Then join the objects to the mesh one at a time, and look for good locations to make welds. In this example, I’m starting with the front buckle of the harness:

I look for places where any distortion of the faces caused by welding vertices won’t be too noticeable - here I selected the middle of the face where the strap wraps around the center of the buckle. I subdivided each face to provide me with vertices that are close enough that they won’t have to be moved much.

It can be tricky working this close up in the mesh. I will often hide intervening faces (select and press “H”), and toggle X-ray mode on and off so I can see what I’m doing. Swithching between vertex and face selection mode can be useful as well. I got to be good at using the vertex (“1” at the top of the keyboard) and face (“3”) shortcuts to flip back and forth.

I drag the two vertices as close as possible (“G” to grab), so there will be minimal stretching.

I then weld the vertices using the Merge tool (“Mesh>Merge>At Center”, or "M, then “A”).

Note that doing this will play holy heck with your UV maps - because you’re creating new geometry and merging vertices between different materials.

I made sure in advance that I had every face assigned to the appropriate material ID. I found that simply unwrapping and hoping for the best didn’t work any more.

I ended up carefully marking seams where it made sense to unwrap them, and manually unwrapping all the faces for each material ID separately. This way it doesn’t matter if the islands overlap, and you can fill the map extents with each material.

I used a minimum stretch unwrap. Blender will complain that it can’t solve some islands in each case, because of the vertices you welded that now belong in two separate places on the mesh. However if you use the full extents of the map for each material and use the same unwrapping algorithgm for each material, this works remarkably well.

To help see what I’m doing, I hide all of the materials except for the one I’m working on. The final UV map will be an unholy mess of overlapping islands, but this doesn’t seem to make any difference to the final result.

I then exported my mesh as an .fbx file and brought it into Substance Painter for texturing. Here’s where I ran into problems. The issue wasn’t the welded vertices or the overlapping UV islands, but the mesh itself. I had started with someone else’s mesh, and they had applied a solidify modifier to the straps, then sculpted them. All of these faces very close together resulted in overlapping normals that caused rendering issues.

You can see all of these odd-looking dark squares when you attempt to texture the mesh.

I spent hours manually deleting hundreds of faces so each strap was simply a single mesh only one face thick. Character Creator seems to do better transfering skin weights to a mesh like this anyway, and I can apply a solidify modifier to the strap material in the final render.

This didn’t completely fix the problem: I discovered there’s also an issue with substance painter creating artifacts when baking ambient occlusion with some NVidia GPUs.

I suggest simply deleting the ambient occlusion maps from your materials if you are using substance painter. It doesn’t really make sense for harnesses and other accessories that are worn around a body in any case.

I finished texturing the model, and then brought it back into Blender for export into Character Creator.

When I imported the mesh into Character Creator I discovered another issue: when I textured my coveralls, I baked the textures to jpegs, because they were 4K textures. I had to mess around re-linking all the texture files but they worked in Character Creator.

Here, because I was only using 2K textures, I baked them as pngs, an discovered that Character Creator seems to have trouble reading them. Even after I relinked all the texture files, it insisted on displaying the vertex colors instead of the diffuse maps. At this point, I didn’t care: they look fine in Blender.

I exported the waist belt, harness, and D-Rings as separate meshes, and used the “Create Accessory” function to bring them in to Character Creator.

Even though the waist belt and harness are supposed to be connected, I felt it would work better if the belt was connected a the pelvis bone like a regular belt accessory. I used the “Transfer Skin Weights function” to convert the rest of the harness into a cloth accessory.

The belt and D-rings had already attached themselves to bones as accessories. I simply had to link the belt to the pelvis instead of the hip, and update the parent bones and pivot points on each object.

I then ran some animations to test how well everything conformed. It seems to be pretty good.

1 Like