Otis solver external collisions

   520   4   1
User Avatar
Member
65 posts
Joined: Feb. 2016
Offline
How do you setup external collision? For example a medicine ball hitting the character's belly.

The docs only say:

Unlike Vellum, there are only two inputs to the solver, one for the Geometry and one for Constraints. Currently, any collision geometry must be pinned simulation geometry.
Edited by jarjarshaq - Nov. 26, 2025 18:25:03
User Avatar
Staff
64 posts
Joined: June 2024
Offline
Specify a group for your external collider, then merge it with the bone input. After your Otis Configure, put down a point wrangle that runs over that group with the following snippet:
i@collisiongroup = 10;
i[]@collisionignore = {0};

Furthermore, your collider must have a `tpose` attribute, and be triangulated.

On your Otis Configure node you'll want to make sure that the Bone Group field excludes the collider, so that it doesn't have any constraints created with it, although if your collider is far away on the start frame then that probably won't happen anyway.

I'll look into updating this on the docs.
Liesbeth Levick
Technical Director: CFX
SideFX
User Avatar
Member
7 posts
Joined: May 2018
Offline
Hi Liesbeth,
I’m wondering what is the snippet doing, why those numeric values? How do the Otis collisions work?
Coming from Vellum, I see this snippet is using integers instead strings.
Thank you.
User Avatar
Staff
64 posts
Joined: June 2024
Offline
For i@collisiongroupa value of 1 is used for muscles and bones, 2 is for the tissue core (aka fascia) surface, 3 is for the tissue outer surface. Everything else (internal tissue points not at either surface) uses 0. The value of 10 that I chose above is somewhat arbitrary. I could have gone for any number greater than 3, but I went for 10 so that if we decide to add more "groups" in the future, we have a buffer of some unused values. We've been considering putting the bones in a separate collision group for instance, so then 4 would be taken.

i[]@collisionignorespecifies which of the collisiongroup values to ignore as colliders. You always want 0 in this, as we don't want the internal tissue points to collide, so if it's only 0 it collides with everything else, if you want it to collide with only the muscles and bones, for instance, it would be i[]@collisionignore= {0,2,3};.
Liesbeth Levick
Technical Director: CFX
SideFX
User Avatar
Member
7 posts
Joined: May 2018
Offline
Really helpful, thanks a lot Liesbeth!
  • Quick Links