Softbody simulation

Hello everyone,

I have just started with Isaac Gym not too long ago. I’m trying to start by playing around with script to simulate soft bodies. It seems to me that the input mesh has a form of .tet, which is quite confusing. Thus, I would like to ask for two things:

  • Which format besides .tet is used for soft bodies? If .tet is the only acceptable format, which tool should we use to generate this format?
  • Is it possible if the developer provides primitive objects such as a cube, or a rectangular box .tet mesh? That would be really nice.
    P/s: I enjoy the Isaac Gym so much so far :)

To follow up my question, I tried to manually generate a .tet file based on the output mesh I got from a tetrahedron mesh generation, however it keeps saying that “Degenerate or inverted tet”. Any suggestion on which software to generate good .tet file is really appreciated. Thanks!

Soft Body support is still very much in development for Isaac Gym. While it will work with the Flex physics engine, and there should be some samples up that use it in the next few weeks, we will not be able to provide significant support on the soft body APIs until we bring the Gym functionality into Omniverse and Isaac Sim.

That said, we do hope to provide some more documentation on the APIs soon, and you can use this script to generate a .tet file using a mesh generated from fTetMesh (

Take care,

1 Like

Thanks, @gstate for your reply it helps me a lot.
Just one last question regarding this. I tried to use the generate tomato model together with a Franka robot model and got the result as shown in the figure below. As you can see, the tet mesh is enormous compared to Franka robot. Looks like this is the scaling problem since the vertices of the tomato are somewhere around 1 to 3 while Franka is around 0.1. And I can’t find any rescaling param from the document. Can you give me a hint on this matter? I tried to rescaled the tomato by dividing the vertices to 10 but then the model starts to behave really bad. Thank you!

Hi @tran.nguyenle,

If you are loading in the tet mesh from an URDF model, such as how it’s done in the urdf/icosphere.urdf example used in, you can set a scaling parameter in the URDF file. This can be done by adding to the definition that references your tet file, e.g:

	<link name="soft">
			<origin rpy="0.0 0.0 0.0" xyz="0 -0.5 0"/>
			<density value="1000"/>
			<youngs value="1e5"/>
			<poissons value="0.45"/>
			<damping value="0.0"/>
			<attachDistance value="0.0"/>
			<tetmesh filename="icosphere.tet"/>
			<scale value="0.5"/>
1 Like

Hi @kellyg,

Thanks for your reply regarding this matter. As a matter of fact, I tried to scale the mesh as you suggested, however, it seems like scaling the mesh actually affects the behavior of the deformation. As shown in the figure below, when running the code and left it running for 20 seconds or so, the default scale works as expected but with scaled mesh, the object seems like deforms itself. After awhile the shape of the ball changes completely. Should I modify anything else like density to make it work? It would be nice to get a hint to solve this. I have been stuck with it for quite some time :D. Thanks in advance!

Hi @tran.nguyenle,

This behavior could be caused by the randomization on the damping parameter in the script. Could you try removing this line: actor_soft_materials[j].damping = random.uniform(0.0, 0.08)**2 or modifying the randomization range to be something much smaller than 0.08 and see if that produces the expected behavior?

1 Like

Hi @kellyg,
Thanks a lot for your answer. It solved the scaling problem by playing with the damping parameter as you suggested!

Btw, I have another question regarding the contact between the robot gripper and soft bodies (I guess it would be nicer to ask it here rather than making a new post, right?) I’m trying to build a grasping environment where a Franka robot tries to grasp soft bodies. As shown in the figure below, the soft object deformed even when the finger doesn’t actually make the contact with the object. For the record, I set this param as sim_params.flex.shape_collision_distance = 0.0000000000001 to minimize the distance between the bodies but the result is still the same. Any suggestion regarding this? Thanks!