You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement DeformableObject and DeformableObjectData for the OVPhysX backend, enabling soft body (FEM) simulation.
Critical prerequisite: Unlike RigidObject/Articulation, DeformableObject has no base abstract class in core isaaclab/. It exists only in isaaclab_physx/. A BaseDeformableObject must be extracted first (separate PR) before OVPhysX can implement it via the factory pattern.
Deformable body support (FEM simulation, nodal state TensorBindings, kinematic targets) likely does not exist in ovphysx. This is the largest single piece of ovphysx-side work — @marcodiiga needs to confirm whether soft body simulation is on the ovphysx roadmap.
Dependencies
Requires base class extraction PR (Phase 1)
Requires ovphysx soft body support (significant ovphysx-side work)
Implement DeformableObject and DeformableObjectData for the OVPhysX backend, enabling soft body simulation.
Critical finding: Unlike RigidObject and Articulation, DeformableObject has no base abstract class in core isaaclab/. It exists only in isaaclab_physx/ and inherits directly from AssetBase. This means the standard factory pattern cannot be used. A BaseDeformableObject must be extracted first.
Prerequisite: Extract BaseDeformableObject
Before OVPhysX can implement DeformableObject, the existing PhysX implementation must be refactored:
Create BaseDeformableObject in source/isaaclab/isaaclab/assets/deformable_object/:
Extract the abstract interface from PhysX's DeformableObject
Summary
Implement
DeformableObjectandDeformableObjectDatafor the OVPhysX backend, enabling soft body (FEM) simulation.Critical prerequisite: Unlike RigidObject/Articulation,
DeformableObjecthas no base abstract class in coreisaaclab/. It exists only inisaaclab_physx/. ABaseDeformableObjectmust be extracted first (separate PR) before OVPhysX can implement it via the factory pattern.Scope
Phase 1 (prerequisite): Extract
BaseDeformableObjectfrom PhysX — ~500 lines of refactoringPhase 2: Implement OVPhysX DeformableObject —
deformable_object.py(~500 lines),deformable_object_data.py(~300 lines)OVPhysX API Blocker
Deformable body support (FEM simulation, nodal state TensorBindings, kinematic targets) likely does not exist in ovphysx. This is the largest single piece of ovphysx-side work — @marcodiiga needs to confirm whether soft body simulation is on the ovphysx roadmap.
Dependencies
Spec
Full design spec:
docs/superpowers/specs/2026-04-20-ovphysx-deformable-object-design.mdParent issue: #5315
📋 Full Design Spec (click to expand)
OVPhysX DeformableObject — Design Spec
Issue: Needs creation — [OVPHYSX] DeformableObject asset
Date: 2026-04-20
Status: Draft
Summary
Implement
DeformableObjectandDeformableObjectDatafor the OVPhysX backend, enabling soft body simulation.Critical finding: Unlike RigidObject and Articulation,
DeformableObjecthas no base abstract class in coreisaaclab/. It exists only inisaaclab_physx/and inherits directly fromAssetBase. This means the standard factory pattern cannot be used. ABaseDeformableObjectmust be extracted first.Prerequisite: Extract BaseDeformableObject
Before OVPhysX can implement DeformableObject, the existing PhysX implementation must be refactored:
Create
BaseDeformableObjectinsource/isaaclab/isaaclab/assets/deformable_object/:DeformableObjectdata,num_instances,num_bodies,root_view,max_sim_vertices_per_body,max_sim_elements_per_body,max_collision_vertices_per_body,max_collision_elements_per_bodywrite_nodal_state_to_sim_index,write_nodal_pos_to_sim_index,write_nodal_velocity_to_sim_index,write_nodal_kinematic_target_to_sim_index,transform_nodal_posAssetBaseCreate
BaseDeformableObjectDatain the same location:nodal_pos_w,nodal_vel_w,nodal_state_w,root_pos_w,root_vel_wdefault_nodal_state_w,nodal_kinematic_targetRefactor PhysX's
DeformableObjectto inherit fromBaseDeformableObjectinstead ofAssetBaseWire up factory pattern in
backend_utils.pyfor deformable objectsThis is a breaking change in architecture (not API) and should be reviewed independently before the OVPhysX implementation begins.
DeformableObject Interface
Key Properties
dataDeformableObjectDatanum_instancesintnum_bodiesintroot_viewmax_sim_vertices_per_bodyintmax_sim_elements_per_bodyintmax_collision_vertices_per_bodyintmax_collision_elements_per_bodyintKey Methods
write_nodal_state_to_sim_index(nodal_state, env_ids, full_data) -> Nonewrite_nodal_pos_to_sim_index(nodal_pos, env_ids, full_data) -> Nonewrite_nodal_velocity_to_sim_index(nodal_vel, env_ids, full_data) -> Nonewrite_nodal_kinematic_target_to_sim_index(targets, env_ids, full_data) -> Nonetransform_nodal_pos(nodal_pos, pos, quat) -> TensorData Properties
nodal_pos_w(N, V)wp.vec3fnodal_vel_w(N, V)wp.vec3fnodal_state_w(N, V)wp.vec6froot_pos_w(N, 3)wp.float32root_vel_w(N, 3)wp.float32Where N=num_instances, V=max_sim_vertices_per_body.
Architecture
File Layout
OVPhysX API Requirements
Blocker for @marcodiiga: Deformable body support in ovphysx is likely completely new work. This includes:
This is the largest single piece of ovphysx-side work across all subtasks.
Phasing
Given the prerequisites, this should be implemented in two phases:
Phase 1: Extract
BaseDeformableObjectfrom PhysX (prerequisite PR)Phase 2: Implement OVPhysX DeformableObject (depends on ovphysx soft body support)
Tests
Source:
source/isaaclab_physx/test/assets/test_deformable_object.pyTarget:
source/isaaclab_ovphysx/test/assets/test_deformable_object.pyDependencies
Estimated Scope
deformable_object.py: ~500 linesdeformable_object_data.py: ~300 lineskernels.py: ~100 lines