Obi Official Forum

Full Version: Any way to use volume constraints on a character
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
Hi, i've been trying various techniques to get the best breast physics, and ive found that the softbody physics do a poor job at preserving volume, so i want to test out the baloon volume constraint on obi cloth for it. However i notice that skinned obi cloth does not include it

Is there any way that i can use regular obi cloth to drive a small section of a skinned mesh, in a similar way to attaching obi softbodies to a mesh?
(20-04-2021, 05:27 AM)Hakazaba Wrote: [ -> ]Hi, i've been trying various techniques to get the best breast physics, and ive found that the softbody physics do a poor job at preserving volume, so i want to test out the baloon volume constraint on obi cloth for it. However i notice that skinned obi cloth does not include it

Is there any way that i can use regular obi cloth to drive a small section of a skinned mesh, in a similar way to attaching obi softbodies to a mesh?

Volume constraints require a closed volume for them to work. Character breasts are not closed since there's no sternum/chest wall behind them to result in a closed volume, so you can't use volume constraints with them right away. They would only work on the entire character's mesh, but characters are also not usually watertight volumes (there's holes in the mouth, eye sockets, etc), so that's also pretty unlikely to work on most meshes. That's why skinned cloth does not support volume constraints.

You could however model two closed "fake" breasts (like balloons, fully enclosing a volume) attach them to the character's chest bone, and write a script to drive mesh deformation using the simulated particle position's. This isn't trivial though.

kind regards,
Yes, i've actually set up the two detatched breasts with backs already and the results are perfect, but i have no idea how to have them use the skinned mesh bit as a proxy.

I wonder if it would be easier to have the normal of the seem between them to align instead?
I have good news and bad news.

Changing the normals along the seam between the baloon and the body in blender, and changing the settings to not change normal, removes the seam entirely.

The bad news is, the Obi Proxy has no option to turn off changing normals. So even if both the master or the slave would have perfect normals by themselves, using the proxy ruins the normals at the edge

I tried editing the proxy script to only change position, however even with that i noticed a tiiiiiny seam open up in the chest, where the verts between high res and low res proxy should be in exactly the same position

[Image: c1a79e072dcbf15cd656097509b9ce5d.png]

Do you have any advice to get that pinned vert to stay exactly where it should be when using a proxy? Perhaps a tweak i could make to the proxy script?
(23-04-2021, 11:25 AM)Hakazaba Wrote: [ -> ]I have good news and bad news.

Changing the normals along the seam between the baloon and the body in blender, and changing the settings to not change normal, removes the seam entirely.

The bad news is, the Obi Proxy has no option to turn off changing normals. So even if both the master or the slave would have perfect normals by themselves, using the proxy ruins the normals at the edge

I tried editing the proxy script to only change position, however even with that i noticed a tiiiiiny seam open up in the chest, where the verts between high res and low res proxy should be in exactly the same position

[Image: c1a79e072dcbf15cd656097509b9ce5d.png]

Do you have any advice to get that pinned vert to stay exactly where it should be when using a proxy? Perhaps a tweak i could make to the proxy script?

It's hard to figure this out just by looking at the image of the seam, but will do my best.

Proxies work by choosing the nearest master triangle for each slave vertex, and calculating the vertex's barycentric coordinates and elevation along the interpolated triangle normal. Then when the master triangles move around, the slave vertices are positioned using the coordinates calculated when they were bound to each other.

This means that even if you only change the position (not the normal) as long as one of the vertices in the master triangle moves, the slave vertices bound to it will also move, even if it's only a little bit.

This could be solved by having some master triangles near the seam completely attached. That would prevent them from moving at all, and hopefully remove that tiny gap.
The issue is that these verticies are already pinned. there is no seam in the low poly version, and the high poly has the same number of verticies along that seam, so theres no reason they should stray.

However the calculation doesn't seem to account for being in exactly the same position as one of the members of the base triangle. I need to make a modification to the proxy script which detects if the start slave vertex is in the same position as a master vertex, or perhaps a pinned particle, then bypasses any normal, tangent and position calculations if this is the case.

How would compare the two in the script? is firstVertex the closest vert to the slave vert? How do i get the origional slave vert position?
After looking into this a bit more, it seems like theres something off in the skin binding script. I think there is something off about the way it picks barocentric coordenates for a vertex. I can alter how much a vertex is effected by the master, by moving the vertex next to it to be closer to the triangle. 

The thing thats causing this seam, is that somewhere in the calculation of barocentric coordenates, if the normal of the slave is at a certain angle, then the vert will be given the coordenates as if it were entirely on the opposite side of the triangle.

High Poly Slave (Same number of edge verticies)
https://i.gyazo.com/8163456feac0f305e323...7d1c34.mp4

Low Poly Master
https://i.gyazo.com/c11a87d873d0218d75a5...675028.mp4
I have good news, i figured out a simple way to get what i want out of this. By leaving the seam unbound by not including it in any binding groups then parenting the mesh to the bone.
(25-04-2021, 11:11 AM)Hakazaba Wrote: [ -> ]I have good news, i figured out a simple way to get what i want out of this. By leaving the seam unbound by not including it in any binding groups then parenting the mesh to the bone.

Hi Hakazaba,

Glad you found a solution! This is similar to what I pointed out before, as it accomplishes the same: the vertices in the seam won't move as they're not bound.

Let me know if I can be of any help,
I just want to reiterate, that the boarder particals had a static pin to the chest this entire time. And the verts of the slave were exactly on them. There may be a bug in how barometric coords are decided
Pages: 1 2