I’ve been doing some research around using Omniverse in Crowd Simulations, and after looking into the UsdSkel API, I think there’s a great opportunity to leverage existing Omniverse features, converging them into a unique tool for Users, by adding support for (2) new features/workflows.
The UsdSkel API supports defining Rigid Deformations ( or more commonly known as rigid skinning ). This provides several benefits, storage optimization being one of them (since you dont define joint weights per-point, but, per Mesh), while the other benefit of Rigid Deformation is the ability to support Instancing, since the net effect of the UsdSkel Bone articulation is simply applying a transform to the Mesh. So, upstream workflows that define UsdSkel Animations, etc. can still be applied downstream while also allowing Instancing.
Achieving this feature alone would be a HUGE benefit in Crowd Sims - as you can easily populate a scene with thousands, and possibly millions of Crowd Agents ( via rigid deformation and instancing ).
The second feature request is more about Physx simulation than Crowds per-se - but Dismemberment is when a Mesh piece bound to a UsdSkel Bone is detached, freeing it from any influence of the bone. This now freed Mesh piece, turned into a Rigid Body would then naturally fall under Gravity and interact with other Colliders/RigidBodies in the scene.
Thanks for this. These are great ideas. I will pass them along to the team.
Thanks so much for your consideration.
Omniverse has alot of features that can contribute to a robust simulation environment in this space.
I’ve looked at Unity/UnrealEngine/Houdini for how they are doing Crowd Sims - all of these have more “mature” feature sets than Omniverse, in terms of managing state and triggers, etc. - but, what they all lack is, what is actually Omniverse’s strength - and that’s working at a very large scale.
Admittedly, deforming Agents per-frame is very costly ( its the only way you can ‘see’ what the Agent looks like ) - but, by removing deformation ( thru rigid binding ), you greatly reduce that per-frame cost, trading deformation for the articulation and instancing combo.
Houdini uses a circle radius to represent the Agent boundary at the surface intersection, and that circle radius is how Agent overlap is prevented during sim - this concept very nicely aligns with the Physx sphere primitive and how kinematic velocity is converted into surface velocity.
As you can probably tell, I’ve been doing alot of research and thinking about this subject.
Physx already has the concept of Joint Breaking - and I did alot of testing trying to see if it could work - but, in terms of Crowd sim, you cant easily animate a Physx Joint - there’s just no tools to do that, in an intuitive, manageable way.
I guess in hindsight, if there was an easy way to animate Physx Joints - the problem would kinda solve itself…because Physx Joints are inherently Rigid by definition AND they already support Breaking (dismemberment).
What makes UsdSkel and UsdSkel Animations so attractive is, they are interchangeable, and Houdini has a very robust toolset for authoring them both.
Even if Physx Joints somehow became more easy to animate, you still need that interchangeability, where one would be able to take a Phsyx Joint Hierarchy and apply some canned Physx Joint Animation to it, similar to UsdSkel and UsdSkel Animations.