Mocap Model Muscle Wrapping

Hello,

I’m working on the Mocap model in AMMR 2.1 with AMS 7.1.

After Custom Scaling, some muscles penetrate the bone, I want to know how to change muscles to warp bone surfaces in Mocap model.

Any help would be appreciated!

Best Regards,
lee

Hi lee,

Surfaces used for wrapping are normally defined by points. When scaling is applied points move and the surface e.g. a cylinder change dimensions and location.
Surfaces in the leg are mostly defined using points on the surface of the bone so points selected in the region where the muscles are wrapping. There however also surfaces e.g. in hip region which are controlled by points not placed on the bone but in the “air”.

Which muscles do you see the problem on ?

Best regards
Søren

Hi, Søren,

The TensorFasciaeLatae muscles penetrate the femur bone.

image

Best Regards,
Lee

Another question:

If I want to add another wrapping surface on the muscle with a wrapping surface. What should I do?

AnyShortestPathMuscle VastusLateralisSuperior1 = {
AnyMuscleModel &MusMdl = …MusPar.VastusLateralisSuperior1Par;
AnyRefNode &Org = …Seg.Thigh.VastusLateralisSuperior1Node;
AnySurface &srf = …Seg.Thigh.RectusVastiiWrapSurf.cyl;
AnyRefNode &Ins = …Seg.Patella.VastusLateralisSuperior1Node;
SPLine = {
StringMesh = 45;
InitWrapPosVecArr = …VastusLateralisInferior1.SPLine.InitWrapPosVecArr;
};
AnyDrawMuscle DrwMus = {#include “…/DrawSettings/MusDrawSettings.any”
};
};

Best Wishes,
Lee

Hi Lee,

Concerning the TensorFasciaeLatae muscle it has no wrapping, in the standard model we have not seen this to be a problem, but i can see the problem on the image.

I think the solution would be to add a cylinder or sphere to the knee region of the shank.

Concerning the other question on how to add a surface to the wrapping, you need to do these three steps:

  1. Add the surface to the bone, make sure it is controlled by points, try to look at simular surfaces already defined
  2. Add the surface in the muscle, by making a reference to the surface.
  3. Change the init wrap pos vector to reflect the new surface

If there are one surface it may look like this
AnyMatrix InitWrapPos = {
transf3D({0*.srf.Radius, …Sign1.4.srf.Radius, 0.5*.srf.Length }, &.srf ) ,
transf3D({1.4*.srf.Radius, …Sign0.srf.Radius, 0.5*.srf.Length }, &.srf )
};
InitWrapPosVecArr = { &InitWrapPos};

If there are two surfaces it may look like this
AnyMatrix InitWrapPos1 = {
transf3D({0*.srf1.Radius, …Sign1.4.srf1.Radius, 0.5*.srf1.Length }, &.srf1) ,
transf3D({1.4*.srf1.Radius, …Sign0.srf1.Radius, 0.5*.srf1.Length }, &.srf1 )
};

AnyMatrix InitWrapPos2 = {
    transf3D({0*.srf2.Radius, ...Sign*1.4*.srf2.Radius, 0.5*.srf.Length }, &.srf2 ) ,
    transf3D({1.4*.srf2.Radius, ...Sign*0*.srf2.Radius, 0.5*.srf2.Length }, &.srf2 )
};

InitWrapPosVecArr = { &InitWrapPos1, &InitWrapPos2};

Hope it helps

Best regards
Søren

Thank you for your help sincerely, it helps a lot.