Files
issacdataengine/workflows/simbox/tools/rigid_obj/make_collider.py
2026-03-16 11:44:10 +00:00

58 lines
1.9 KiB
Python

# pylint: skip-file
# flake8: noqa
import argparse
from isaacsim import SimulationApp
simulation_app = SimulationApp({"headless": True})
from omni.physx.scripts import physicsUtils, utils
from pxr import Usd
def process(
usd_file,
create_physics_mat=True,
):
"""Add collision properties to a USD file using convex decomposition.
Args:
usd_file: Path to the USD file.
create_physics_mat: Whether to create physics material.
"""
stage = Usd.Stage.Open(usd_file)
aligned_prim = stage.GetPrimAtPath("/World/Aligned")
child_prim = aligned_prim.GetAllChildren()[0]
utils.setCollider(child_prim, "convexDecomposition")
child_prim.GetAttribute("physxConvexDecompositionCollision:maxConvexHulls").Set(64)
child_prim.GetAttribute("physxConvexDecompositionCollision:hullVertexLimit").Set(64)
child_prim.GetAttribute("physxConvexDecompositionCollision:minThickness").Set(0.001)
child_prim.GetAttribute("physxConvexDecompositionCollision:shrinkWrap").Set(True)
child_prim.GetAttribute("physxConvexDecompositionCollision:errorPercentage").Set(0.1)
if create_physics_mat:
static_friction = 1.0
dynamic_friction = 1.0
utils.addRigidBodyMaterial(
stage,
"/World/Physics_Materials",
staticFriction=static_friction,
dynamicFriction=dynamic_friction,
)
physicsUtils.add_physics_material_to_prim(
stage,
aligned_prim,
"/World/Physics_Materials",
)
stage.Save()
print(f"Successfully processed: {usd_file}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Add collision properties to USD file using convex decomposition")
parser.add_argument("--usd_path", type=str, required=True, help="Path to the USD file")
args = parser.parse_args()
process(args.usd_path, create_physics_mat=True)