Otis / Otto muscle sim collapses on first frame

   571   7   2
User Avatar
Member
65 posts
Joined: 2月 2016
オフライン
I used the muscle transfer recipe to successfully transfer the muscles, bones, proxy mesh and rig to my character. However, on the first frame of the muscle sim, the muscle's instantly turn to nans. I have stepped through every sop but am kind of at a loss. Any suggestions on where to look would be helpful. Thanks.

edit: When I disable collisions, the behavior goes away, but obviously that's not a valid workaround.

h21.0.470 build.
Edited by jarjarshaq - 2025年11月25日 14:40:48
User Avatar
Member
65 posts
Joined: 2月 2016
オフライン
As a follow up. I've paired the muscles down to just a few and found that some muscles don't nan and some do. Here's an example of a muscle that does nan, "L_pronatorTeres". As soon as the solver progresses to the second frame, the geo disappears into nans.

Attachments:
muscle_rest.jpg (88.7 KB)

User Avatar
Member
65 posts
Joined: 2月 2016
オフライン
For now I have a solution. I adjusted Max Size to .009 (default was .01) on the muscle solidy in the muscle_setup1 subnetwork.
User Avatar
スタッフ
48 posts
Joined: 6月 2024
オフライン
Are you on Windows? We've been seeing this reported on Windows machines, but it works fine on Linux. We are looking into it.
Liesbeth Levick
Technical Director: CFX
SideFX
User Avatar
Member
65 posts
Joined: 2月 2016
オフライン
Actually I am seeing this on Linux. My home box is windows on h21.0.510 and no issues.
User Avatar
スタッフ
48 posts
Joined: 6月 2024
オフライン
Oh interesting, what distro and what are your machine specs?
Liesbeth Levick
Technical Director: CFX
SideFX
User Avatar
スタッフ
826 posts
Joined: 7月 2006
オフライン
We've seen cases where the geometry created by the Muscle Transfer process contains very, very small tetrahedra (on the order of 1e-15), which can lead the solver to become unstable with floating-point precision.

One thing to try is just delete any incoming tets below a certain threshold. They are so small they often make no difference in the appearance of the sim. Try a Primitive Wrangle with the following code:
if(primintrinsic(0, "typename", @primnum) == "Tetrahedron" &&
   primintrinsic(0, "measuredvolume", @primnum) < 1e-10)
   removeprim(geoself(), @primnum, 0);

And put this below both the incoming muscles and fascia setups, as in the green "remove_tiny_tets" nodes below:
EDIT: Actually all the outputs from the `muscle_setup` node should likely be re-routed through `remove_tiny_tets`.
Edited by johner - 2025年11月28日 17:43:00

Attachments:
remove_tiny_tets.png (86.3 KB)

User Avatar
Member
65 posts
Joined: 2月 2016
オフライン
Liesbeth_Levick
Oh interesting, what distro and what are your machine specs?

Rocky Linux 9.6
CPU Intel i9-12900KF
GPU Nvidia 3090 Driver version 580.65.06 Cuda Version 13.0
  • Quick Links