Jump to content

Skinwrap


meshsmooth

Recommended Posts

Actually I think there is more to this skinwrap thing than we initially thought.

The problem with the point mode of the lattice sop is that it is too crude. All it does is look at the vector that maps the rest point to the deformed point and then transforms all the captured points by a weighted amount of that vector. The problem is when something is rotated in world space what you really want is the weighted blend of the transforms. Otherwise when you rotate the low res mesh by 180 degress all the points get pushed through themselves.

So really this skin wrap thing must either have the same limitation or it must work more like a "bones" capture and deform where it is actually drilling right down to the transform matrix for each point, or at least to each parent of each point that the low res mesh is deformed by.

Either that or it needs some way of normalising the weights so that even points which are only partial captured get completely deformed rather than half hanging back at their default positions. It's hard to visualise if this would work without trying it, but watch this space as I will be.

I'm actually looking at something similar at the moment in order to do some skin deformation, I'll let you know if I turn up anything useful. In the menatime I think the exchange "skinwrap" will have to be retired.

Link to comment
Share on other sites

As I moved that arm about I felt there was something that is critical not here and the transform / no rotation sounds rite on the money. But at least the last part of the max demo of transferring the skinning from one object to another is doable with the attribute transfer sop.

Link to comment
Share on other sites

I think in the case of doing bone capture and deform, attribute transfer is in fact the answer. Transfering all the capture data from the low res to the high res and then doing the deformation as normal with a deform sop seems to work very well.

see attached

att_skinwrap.2.zip

But for more general cases I wonder if it would be possible to extend the lattice and wirecapture ideas. I'm pretty convinced now that in order to get this to work you need to either store or have access to the transform matrices, but I suspect this might be tricky since in so many cases this isn't available. I guess it all depends what goes on when sops cook, and frankly that is beyond my knowledge at present.

I definately think this requires more looking into, Sesi should really take a good look at this they might very well be missing a trick here.

In the meantime because of attribute transfer and the general procedural approach of houdini swapping different res models isn't exactly difficult...

And when rotations aren't happening the lattice sop can be used.

.

Link to comment
Share on other sites

I think the problem is that your high-res cloth will still end up deforming like low res?

14641[/snapback]

Since each point supplies only a weighted effect I wouldn't have thought so.

And say you want to pile up a big heap of cows which don't deform much, maybe they are rubber cows, you want the general shape of the cows to interact but there is no point in using the high res mesh to do the sim, surely you would use a low res one and then get this to deform the high res one?

Link to comment
Share on other sites

The attribTransfer is the way to go. That sop is really amazing, a tad slow at times, but you can really do a bunch of stuff with it.

I've put my response from the sesiForum here as well. Maybe it will get 'more' traffic :)

One way to get that transformation would be to have an coordinateSpace frame of reference on the deformed and on the rest. That difference will give you the information you are looking for. I've done this in the past with complicated networks where I set up a number of deformSOPs and made them deform something I set to be "N".

while this works the only sop which can deform these new vector attributes is the DeformSOP. I'm almost thinking that for the performance hit you could do so much more if every sop transformed arbitrary vector attributes like a normal.

I'm sure you could do some VexSOPs to get you part way there, but it would be faster if it was internally solved.

Sound crazy?

Link to comment
Share on other sites

Attribute tranfer rocks :D , in fact it produces better results than I could of imagined. It doesn't seem to suffer from the problems of either lattice or wire deformers. Well worth a look, I think I might ressurect skinwrap with attribute transfer , check it out.

att_trans_skinwrap.2.zip

It's also a crazy use of the rest sop too :blink: as it doesn't store the rest but the deformed position, ha, ha bet they never saw that one coming.

The only down side to this is the loss of per point radius, however I think the answer to this is in making my own attribute transfer sop in VEX using point clouds, it can then have the radius parameter overriden on a per point basis.

Link to comment
Share on other sites

Ok, my final solution now uses my attribblur vex sop, now there's a leap :rolleyes: , basically because it works much like attribtransfer but uses point clouds, and because it's vex you can have per point radius back...

It's still better to use attribtransfer and deform it you are doing stuff directly with bones, but this can be used in other situations, and heck it's a very interesting use of Houdini to solve a problem.

Proving once again there ain't much you can't do with it if you put your mind to it.... :ph34r:

att_blur_skinwrap.2.zip

Should have done this as diary thingy....

Link to comment
Share on other sites

Ok, phew, this is turning into an epic, who started this anyway.... :P

Right try this, it's just a test at the moment and needs cleaning up, but I think this might be the answer.

It uses frames of reference at each point to create a transform matrix that maps the rest to the deformed mesh. Hopefully this will better preserve the detail in the surface and won't suffer from problems when rotations are involved, needs more testing though.

FOR_skinwrap.2.zip

Link to comment
Share on other sites

The problem with all these methods is that you always end up averaging something because you are collecting information from a large number of points, many of which are quite a long way from the point you are interested in and so in the end you loose some of the detail from the high res mesh. The only way I can think of to fix this is to do the deformation on a capture frame and store the difference between the "smoothed" out version and the original and then add it back on after the deformation. A bit like do normal map displacement for rendering high res meshes from low res ones. The other option is perhaps that the FOR (frame of reference) can give us more information than just the orientation and so I can maintain the detail better, not sure how yet though. Ideas are welcome.

I'll try out the stored detail idea, but I think that as far as I can see skin wrap in MAX must be using different methods in different situations, I don't think there is one solution that works for all cases. If a character has bones in it, it must be transfering the capture information much as you can do with attribute transfer and then you do the deformation as normal, and in the case of arbitary deformations it must be doing something like I am trying here.

Does anyone who uses MAX have a better idea for what is actually going on with it?

Link to comment
Share on other sites

  • 1 month later...

I checked the wrap thing in MAX 7 and i think Maya offers bettter solution ( i know that similar statements sound silly, please apologize me about thath) - this is just my opinion.

Maya's wrap deformer works in this way - when it is applied over some geo, Maya creates referenced copy of that geo shape ( parented as secondary shape under the transform above the original shape ), later Maya will use this referenced copy to computate the result deformation ( it compares positions, orientations, rotations, perPoint distances, etc ).

The wrap deformer itself uses perPoint Radii approatch. if you apply more than one wrap deformer to given object then the deformation will be additive, also you can add more influence shapes to the current wrapNode and in this way the deformation result by all them will be normalized.

hope this will help you with something.

EDIT: huh, i forgot to mention that Maya creates referenced copy for the influence shape ( used as wrap deformer ) also

Link to comment
Share on other sites

Yeah, that's basically what I ended up with. But decided that Houdini has much better ways of handling this sort of situation anyway, so in the end you don't really need a wrap deformer in Houdini. Interesting exercise though. It also lead to some interesting ways of doing skin deformations with muscle primitives. :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...