DobleDe
Jan. 8, 2026 16:46:05
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
Liesbeth_Levick
Jan. 9, 2026 10:57:55
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.
DobleDe
Jan. 9, 2026 12:41:19
Thanks a lot Liesbeth! This was really helpful.