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.
Otis / Otto muscle sim collapses on first frame
830 8 2-
- jarjarshaq
- Member
- 65 posts
- Joined: Feb. 2016
- Offline
-
- jarjarshaq
- Member
- 65 posts
- Joined: Feb. 2016
- Offline
-
- jarjarshaq
- Member
- 65 posts
- Joined: Feb. 2016
- Offline
-
- Liesbeth_Levick
- Staff
- 49 posts
- Joined: June 2024
- Online
-
- jarjarshaq
- Member
- 65 posts
- Joined: Feb. 2016
- Offline
-
- Liesbeth_Levick
- Staff
- 49 posts
- Joined: June 2024
- Online
-
- johner
- Staff
- 826 posts
- Joined: July 2006
- Offline
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:
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`.
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 - Nov. 28, 2025 17:43:00
-
- jarjarshaq
- Member
- 65 posts
- Joined: Feb. 2016
- Offline
-
- Liesbeth_Levick
- Staff
- 49 posts
- Joined: June 2024
- Online
As of H21.0.555 both Muscle Solidify and Tissue Solidify Otis will warn you if you have tets that are too small for the Otis Solver to handle. You can either try the suggestions in the warning to fix it, or just blast away the "tiny_tets" group that is created in this case.
Liesbeth Levick
Technical Director: CFX
SideFX
Technical Director: CFX
SideFX
-
- Quick Links


