Otis solver questions

   1293   4   2
User Avatar
Member
10 posts
Joined: May 2018
Offline
Hi,
I’m starting to experiment with Otis, and I came up with a couple of questions.

- In the Otto recipe, after the “Muscle flex” node we have the “Muscletension” attribute ready to tell the simulation when the muscles need to flex. But in the next node “Otisconfiguremjscleandrissue” that attribute is cleaned up. Should we put it under the “cleanup” section, so it’s not removed or how does it work?

- In my test I put the attribute in the “cleanup” section so it’s not removed, and then I was visualizing the attribute after the sim and I found the values are just static, that confused me. Shouldn’t they be the same or am I missing something?

- I noticed in the Otis solver there is a “velocity damping” parameter. Is there a way for velocity blend? I was testing on some fast movements. With 40 substeps I was getting some drag deformations. When I increased to 150 substeps it looked great, but the sim time went from 30 mins to 2 hours. Just trying to figure out a middle ground.

- I was testing running Otis on a machine without gpu, and the simulation was really slow, going from 15 seconds per frame on a gpu machine to 12 minutes per frame without gpu. Is there a way to optimize that on a machine without gpu?


Thanks a lot
Edited by DobleDe - Jan. 8, 2026 16:47:25
User Avatar
Staff
133 posts
Joined: June 2024
Offline
Hi DobleDe

That is an understandable point of confusion. What the Otis Configure node is doing is using the "muscletension" attribute to create a "fiberscale" attribute on the muscle constraints. The Otis Solver itself doesn't use it. The reason why "muscletension" is static if you exclude it from the cleanup is because of a timeshift inside the Otis Configure on the incoming geometry (the "fiberscale" is created from the non-timeshifted attribute though, so it isn't static). I myself have experienced how frustrating this is for troubleshooting though, so we do want to add an option for allowing time-dependent attributes to be output from the Otis Configure node at some point in the near future. For now, if you want to be able to see the "muscletension" attribute in your simulation, I would use an Attribute Copy SOP after the Otis Configure SOP with the Muscle Flex as the second input, and set the destination group to "muscle_points".

Unfortunately there isn't a velocity blend option in Otis. Your other option is to decrease the damping ratio on your muscles and tissue, to decrease the drag effect. This is a known issue with the damping in the Vertex Block Descent algorithm used in the Otis Solver, and our Otis developer is working on a solution for this.

If you're using the Otto recipe, the "Rest Shape" toggle is enabled on the Otis Solver under "Update Constraints from Target". This isn't necessary unless you changed your rest lengths to something other than 1 anywhere. Turning this off might give some speed gains, but seeing as it only updates per frame and not per substep, this probably won't give major gains.

Otis on a CPU is expected to be about 8-10 times slower than on a GPU (from our own tests). However, we have had users reporting much higher discrepancies. Please submit a bug report to SideFX with the specs of the GPU machine and CPU only machine. This is outside my field of expertise, but it might be related to Houdini environment variables set on the CPU only machine as a workaround for driver issues.
Liesbeth Levick
Technical Director: CFX
SideFX
User Avatar
Member
10 posts
Joined: May 2018
Offline
Thanks a lot Liesbeth! This was really helpful.
User Avatar
Member
51 posts
Joined: Oct. 2020
Offline
Liesbeth_Levick
Unfortunately there isn't a velocity blend option in Otis. Your other option is to decrease the damping ratio on your muscles and tissue, to decrease the drag effect. This is a known issue with the damping in the Vertex Block Descent algorithm used in the Otis Solver, and our Otis developer is working on a solution for this.

Hey Liesbeth! How would you go about simulating a setup where the animated input is faking a slowmo moment? When I keyframe the time scale to match the slowmotion moment the inertia of the incoming animation pretty much coming down to a halt makes the muscle want to overshoot.

I noticed there's a new velocityblend option in 22 on the otisconfiguremuscleandtissue node but no matter what settings I put in there The muscle still wants to overshoot.

Any tips would be great! Cheers.

Attachments:
houdinifx_IX0EmyletS.mp4 (1.4 MB)

Enrique De la Garza
CG Supervisor @Frame48
User Avatar
Staff
133 posts
Joined: June 2024
Offline
This isn't a scenario I've had a chance to test yet, so it would be very helpful if you could submit a file to support for me to look at. The Velocity Blend is designed more for helping the muscles to move with the bones and not lag behind them, so I don't know if that would help with overshoot. Have you tried the Velocity Damping setting on the Otis Solver itself under the Forces tab? Another option would be to try the "Constraints Only" damping method - but that would require changing all your damping values to be much higher - along the lines of what you'd use for Vellum for damping.
Liesbeth Levick
Technical Director: CFX
SideFX
  • Quick Links