From b0bf2889c3928e171c683d36bce8c6f696aa1b13 Mon Sep 17 00:00:00 2001 From: Renato Gasoto Date: Mon, 26 Aug 2024 11:02:31 -0700 Subject: [PATCH] ISIM-1670 ISIM-1673 : Allow user could import the mjcf file from File->Import. Register the mjcf file icon to asset types. added action to registry ISIM-1673 Update option panel ISIM-1929 Update MJCF imported USD structure Convert Transforms into Translate/Orient/Scale Make test imports only happen when tests are running rename extension fix dependencies fix docs fix deprecated update omni client imports add missing omni.kit.test in the [[test]] section use asset converter OSEC-2068: enable sonarqube Fix colliders and Referencing for Robots Fix density segfault Fix collision groups and colliders visualization Update visual hideness code format enhance collision geometry handling with meshmergecollision Update dependency versions and configuration files to public versions restore carbs restore symstore Fix windows signing issue Add repo_codesign 7.2.3 Update generated extension deps remove registries item from repo.toml, fix ordering of items release 5.0 --- .gitignore | 8 + .gitlab-ci.yml | 16 +- PACKAGE-LICENSES/assimp-LICENSE.txt | 78 - deps/ext-deps.packman.xml | 8 +- deps/kit-sdk-deps.packman.xml | 30 +- deps/kit-sdk.packman.xml | 2 +- deps/omni-physics.packman.xml | 9 +- deps/omni-usd-resolver.packman.xml | 8 - deps/repo-deps.packman.xml | 29 +- index.rst | 25 +- premake5.lua | 5 +- repo.bat | 8 + repo.sh | 5 + repo.toml | 24 +- source/apps/exts.deps.generated.kit | 7 +- .../apps/isaacsim.asset.importer.mjcf.app.kit | 30 + source/apps/omni.importer.mjcf.app.kit | 21 - .../omni.importer.mjcf/config/extension.toml | 28 + .../omni.importer.mjcf/data/icon.png | Bin .../omni.importer.mjcf/data/preview.png | Bin .../omni.importer.mjcf/docs/CHANGELOG.md | 32 + .../omni.importer.mjcf/docs/README.md | 3 + .../omni/importer/mjcf/__init__.py | 20 + .../omni/importer/mjcf/_mjcf.py | 30 + .../omni/importer/mjcf/scripts/__init__.py} | 0 .../omni/importer/mjcf/scripts/extension.py | 37 + .../omni.importer.mjcf/premake5.lua | 10 + .../omni-mjcf-importer-LICENSE.txt | 0 .../bindings/BindingsMjcfPython.cpp | 16 +- .../config/extension.toml | 12 +- .../data/fonts/NVIDIASans_Bd.ttf | Bin 0 -> 169412 bytes .../data/fonts/NVIDIASans_It.ttf | Bin 0 -> 173372 bytes .../data/fonts/NVIDIASans_Lt.ttf | Bin 0 -> 170196 bytes .../data/fonts/NVIDIASans_Md.ttf | Bin 0 -> 172212 bytes .../data/fonts/NVIDIASans_Rg.ttf | Bin 0 -> 170280 bytes .../data/icon.png | Bin 0 -> 2698 bytes .../2_of_Jenga_Classic_Game/model.obj | 0 .../2_of_Jenga_Classic_Game/model.xml | 0 .../model_collision_0.obj | 0 .../model_collision_1.obj | 0 .../model_collision_10.obj | 0 .../model_collision_11.obj | 0 .../model_collision_12.obj | 0 .../model_collision_13.obj | 0 .../model_collision_14.obj | 0 .../model_collision_15.obj | 0 .../model_collision_16.obj | 0 .../model_collision_17.obj | 0 .../model_collision_18.obj | 0 .../model_collision_19.obj | 0 .../model_collision_2.obj | 0 .../model_collision_20.obj | 0 .../model_collision_21.obj | 0 .../model_collision_22.obj | 0 .../model_collision_23.obj | 0 .../model_collision_24.obj | 0 .../model_collision_25.obj | 0 .../model_collision_26.obj | 0 .../model_collision_27.obj | 0 .../model_collision_28.obj | 0 .../model_collision_29.obj | 0 .../model_collision_3.obj | 0 .../model_collision_30.obj | 0 .../model_collision_31.obj | 0 .../model_collision_4.obj | 0 .../model_collision_5.obj | 0 .../model_collision_6.obj | 0 .../model_collision_7.obj | 0 .../model_collision_8.obj | 0 .../model_collision_9.obj | 0 .../2_of_Jenga_Classic_Game/texture.png | Bin .../JUICER_SET/model.obj | 0 .../JUICER_SET/model.xml | 0 .../JUICER_SET/model_collision_0.obj | 0 .../JUICER_SET/model_collision_1.obj | 0 .../JUICER_SET/model_collision_10.obj | 0 .../JUICER_SET/model_collision_11.obj | 0 .../JUICER_SET/model_collision_12.obj | 0 .../JUICER_SET/model_collision_13.obj | 0 .../JUICER_SET/model_collision_14.obj | 0 .../JUICER_SET/model_collision_15.obj | 0 .../JUICER_SET/model_collision_16.obj | 0 .../JUICER_SET/model_collision_17.obj | 0 .../JUICER_SET/model_collision_18.obj | 0 .../JUICER_SET/model_collision_19.obj | 0 .../JUICER_SET/model_collision_2.obj | 0 .../JUICER_SET/model_collision_20.obj | 0 .../JUICER_SET/model_collision_21.obj | 0 .../JUICER_SET/model_collision_22.obj | 0 .../JUICER_SET/model_collision_23.obj | 0 .../JUICER_SET/model_collision_24.obj | 0 .../JUICER_SET/model_collision_25.obj | 0 .../JUICER_SET/model_collision_26.obj | 0 .../JUICER_SET/model_collision_27.obj | 0 .../JUICER_SET/model_collision_28.obj | 0 .../JUICER_SET/model_collision_29.obj | 0 .../JUICER_SET/model_collision_3.obj | 0 .../JUICER_SET/model_collision_30.obj | 0 .../JUICER_SET/model_collision_31.obj | 0 .../JUICER_SET/model_collision_4.obj | 0 .../JUICER_SET/model_collision_5.obj | 0 .../JUICER_SET/model_collision_6.obj | 0 .../JUICER_SET/model_collision_7.obj | 0 .../JUICER_SET/model_collision_8.obj | 0 .../JUICER_SET/model_collision_9.obj | 0 .../JUICER_SET/texture.png | Bin .../data/mjcf/mujoco_scanned_objects/LICENSE | 0 .../Pepsi_Caffeine_Free_Diet_12_CT/model.obj | 0 .../Pepsi_Caffeine_Free_Diet_12_CT/model.xml | 0 .../model_collision_0.obj | 0 .../model_collision_1.obj | 0 .../model_collision_10.obj | 0 .../model_collision_11.obj | 0 .../model_collision_12.obj | 0 .../model_collision_13.obj | 0 .../model_collision_14.obj | 0 .../model_collision_15.obj | 0 .../model_collision_16.obj | 0 .../model_collision_17.obj | 0 .../model_collision_18.obj | 0 .../model_collision_19.obj | 0 .../model_collision_2.obj | 0 .../model_collision_20.obj | 0 .../model_collision_21.obj | 0 .../model_collision_22.obj | 0 .../model_collision_23.obj | 0 .../model_collision_24.obj | 0 .../model_collision_25.obj | 0 .../model_collision_26.obj | 0 .../model_collision_27.obj | 0 .../model_collision_28.obj | 0 .../model_collision_29.obj | 0 .../model_collision_3.obj | 0 .../model_collision_30.obj | 0 .../model_collision_31.obj | 0 .../model_collision_4.obj | 0 .../model_collision_5.obj | 0 .../model_collision_6.obj | 0 .../model_collision_7.obj | 0 .../model_collision_8.obj | 0 .../model_collision_9.obj | 0 .../texture.png | Bin .../data/mjcf/mujoco_scanned_objects/VERSION | 0 .../mjcf/mujoco_sim_assets/humanoid100.xml | 0 .../mjcf/mujoco_sim_assets/humanoid_body.xml | 0 .../data/mjcf/nv_ant.xml | 0 .../data/mjcf/nv_humanoid.xml | 0 .../open_ai_assets/fetch/pick_and_place.xml | 0 .../data/mjcf/open_ai_assets/fetch/push.xml | 0 .../data/mjcf/open_ai_assets/fetch/reach.xml | 0 .../data/mjcf/open_ai_assets/fetch/robot.xml | 0 .../data/mjcf/open_ai_assets/fetch/shared.xml | 0 .../data/mjcf/open_ai_assets/fetch/slide.xml | 0 .../data/mjcf/open_ai_assets/hand/egg.xml | 0 .../open_ai_assets/hand/manipulate_block.xml | 0 .../hand/manipulate_block_touch_sensors.xml | 0 .../open_ai_assets/hand/manipulate_egg.xml | 0 .../hand/manipulate_egg_touch_sensors.xml | 0 .../open_ai_assets/hand/manipulate_pen.xml | 0 .../hand/manipulate_pen_touch_sensors.xml | 0 .../data/mjcf/open_ai_assets/hand/pen.xml | 0 .../data/mjcf/open_ai_assets/hand/reach.xml | 0 .../data/mjcf/open_ai_assets/hand/robot.xml | 0 .../hand/robot_touch_sensors_92.xml | 0 .../mjcf/open_ai_assets/hand/shadow_hand.xml | 0 .../data/mjcf/open_ai_assets/hand/shared.xml | 0 .../mjcf/open_ai_assets/hand/shared_asset.xml | 0 .../hand/shared_touch_sensors_92.xml | 0 .../data/mjcf/open_ai_assets/stls/.get | 0 .../stls/fetch/base_link_collision.stl | Bin .../stls/fetch/bellows_link_collision.stl | Bin .../stls/fetch/elbow_flex_link_collision.stl | Bin .../open_ai_assets/stls/fetch/estop_link.stl | Bin .../fetch/forearm_roll_link_collision.stl | Bin .../stls/fetch/gripper_link.stl | Bin .../stls/fetch/head_pan_link_collision.stl | Bin .../stls/fetch/head_tilt_link_collision.stl | Bin .../stls/fetch/l_wheel_link_collision.stl | Bin .../open_ai_assets/stls/fetch/laser_link.stl | Bin .../stls/fetch/r_wheel_link_collision.stl | Bin .../fetch/shoulder_lift_link_collision.stl | Bin .../fetch/shoulder_pan_link_collision.stl | Bin .../stls/fetch/torso_fixed_link.stl | Bin .../stls/fetch/torso_lift_link_collision.stl | Bin .../fetch/upperarm_roll_link_collision.stl | Bin .../stls/fetch/wrist_flex_link_collision.stl | Bin .../stls/fetch/wrist_roll_link_collision.stl | Bin .../data/mjcf/open_ai_assets/stls/hand/F1.stl | Bin .../data/mjcf/open_ai_assets/stls/hand/F2.stl | Bin .../data/mjcf/open_ai_assets/stls/hand/F3.stl | Bin .../mjcf/open_ai_assets/stls/hand/TH1_z.stl | Bin .../mjcf/open_ai_assets/stls/hand/TH2_z.stl | Bin .../mjcf/open_ai_assets/stls/hand/TH3_z.stl | Bin .../stls/hand/forearm_electric.stl | Bin .../stls/hand/forearm_electric_cvx.stl | Bin .../mjcf/open_ai_assets/stls/hand/knuckle.stl | Bin .../open_ai_assets/stls/hand/lfmetacarpal.stl | Bin .../mjcf/open_ai_assets/stls/hand/palm.stl | Bin .../mjcf/open_ai_assets/stls/hand/wrist.stl | Bin .../mjcf/open_ai_assets/textures/block.png | Bin .../open_ai_assets/textures/block_hidden.png | Bin .../data/preview.png | Bin 0 -> 375881 bytes .../docs/CHANGELOG.md | 166 ++ .../docs/Overview.md | 2 +- .../docs/index.rst | 14 +- .../icons/icoFileMJCF.png | Bin 0 -> 13634 bytes .../icons/radio_off.svg | 3 + .../icons/radio_on.svg | 4 + .../plugins/MeshImporter.h | 269 +++ .../plugins/Mjcf.cpp | 340 ++++ .../plugins/Mjcf.h | 11 +- .../plugins/MjcfImporter.cpp | 1072 +++++------- .../plugins/MjcfImporter.h | 46 +- .../plugins/MjcfParser.cpp | 180 +- .../plugins/MjcfParser.h | 9 +- .../plugins/MjcfTypes.h | 58 +- .../plugins/MjcfUsd.cpp | 257 ++- .../plugins/MjcfUsd.h | 36 +- .../plugins/MjcfUtils.cpp | 9 +- .../plugins/MjcfUtils.h | 9 +- .../plugins/UsdPCH.h | 2 +- .../plugins/core/mesh.cpp | 687 ++++++++ .../plugins/core/mesh.h | 19 +- .../plugins/core/platform.cpp | 5 +- .../plugins/core/platform.h | 2 +- .../plugins/math/core/common_math.h | 2 +- .../plugins/math/core/core.h | 2 +- .../plugins/math/core/mat22.h | 2 +- .../plugins/math/core/mat33.h | 2 +- .../plugins/math/core/mat44.h | 2 +- .../plugins/math/core/maths.h | 2 +- .../plugins/math/core/matnn.h | 2 +- .../plugins/math/core/point3.h | 2 +- .../plugins/math/core/quat.h | 2 +- .../plugins/math/core/types.h | 2 +- .../plugins/math/core/vec2.h | 2 +- .../plugins/math/core/vec3.h | 2 +- .../plugins/math/core/vec4.h | 2 +- .../plugins/utils/Path.h | 323 ++++ .../plugins/utils/Usd.h | 112 ++ .../isaacsim.asset.importer.mjcf/premake5.lua | 92 + .../python/__init__.py | 0 .../python/scripts/__init__.py | 0 .../python/scripts/commands.py | 8 +- .../python/scripts/extension.py | 497 ++++++ .../python/scripts/option_widget.py | 301 ++++ .../python/scripts/style.py | 107 ++ .../python/scripts/ui_utils.py | 17 +- .../python/tests/__init__.py | 2 +- .../python/tests/test_mjcf.py | 18 +- .../omni.importer.mjcf/plugins/MeshImporter.h | 232 --- .../omni.importer.mjcf/plugins/Mjcf.cpp | 133 -- .../omni.importer.mjcf/plugins/core/mesh.cpp | 1545 ----------------- .../omni.importer.mjcf/plugins/utils/Path.h | 76 - .../omni.importer.mjcf/premake5.lua | 140 -- .../python/scripts/extension.py | 380 ---- tools/packman/bootstrap/configure.bat | 16 +- .../bootstrap/download_file_from_url.ps1 | 2 +- .../fetch_file_from_packman_bootstrap.cmd | 4 +- .../bootstrap/generate_temp_folder.ps1 | 2 +- tools/packman/bootstrap/install_package.py | 26 +- tools/packman/config.packman.xml | 5 +- tools/packman/packman | 50 +- tools/packman/packman.cmd | 0 tools/packman/packmanconf.py | 43 +- tools/packman/python.bat | 2 +- tools/packman/python.sh | 2 +- 267 files changed, 4226 insertions(+), 3636 deletions(-) delete mode 100644 PACKAGE-LICENSES/assimp-LICENSE.txt delete mode 100644 deps/omni-usd-resolver.packman.xml create mode 100644 source/apps/isaacsim.asset.importer.mjcf.app.kit delete mode 100644 source/apps/omni.importer.mjcf.app.kit create mode 100644 source/deprecated/omni.importer.mjcf/config/extension.toml rename source/{extensions => deprecated}/omni.importer.mjcf/data/icon.png (100%) rename source/{extensions => deprecated}/omni.importer.mjcf/data/preview.png (100%) rename source/{extensions => deprecated}/omni.importer.mjcf/docs/CHANGELOG.md (72%) create mode 100644 source/deprecated/omni.importer.mjcf/docs/README.md create mode 100644 source/deprecated/omni.importer.mjcf/omni/importer/mjcf/__init__.py create mode 100644 source/deprecated/omni.importer.mjcf/omni/importer/mjcf/_mjcf.py rename source/{extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/.get => deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/__init__.py} (100%) create mode 100644 source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/extension.py create mode 100644 source/deprecated/omni.importer.mjcf/premake5.lua rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/PACKAGE-LICENSES/omni-mjcf-importer-LICENSE.txt (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/bindings/BindingsMjcfPython.cpp (95%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/config/extension.toml (86%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Bd.ttf create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_It.ttf create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Lt.ttf create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Md.ttf create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Rg.ttf create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/icon.png rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_0.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_1.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_10.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_11.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_12.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_13.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_14.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_15.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_16.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_17.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_18.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_19.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_2.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_20.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_21.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_22.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_23.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_24.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_25.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_26.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_27.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_28.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_29.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_3.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_30.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_31.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_4.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_5.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_6.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_7.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_8.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_9.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/texture.png (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_0.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_1.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_10.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_11.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_12.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_13.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_14.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_15.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_16.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_17.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_18.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_19.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_2.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_20.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_21.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_22.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_23.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_24.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_25.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_26.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_27.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_28.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_29.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_3.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_30.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_31.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_4.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_5.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_6.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_7.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_8.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_9.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/JUICER_SET/texture.png (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/LICENSE (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_0.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_1.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_10.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_11.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_12.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_13.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_14.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_15.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_16.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_17.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_18.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_19.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_2.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_20.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_21.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_22.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_23.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_24.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_25.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_26.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_27.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_28.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_29.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_3.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_30.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_31.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_4.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_5.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_6.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_7.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_8.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_9.obj (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/texture.png (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_scanned_objects/VERSION (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_sim_assets/humanoid100.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/mujoco_sim_assets/humanoid_body.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/nv_ant.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/nv_humanoid.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/pick_and_place.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/push.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/reach.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/robot.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/shared.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/fetch/slide.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/egg.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_block.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_block_touch_sensors.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_egg.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_egg_touch_sensors.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_pen.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/manipulate_pen_touch_sensors.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/pen.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/reach.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/robot.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/robot_touch_sensors_92.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/shadow_hand.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/shared.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/shared_asset.xml (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/hand/shared_touch_sensors_92.xml (100%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/.get rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/base_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/bellows_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/elbow_flex_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/estop_link.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/forearm_roll_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/gripper_link.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/head_pan_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/head_tilt_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/l_wheel_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/laser_link.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/r_wheel_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/shoulder_lift_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/shoulder_pan_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/torso_fixed_link.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/torso_lift_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/upperarm_roll_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/wrist_flex_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/fetch/wrist_roll_link_collision.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/F1.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/F2.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/F3.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/TH1_z.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/TH2_z.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/TH3_z.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/forearm_electric.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/forearm_electric_cvx.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/knuckle.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/lfmetacarpal.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/palm.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/stls/hand/wrist.stl (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/textures/block.png (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/data/mjcf/open_ai_assets/textures/block_hidden.png (100%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/data/preview.png create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/docs/CHANGELOG.md rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/docs/Overview.md (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/docs/index.rst (78%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/icons/icoFileMJCF.png create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/icons/radio_off.svg create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/icons/radio_on.svg create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/plugins/MeshImporter.h create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.cpp rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/Mjcf.h (89%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfImporter.cpp (52%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfImporter.h (74%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfParser.cpp (89%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfParser.h (97%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfTypes.h (95%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfUsd.cpp (86%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfUsd.h (82%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfUtils.cpp (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/MjcfUtils.h (93%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/UsdPCH.h (99%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.cpp rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/core/mesh.h (89%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/core/platform.cpp (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/core/platform.h (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/common_math.h (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/core.h (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/mat22.h (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/mat33.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/mat44.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/maths.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/matnn.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/point3.h (98%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/quat.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/types.h (91%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/vec2.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/vec3.h (99%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/plugins/math/core/vec4.h (98%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Path.h create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Usd.h create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/premake5.lua rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/__init__.py (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/scripts/__init__.py (100%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/scripts/commands.py (90%) create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/python/scripts/extension.py create mode 100644 source/extensions/isaacsim.asset.importer.mjcf/python/scripts/option_widget.py rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/scripts/style.py (88%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/scripts/ui_utils.py (97%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/tests/__init__.py (93%) rename source/extensions/{omni.importer.mjcf => isaacsim.asset.importer.mjcf}/python/tests/test_mjcf.py (95%) delete mode 100644 source/extensions/omni.importer.mjcf/plugins/MeshImporter.h delete mode 100644 source/extensions/omni.importer.mjcf/plugins/Mjcf.cpp delete mode 100644 source/extensions/omni.importer.mjcf/plugins/core/mesh.cpp delete mode 100644 source/extensions/omni.importer.mjcf/plugins/utils/Path.h delete mode 100644 source/extensions/omni.importer.mjcf/premake5.lua delete mode 100644 source/extensions/omni.importer.mjcf/python/scripts/extension.py mode change 100644 => 100755 tools/packman/bootstrap/configure.bat mode change 100644 => 100755 tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd mode change 100644 => 100755 tools/packman/packman.cmd mode change 100644 => 100755 tools/packman/python.bat diff --git a/.gitignore b/.gitignore index 3af31dd..72a73c7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,11 @@ PACKAGE-DEPS.yaml /.teamcity /tools/ci .lastformat + +# nvcode +/.nvcode +.nvcode.json + +# Accidental USD created at the mjcf data folder + +source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/**/*.usd \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8ea140a..ac17fb4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,9 @@ include: - project: 'omniverse/devplat/gitlab/templates/common/kit-extension' file: 'modules/complete-pipeline.yml' ref: v1_latest - + - project: 'omniverse/devplat/gitlab/templates/common/compliance' + file: 'modules/omniverse-repo-compliance.gitlab-ci.yml' + ref: v1_latest # ============================================================================================================== @@ -165,3 +167,15 @@ release-new-version: autoupdate-kit: rules: - when: never + +# overrides for compliance/osec job +osec:sonarqube: + variables: + SONAR_SOURCES: "source" + SONAR_CFAMILY_COMPILE_COMMANDS: "_build/linux-x86_64/release/compile_commands.json" + LINBUILD_EMBEDDED: "1" + before_script: + - set -eu && ./repo.sh build --generate --config release + +.osec:stage_base: + stage: .post diff --git a/PACKAGE-LICENSES/assimp-LICENSE.txt b/PACKAGE-LICENSES/assimp-LICENSE.txt deleted file mode 100644 index 262606a..0000000 --- a/PACKAGE-LICENSES/assimp-LICENSE.txt +++ /dev/null @@ -1,78 +0,0 @@ -Open Asset Import Library (assimp) - -Copyright (c) 2006-2016, assimp team -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -****************************************************************************** - -AN EXCEPTION applies to all files in the ./test/models-nonbsd folder. -These are 3d models for testing purposes, from various free sources -on the internet. They are - unless otherwise stated - copyright of -their respective creators, which may impose additional requirements -on the use of their work. For any of these models, see -.source.txt for more legal information. Contact us if you -are a copyright holder and believe that we credited you inproperly or -if you don't want your files to appear in the repository. - - -****************************************************************************** - -Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors -http://code.google.com/p/poly2tri/ - -All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of Poly2Tri nor the names of its contributors may be - used to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/ext-deps.packman.xml b/deps/ext-deps.packman.xml index ce50162..f652687 100644 --- a/deps/ext-deps.packman.xml +++ b/deps/ext-deps.packman.xml @@ -18,13 +18,13 @@ + + + + - - - - diff --git a/deps/kit-sdk-deps.packman.xml b/deps/kit-sdk-deps.packman.xml index 7e9e30d..8232fdf 100644 --- a/deps/kit-sdk-deps.packman.xml +++ b/deps/kit-sdk-deps.packman.xml @@ -1,40 +1,34 @@ - - - + - - - - - - - - - + - + + + + - + + + + - - - - + diff --git a/deps/kit-sdk.packman.xml b/deps/kit-sdk.packman.xml index 3b54e7b..0afdfbd 100644 --- a/deps/kit-sdk.packman.xml +++ b/deps/kit-sdk.packman.xml @@ -1,5 +1,5 @@ - + diff --git a/deps/omni-physics.packman.xml b/deps/omni-physics.packman.xml index 9f73b19..a425f85 100644 --- a/deps/omni-physics.packman.xml +++ b/deps/omni-physics.packman.xml @@ -1,13 +1,10 @@ - + - - - - - + + diff --git a/deps/omni-usd-resolver.packman.xml b/deps/omni-usd-resolver.packman.xml deleted file mode 100644 index c8c6d1d..0000000 --- a/deps/omni-usd-resolver.packman.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/deps/repo-deps.packman.xml b/deps/repo-deps.packman.xml index 967c68e..0dfcab2 100644 --- a/deps/repo-deps.packman.xml +++ b/deps/repo-deps.packman.xml @@ -1,38 +1,35 @@ - - - - + - + - - - - + - + - + - + - + - + - + + + + - + diff --git a/index.rst b/index.rst index 3331970..0207f1d 100644 --- a/index.rst +++ b/index.rst @@ -1,6 +1,6 @@ +========================== Omniverse MJCF Importer -======================= - +========================== .. mdinclude:: README.md Extension Documentation @@ -9,7 +9,20 @@ Extension Documentation :maxdepth: 1 :glob: - source/extensions/omni.importer.mjcf/docs/index - source/extensions/omni.importer.mjcf/docs/Overview - source/extensions/omni.importer.mjcf/docs/CHANGELOG - CONTRIBUTING \ No newline at end of file + source/extensions/isaacsim.asset.importer.mjcf/docs/index + source/extensions/isaacsim.asset.importer.mjcf/docs/Overview + source/extensions/isaacsim.asset.importer.mjcf/docs/CHANGELOG + + +CONTRIBUTING +~~~~~~~~~~~~~ +.. mdinclude:: CONTRIBUTING.md + +Deprecated Extension +~~~~~~~~~~~~~~~~~~~~~ +.. toctree:: + :maxdepth: 1 + :glob: + + source/deprecated/omni.importer.mjcf/docs/CHANGELOG + source/deprecated/omni.importer.mjcf/docs/README \ No newline at end of file diff --git a/premake5.lua b/premake5.lua index 4008aa6..b981e60 100644 --- a/premake5.lua +++ b/premake5.lua @@ -15,4 +15,7 @@ dofile("_repo/deps/repo_kit_tools/kit-template/premake5.lua") -- The default kit dev app with extensions from this repo made available. -- define_app("omni.app.kit.dev") -define_app("omni.importer.mjcf.app") +define_app("isaacsim.asset.importer.mjcf.app") + +include ("source/deprecated/omni.importer.mjcf") +-- include ("source/extensions/isaacsim.asset.importer.mjcf")/ diff --git a/repo.bat b/repo.bat index 6e713c6..00c5c78 100644 --- a/repo.bat +++ b/repo.bat @@ -1,10 +1,18 @@ @echo off +:: Set OMNI_REPO_ROOT early so `repo` bootstrapping can target the repository +:: root when writing out Python dependencies. +:: Use SETLOCAL and ENDLOCAL to constrain these variables to this batch file. +SETLOCAL +set OMNI_REPO_ROOT="%~dp0" + call "%~dp0tools\packman\python.bat" "%~dp0tools\repoman\repoman.py" %* if %errorlevel% neq 0 ( goto Error ) :Success +ENDLOCAL exit /b 0 :Error +ENDLOCAL exit /b %errorlevel% diff --git a/repo.sh b/repo.sh index a5649e4..236929b 100755 --- a/repo.sh +++ b/repo.sh @@ -2,7 +2,12 @@ set -e +# Set OMNI_REPO_ROOT early so `repo` bootstrapping can target the repository +# root when writing out Python dependencies. +export OMNI_REPO_ROOT="$( cd "$(dirname "$0")" ; pwd -P )" + SCRIPT_DIR=$(dirname ${BASH_SOURCE}) cd "$SCRIPT_DIR" +# Use "exec" to ensure that envrionment variables don't accidentally affect other processes. exec "tools/packman/python.sh" tools/repoman/repoman.py "$@" diff --git a/repo.toml b/repo.toml index 881944e..55968c9 100644 --- a/repo.toml +++ b/repo.toml @@ -61,7 +61,7 @@ post_build.commands = [ # Packaging ######################################################################################################################## [repo_changelog] -[repo_changelog.packages.urdf_importer] +[repo_changelog.packages.mjcf_importer] enabled = false [repo_publish] @@ -87,22 +87,36 @@ sphinx_conf_py_extra = """ autodoc_mock_imports = ["omni.client", "omni.kit"] autodoc_member_order = 'bysource' """ +[repo_build.licensing] +enabled = false + +[repo_build.docker] +enabled = false [repo_publish_exts] enabled = true -use_packman_to_upload_archive = false kit_path = "${root}/_build/$platform/$config/kit/kit${exe_ext}" publish_root = "${root}/_build/$platform/$config" -# disable signing as it's not common practice for extension publishing atm -signing.enabled = false +# signing is required for extensions to be published for windows +signing.enabled = true + +# verify before publishing +publish_verification = true + +# upload archives using packman (switch to using packman by default to reduce load on nucleus registry) +use_packman_to_upload_archive = true + +archive_pattern = "${root}/_build/packages/omniverse-mjcf-importer@*${platform_target}.${config}.*" ext_folders = [ - "${publish_root}/exts" + "${publish_root}/exts", + "${publish_root}/extsDeprecated" ] exts.include = [ "omni.importer.mjcf", + "isaacsim.asset.importer.mjcf", ] diff --git a/source/apps/exts.deps.generated.kit b/source/apps/exts.deps.generated.kit index ed83536..f30c7a2 100644 --- a/source/apps/exts.deps.generated.kit +++ b/source/apps/exts.deps.generated.kit @@ -18,18 +18,21 @@ # All local extensions built in this repo: [dependencies] -"omni.importer.mjcf" = {} +"isaacsim.asset.importer.mjcf" = {} ######################################################################################################################## # BEGIN GENERATED PART (Remove from 'BEGIN' to 'END' to regenerate) ######################################################################################################################## -# Kit SDK Version: 105.0.1+release.109385.73164226.tc +# Kit SDK Version: 106.5.0+release.162521.d02c707b.gl # Version lock for all dependencies: [settings.app.exts] enabled = [ + "omni.kit.asset_converter-2.8.3", + "omni.kit.tool.asset_importer-2.12.2", + "omni.usd.schema.physx-106.5.7", ] ######################################################################################################################## diff --git a/source/apps/isaacsim.asset.importer.mjcf.app.kit b/source/apps/isaacsim.asset.importer.mjcf.app.kit new file mode 100644 index 0000000..a2f521d --- /dev/null +++ b/source/apps/isaacsim.asset.importer.mjcf.app.kit @@ -0,0 +1,30 @@ +[package] +title = "MJCF Importer Application" +description = "Kit dev app with isaacsim.asset.importer.mjcf extension enabled." +version = "1.0.0" +keywords = ["app"] + +[dependencies] +"omni.app.dev" = {} +"omni.usd.schema.physx" = {} +"isaacsim.asset.importer.mjcf" = {} +"omni.importer.mjcf" = {} + +[settings] +app.window.title = "MJCF Importer Application" +app.settings.persistent = true +exts."omni.kit.test".includeTests.0 = "*isaacsim.asset.importer.mjcf*" + +[settings.app.exts] +folders.'++' = [ + "${app}/../exts", + "${app}/../extcache", + "${app}/../extsDeprecated", + ] # Make extensions from this repo available. + +[settings.persistent] +app.primCreation.typedDefaults.camera.clippingRange = [0.01, 10000000.0] + +[settings.persistent.app.stage] +upAxis = "Z" +materialStrength = "weakerThanDescendants" diff --git a/source/apps/omni.importer.mjcf.app.kit b/source/apps/omni.importer.mjcf.app.kit deleted file mode 100644 index 6edd714..0000000 --- a/source/apps/omni.importer.mjcf.app.kit +++ /dev/null @@ -1,21 +0,0 @@ -[package] -title = "MJCF Importer" -description = "Kit dev app with omni.importer.mjcf extension enabled." -version = "1.0.0" -keywords = ["app"] - -[dependencies] -"omni.app.dev" = {} -"omni.usd.schema.physx" = {} -"omni.importer.mjcf" = {} - -[settings] -app.window.title = "MJCF Importer" -app.settings.persistent = true - -[settings.app.exts] -folders.'++' = ["${app}/../exts"] # Make extensions from this repo available. - -[settings.persistent.app.stage] -upAxis = "Z" -materialStrength = "weakerThanDescendants" diff --git a/source/deprecated/omni.importer.mjcf/config/extension.toml b/source/deprecated/omni.importer.mjcf/config/extension.toml new file mode 100644 index 0000000..c4e3678 --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/config/extension.toml @@ -0,0 +1,28 @@ +[core] +reloadable = true +order = 0 + +[package] +version = "2.2.1" +category = "Simulation" +title = "Omniverse MJCF Importer" +description = "MJCF Importer" +repository="https://gitlab-master.nvidia.com/isaac/mjcf-importer-extension" +authors = ["Isaac Sim Team"] +keywords = ["mjcf", "mujoco", "importer", "isaac"] +changelog = "docs/CHANGELOG.md" +readme = "docs/README.md" +icon = "data/icon.png" +writeTarget.kit = true +preview_image = "data/preview.png" + +[deprecation] +warning = "Extension deprecated since Isaac Sim 4.0.0. Replaced by isaacsim.asset.importer.mjcf" + + +[dependencies] +"isaacsim.asset.importer.mjcf" = {} + + +[[python.module]] +name = "omni.importer.mjcf" diff --git a/source/extensions/omni.importer.mjcf/data/icon.png b/source/deprecated/omni.importer.mjcf/data/icon.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/icon.png rename to source/deprecated/omni.importer.mjcf/data/icon.png diff --git a/source/extensions/omni.importer.mjcf/data/preview.png b/source/deprecated/omni.importer.mjcf/data/preview.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/preview.png rename to source/deprecated/omni.importer.mjcf/data/preview.png diff --git a/source/extensions/omni.importer.mjcf/docs/CHANGELOG.md b/source/deprecated/omni.importer.mjcf/docs/CHANGELOG.md similarity index 72% rename from source/extensions/omni.importer.mjcf/docs/CHANGELOG.md rename to source/deprecated/omni.importer.mjcf/docs/CHANGELOG.md index 9738266..3719241 100644 --- a/source/extensions/omni.importer.mjcf/docs/CHANGELOG.md +++ b/source/deprecated/omni.importer.mjcf/docs/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## [2.2.1] - 2024-10-25 +### Changed +- Remove test imports from runtime + +## [2.2.0] - 2024-10-13 +### Changed +- Update Assets transforms into Translate/orient/scale elements + +## [2.1.0] - 2024-10-13 +### Changed +- Change the import options +### Removed +- standalone window import + +## [2.0.0] - 2024-09-20 +### Changed +- Changed MJCF importer to export USD to base, physics, sensor, and main stage +- Changed joint importer to import joints to the joint scope, and categorized by joint type + +## [1.2.2] - 2024-09-17 +### Added +- Action registry for menu item + +## [1.2.1] - 2024-09-06 +### Changed +- Register the mjcf file icon to asset types. + +## [1.2.0] - 2024-08-22 +### Changed +- ISIM-1670: Move Import workflow to File->Import. +- ISIM-1673: Display mjcf options in the right panel of the Import Dialog Window. + ## [1.1.1] - 2024-07-10 ### Changed - Importer frames on imported asset when done through GUI. diff --git a/source/deprecated/omni.importer.mjcf/docs/README.md b/source/deprecated/omni.importer.mjcf/docs/README.md new file mode 100644 index 0000000..2613bbb --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/docs/README.md @@ -0,0 +1,3 @@ +# Usage + +Extension deprecated since Isaac Sim 4.5.0. Replaced by isaacsim.asset.importer.mjcf. diff --git a/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/__init__.py b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/__init__.py new file mode 100644 index 0000000..155bcb0 --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/__init__.py @@ -0,0 +1,20 @@ +# Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +# + +import carb + +old_extension_name = "omni.importer.mjcf" +new_extension_name = "isaacsim.asset.importer.mjcf" + +# Provide deprecation warning to user +carb.log_warn( + f"{old_extension_name} has been deprecated in favor of {new_extension_name}. Please update your code accordingly." +) + +from isaacsim.asset.importer.mjcf.scripts.extension import * diff --git a/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/_mjcf.py b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/_mjcf.py new file mode 100644 index 0000000..9bb474b --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/_mjcf.py @@ -0,0 +1,30 @@ +# + +import importlib +import os + +import carb +from omni.importer.mjcf import new_extension_name as _new_ext +from omni.importer.mjcf import old_extension_name as _old_ext + +# Get the file name +_file_name = os.path.splitext(os.path.basename(__file__))[0] + +_new_package = __package__.replace(_old_ext, new_ext) +carb.log_warn( + f"{__package__}.{_file_name} has been deprecated in favor of {_new_package}.{_file_name}. Please update your code accordingly " +) + +_module = importlib.import_module(f"{_new_package}.{_file_name}") + +del os +del importlib +del carb + +globals().update({k: v for k, v in _module.__dict__.items() if not k.startswith("_")}) + +del _new_package +del _file_name +del _module +del _old_ext +del _new_ext diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/.get b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/__init__.py similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/.get rename to source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/__init__.py diff --git a/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/extension.py b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/extension.py new file mode 100644 index 0000000..a4a938f --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/omni/importer/mjcf/scripts/extension.py @@ -0,0 +1,37 @@ +# Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +# + +import importlib +import os + +import carb +from omni.importer.mjcf import new_extension_name as _new_ext +from omni.importer.mjcf import old_extension_name as _old_ext + +# Get the file name +_file_name = os.path.splitext(os.path.basename(__file__))[0] + +_new_package = __package__.replace(_old_ext, new_ext) +carb.log_warn( + f"{__package__}.{_file_name} has been deprecated in favor of {_new_package}.{_file_name}. Please update your code accordingly " +) + +_module = importlib.import_module(f"{_new_package}.{_file_name}") + +del os +del importlib +del carb + +globals().update({k: v for k, v in _module.__dict__.items() if not k.startswith("_")}) + +del _new_package +del _file_name +del _module +del _old_ext +del _new_ext diff --git a/source/deprecated/omni.importer.mjcf/premake5.lua b/source/deprecated/omni.importer.mjcf/premake5.lua new file mode 100644 index 0000000..118bfd9 --- /dev/null +++ b/source/deprecated/omni.importer.mjcf/premake5.lua @@ -0,0 +1,10 @@ +local ext = get_current_extension_info() +ext.target_dir = "%{root}/_build/%{platform}/%{config}/extsDeprecated/"..ext.id + +project_ext (ext) + +repo_build.prebuild_link { + { "docs", ext.target_dir.."/docs" }, + { "omni", ext.target_dir.."/omni"}, + { "data", ext.target_dir.."/data"}, +} diff --git a/source/extensions/omni.importer.mjcf/PACKAGE-LICENSES/omni-mjcf-importer-LICENSE.txt b/source/extensions/isaacsim.asset.importer.mjcf/PACKAGE-LICENSES/omni-mjcf-importer-LICENSE.txt similarity index 100% rename from source/extensions/omni.importer.mjcf/PACKAGE-LICENSES/omni-mjcf-importer-LICENSE.txt rename to source/extensions/isaacsim.asset.importer.mjcf/PACKAGE-LICENSES/omni-mjcf-importer-LICENSE.txt diff --git a/source/extensions/omni.importer.mjcf/bindings/BindingsMjcfPython.cpp b/source/extensions/isaacsim.asset.importer.mjcf/bindings/BindingsMjcfPython.cpp similarity index 95% rename from source/extensions/omni.importer.mjcf/bindings/BindingsMjcfPython.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/bindings/BindingsMjcfPython.cpp index 8710ec3..0009217 100644 --- a/source/extensions/omni.importer.mjcf/bindings/BindingsMjcfPython.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/bindings/BindingsMjcfPython.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,9 +16,11 @@ #include -CARB_BINDINGS("omni.importer.mjcf.python") +CARB_BINDINGS("isaacsim.asset.importer.mjcf.python") -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -27,13 +29,13 @@ namespace mjcf } } // namespace importer } // namespace omni - +} namespace { PYBIND11_MODULE(_mjcf, m) { using namespace carb; - using namespace omni::importer::mjcf; + using namespace isaacsim::asset::importer::mjcf; m.doc() = R"pbdoc( This extension provides an interface to the MJCF importer. @@ -44,7 +46,7 @@ PYBIND11_MODULE(_mjcf, m) :: - from omni.importer.mjcf import _mjcf + from isaacsim.asset.importer.mjcf import _mjcf mjcf_interface = _mjcf.acquire_mjcf_interface() # setup config params @@ -140,7 +142,7 @@ PYBIND11_MODULE(_mjcf, m) arg1 (:obj:`str`): Path to the robot on the USD stage - arg2 (:obj:`omni.importer.mjcf._mjcf.ImportConfig`): Import configuration + arg2 (:obj:`isaacsim.asset.importer.mjcf._mjcf.ImportConfig`): Import configuration arg3 (:obj:`str`): optional: path to stage to use for importing. leaving it empty will import on open stage. If the open stage is a new stage, textures will not load. diff --git a/source/extensions/omni.importer.mjcf/config/extension.toml b/source/extensions/isaacsim.asset.importer.mjcf/config/extension.toml similarity index 86% rename from source/extensions/omni.importer.mjcf/config/extension.toml rename to source/extensions/isaacsim.asset.importer.mjcf/config/extension.toml index 08b2550..d03b30d 100644 --- a/source/extensions/omni.importer.mjcf/config/extension.toml +++ b/source/extensions/isaacsim.asset.importer.mjcf/config/extension.toml @@ -3,7 +3,7 @@ reloadable = true order = 0 [package] -version = "1.1.1" +version = "2.3.4" category = "Simulation" title = "Omniverse MJCF Importer" description = "MJCF Importer" @@ -21,17 +21,20 @@ preview_image = "data/preview.png" "omni.kit.window.filepicker" = {} "omni.kit.window.content_browser" = {} "omni.kit.pip_archive" = {} # pulls in pillow -"omni.physx" = {} "omni.kit.commands" = {} "omni.kit.window.extensions" = {} "omni.kit.window.property" = {} "omni.kit.viewport.utility" = {} +"omni.kit.tool.asset_importer" = {} +"omni.kit.helper.file_utils" = {} +"omni.usd.schema.physx" = {} +"omni.usd.libs" = {} [[python.module]] -name = "omni.importer.mjcf" +name = "isaacsim.asset.importer.mjcf" [[python.module]] -name = "omni.importer.mjcf.tests" +name = "isaacsim.asset.importer.mjcf.tests" [[native.plugin]] path = "bin/*.plugin" @@ -42,7 +45,6 @@ recursive = false # this is to catch issues where our assimp is out of sync with the one that comes with # asset importer as this can cause segfaults due to binary incompatibility. -dependencies = ["omni.kit.tool.asset_importer"] stdoutFailPatterns.exclude = [ "*Cannot find material with name*", diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Bd.ttf b/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Bd.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3876721f2ae2a739f6f2f915b1acf75685444678 GIT binary patch literal 169412 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≺(AgWW+i4{nPmVX=EfV8F9XS|1`dT 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 literal 0 HcmV?d00001 diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Lt.ttf b/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Lt.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b004c08931074f4bed380d338a435419e5399afc GIT binary patch literal 170196 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

Ll5~%Ln?H19gL_m&hBrP4VSbv9k5>$%Q; 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 BIHmvq literal 0 HcmV?d00001 diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Md.ttf b/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Md.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6856222ef121c838a568564a2d5f11993fc76798 GIT binary patch literal 172212 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 g{9&8hcl&uK0)&T0U{bkT>t<8 literal 0 HcmV?d00001 diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Rg.ttf b/source/extensions/isaacsim.asset.importer.mjcf/data/fonts/NVIDIASans_Rg.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9de390993e3a91c44e9c57b67192e2f3d78c5d7d GIT binary patch literal 170280 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 Eg6t1I4*&oF literal 0 HcmV?d00001 diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_0.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_0.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_0.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_0.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_1.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_1.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_1.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_1.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_10.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_10.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_10.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_10.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_11.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_11.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_11.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_11.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_12.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_12.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_12.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_12.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_13.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_13.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_13.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_13.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_14.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_14.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_14.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_14.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_15.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_15.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_15.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_15.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_16.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_16.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_16.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_16.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_17.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_17.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_17.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_17.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_18.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_18.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_18.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_18.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_19.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_19.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_19.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_19.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_2.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_2.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_2.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_2.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_20.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_20.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_20.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_20.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_21.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_21.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_21.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_21.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_22.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_22.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_22.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_22.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_23.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_23.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_23.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_23.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_24.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_24.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_24.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_24.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_25.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_25.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_25.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_25.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_26.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_26.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_26.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_26.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_27.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_27.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_27.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_27.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_28.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_28.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_28.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_28.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_29.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_29.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_29.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_29.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_3.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_3.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_3.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_3.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_30.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_30.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_30.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_30.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_31.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_31.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_31.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_31.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_4.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_4.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_4.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_4.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_5.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_5.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_5.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_5.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_6.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_6.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_6.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_6.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_7.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_7.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_7.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_7.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_8.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_8.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_8.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_8.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_9.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_9.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_9.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/model_collision_9.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/texture.png b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/texture.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/texture.png rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/2_of_Jenga_Classic_Game/texture.png diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_0.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_0.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_0.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_0.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_1.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_1.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_1.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_1.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_10.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_10.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_10.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_10.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_11.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_11.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_11.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_11.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_12.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_12.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_12.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_12.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_13.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_13.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_13.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_13.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_14.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_14.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_14.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_14.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_15.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_15.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_15.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_15.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_16.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_16.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_16.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_16.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_17.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_17.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_17.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_17.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_18.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_18.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_18.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_18.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_19.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_19.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_19.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_19.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_2.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_2.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_2.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_2.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_20.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_20.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_20.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_20.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_21.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_21.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_21.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_21.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_22.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_22.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_22.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_22.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_23.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_23.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_23.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_23.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_24.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_24.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_24.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_24.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_25.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_25.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_25.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_25.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_26.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_26.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_26.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_26.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_27.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_27.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_27.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_27.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_28.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_28.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_28.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_28.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_29.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_29.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_29.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_29.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_3.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_3.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_3.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_3.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_30.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_30.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_30.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_30.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_31.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_31.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_31.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_31.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_4.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_4.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_4.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_4.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_5.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_5.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_5.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_5.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_6.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_6.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_6.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_6.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_7.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_7.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_7.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_7.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_8.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_8.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_8.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_8.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_9.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_9.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_9.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/model_collision_9.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/texture.png b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/texture.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/texture.png rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/JUICER_SET/texture.png diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/LICENSE b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/LICENSE similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/LICENSE rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/LICENSE diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_0.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_0.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_0.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_0.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_1.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_1.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_1.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_1.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_10.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_10.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_10.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_10.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_11.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_11.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_11.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_11.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_12.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_12.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_12.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_12.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_13.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_13.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_13.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_13.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_14.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_14.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_14.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_14.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_15.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_15.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_15.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_15.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_16.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_16.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_16.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_16.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_17.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_17.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_17.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_17.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_18.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_18.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_18.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_18.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_19.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_19.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_19.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_19.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_2.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_2.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_2.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_2.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_20.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_20.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_20.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_20.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_21.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_21.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_21.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_21.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_22.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_22.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_22.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_22.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_23.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_23.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_23.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_23.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_24.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_24.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_24.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_24.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_25.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_25.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_25.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_25.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_26.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_26.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_26.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_26.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_27.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_27.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_27.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_27.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_28.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_28.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_28.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_28.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_29.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_29.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_29.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_29.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_3.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_3.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_3.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_3.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_30.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_30.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_30.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_30.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_31.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_31.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_31.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_31.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_4.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_4.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_4.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_4.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_5.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_5.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_5.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_5.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_6.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_6.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_6.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_6.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_7.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_7.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_7.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_7.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_8.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_8.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_8.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_8.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_9.obj b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_9.obj similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_9.obj rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/model_collision_9.obj diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/texture.png b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/texture.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/texture.png rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/Pepsi_Caffeine_Free_Diet_12_CT/texture.png diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/VERSION b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/VERSION similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_scanned_objects/VERSION rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_scanned_objects/VERSION diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid100.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid100.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid100.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid100.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid_body.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid_body.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid_body.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/mujoco_sim_assets/humanoid_body.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/nv_ant.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/nv_ant.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/nv_ant.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/nv_ant.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/nv_humanoid.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/nv_humanoid.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/nv_humanoid.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/nv_humanoid.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/pick_and_place.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/pick_and_place.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/pick_and_place.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/pick_and_place.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/push.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/push.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/push.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/push.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/reach.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/reach.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/reach.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/reach.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/robot.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/robot.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/robot.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/robot.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/shared.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/shared.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/shared.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/shared.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/slide.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/slide.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/fetch/slide.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/fetch/slide.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/egg.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/egg.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/egg.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/egg.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block_touch_sensors.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block_touch_sensors.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block_touch_sensors.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_block_touch_sensors.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg_touch_sensors.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg_touch_sensors.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg_touch_sensors.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_egg_touch_sensors.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen_touch_sensors.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen_touch_sensors.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen_touch_sensors.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/manipulate_pen_touch_sensors.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/pen.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/pen.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/pen.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/pen.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/reach.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/reach.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/reach.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/reach.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/robot.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/robot.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/robot.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/robot.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/robot_touch_sensors_92.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/robot_touch_sensors_92.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/robot_touch_sensors_92.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/robot_touch_sensors_92.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shadow_hand.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shadow_hand.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shadow_hand.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shadow_hand.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_asset.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_asset.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_asset.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_asset.xml diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_touch_sensors_92.xml b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_touch_sensors_92.xml similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_touch_sensors_92.xml rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/hand/shared_touch_sensors_92.xml diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/.get b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/.get new file mode 100644 index 0000000..e69de29 diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/base_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/base_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/base_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/base_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/bellows_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/bellows_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/bellows_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/bellows_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/elbow_flex_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/elbow_flex_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/elbow_flex_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/elbow_flex_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/estop_link.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/estop_link.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/estop_link.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/estop_link.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/forearm_roll_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/forearm_roll_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/forearm_roll_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/forearm_roll_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/gripper_link.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/gripper_link.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/gripper_link.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/gripper_link.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_pan_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_pan_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_pan_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_pan_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_tilt_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_tilt_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_tilt_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/head_tilt_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/l_wheel_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/l_wheel_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/l_wheel_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/l_wheel_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/laser_link.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/laser_link.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/laser_link.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/laser_link.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/r_wheel_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/r_wheel_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/r_wheel_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/r_wheel_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_lift_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_lift_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_lift_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_lift_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_pan_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_pan_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_pan_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/shoulder_pan_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_fixed_link.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_fixed_link.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_fixed_link.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_fixed_link.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_lift_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_lift_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_lift_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/torso_lift_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/upperarm_roll_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/upperarm_roll_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/upperarm_roll_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/upperarm_roll_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_flex_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_flex_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_flex_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_flex_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_roll_link_collision.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_roll_link_collision.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_roll_link_collision.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/fetch/wrist_roll_link_collision.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F1.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F1.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F1.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F1.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F2.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F2.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F2.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F2.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F3.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F3.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F3.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/F3.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH1_z.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH1_z.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH1_z.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH1_z.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH2_z.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH2_z.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH2_z.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH2_z.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH3_z.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH3_z.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH3_z.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/TH3_z.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric_cvx.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric_cvx.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric_cvx.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/forearm_electric_cvx.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/knuckle.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/knuckle.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/knuckle.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/knuckle.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/lfmetacarpal.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/lfmetacarpal.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/lfmetacarpal.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/lfmetacarpal.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/palm.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/palm.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/palm.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/palm.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/wrist.stl b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/wrist.stl similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/wrist.stl rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/stls/hand/wrist.stl diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/textures/block.png b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/textures/block.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/textures/block.png rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/textures/block.png diff --git a/source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/textures/block_hidden.png b/source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/textures/block_hidden.png similarity index 100% rename from source/extensions/omni.importer.mjcf/data/mjcf/open_ai_assets/textures/block_hidden.png rename to source/extensions/isaacsim.asset.importer.mjcf/data/mjcf/open_ai_assets/textures/block_hidden.png diff --git a/source/extensions/isaacsim.asset.importer.mjcf/data/preview.png b/source/extensions/isaacsim.asset.importer.mjcf/data/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a4989378671b4a51d231f6bab0ca7894d514f16b GIT binary patch literal 375881 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 eP_E7fJ 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

;FXBRWP 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

T!>A0 zm;IZ}x0VO8NU1JLZ0a2y8glNwJl&>L4X>QaEpKv{NoKoVTEu2ubiVxK{-ihe(K(ue zquVXYWfuBy=3)J|5Nru**ezNuE2>ty4=eo{q1>QbVzqqwrZ{xUVuw4L*VY$@c2~p2 z4C>=FhqFZ}>vDEDZ=-B8W-f-Vadkzf$|ZtD^H};-H~|?~ck#O{6>Lp96EsSy04>h7 zI$AO>dMTX4abPLZ?BGOBh1_>6^=>Rw`X;RrLHtHDx!3Tye$I(7eUq;p01Ix_BEPpI zrMF`sf3<^il8uzp^q+z6i|75(8Hy!|D|i%qT*hny9R|O*Q&=J7Hx+m0 z_UOi^H;3QHida8=cO_OM5lINyg%A;qCIs6xlU;e*o3Agy>tGOeR$SY4p}IjD-ZeBd zsQTKk_B0!0i^Y34n3gX-tBA_X$f@S(-8OIhPHfXEAy(TeLZnVed{^pIH>mG2+sipM zBfBp@-w1!es4}FF4YLIU(N}o=>%nMNZkJTvV(EwOlzDz|m8-$t$}rg0`Z5%|)SNaO z0<_+;rH@9iBUTEp=UpuauV_R|zR(O*`D*fp_8#-T>U3JO`DifOy(r1>{Dy`1;D2IH z879*eGFJAC9TZ$iH30Ta`rOg$E5`uJZL$4ga_EW$sJ>WxD+OHu8QO!pVoPq_7Qy}s z%4~`HfB@bjfib3U#ZsdSe5X5TgQK0r+K3m{%LD8HO=!;?&{_5E2EJu}j}@L0JIe2{ zb8F!3cQS4krB;E{$-8HVF>PHKlJZf_a40vPd-^+T0t?M7ulCt#PaAWM$upT4vP@(M z?R0<@*d_}w&?#9iZxnlCblwjKBH#_bpzG30`pFxu z%pQ)QK$P4Hf%9?d{JOQhJE(cnFQ|K-UdVDZ?zd#(axi zE62t$sA_jucP^_M?b9W;qjlGFUgIQY{U?8(Ef40DkmKn>>Zz%sFZM4Y_|E3!`5CA2 zz^$IW27r`kk>D|8;4h*KAN3FSr#M?5(}i9zN0Wa+#2bEBHJO+0d=a9LAvYg6<>FcEwfvwq=#1jFQLf_k z6F6EBf1c7*A0Oo)YD`$BZadzeO@Go8gymw^Xm_&eD?-(|cuK^iW|%Sw?^1M4zdZ?x zEy6JdiUrF}a#avY(Rw4|hyfAN`Dn;~T64#GQCdJ7TYh-4y7mux23TC7P6JNGdY8a) zrai!qCR&gOE>$R@?&Tsp2T6A;-Nx@PK+fEJ!+R#k=DSYMrUm+EBX3DULe1&kD6pn8FxToiM+0qGTl`ZSDqu&iYlA&d`iL&ed&PU4Q znaTxPS-<|m3lxsUc?nn9i4$g`G(#Ze9Z}q929?6*Ym^%kBHmhUR}IILmV+ z(;l$v@M>j7Y%CE7D%8x`UjndTgk4> z#46dVv+P(ZggbKhU+|}9lza+E;y;E+hF_eNEM)p+-BkoTz>~rumC?#7yKIg`73*f4 z1+*2#mrLfQT(=?Ki^b_^PN5#>FJ;R7BS>J>Kd7h`VNxb0vw zq4l^Xbn&cly=j-2_y*Qvs*w`2N07Qu8u#-fs!NI7{dcIQ%L~i7_6x8mrs?0Sx>UcvcU6fjv!$-4s$s@!bX%881_72bvZfE`rA18F-TFP#BNh( zyH|o48-e-f{_2GP<<#N`2mjXm`^kU*17*XR`rm(o{mJcrHw+8CjQh{~yZlz!JGB4R zFid#;|K`UOLz$S)7?r@wNi^pr&@Bn)?ry z&kR9?q&u*w|`xCe!`DS1P8GoYHHam}*H$wX6yZwrh_4vH)J8R>kCMDxGn9^IT zSlm}>Z)piO=~2`mnceSCnCUtP#0!ELxxAp_^)xb4tY(hCKMoIudcs^}IzI9bKvhvz zy>C!p3f3lG{7zV@hHTKD@b@uBBZWq~KyKAdf0t!!JdkO$1dt$K;#P~no=Em3^n_M` zBE$dZ%l&qj<5eP{@&G^^&W;$kj%Y4!wL3w8SI1OyVlgVAG}jr808C3iv>**E$hlwl zW&RmxH2|M(Fji__OCrnt0vq#mSTi1L&U;{=LIWkO0B~th?~WjHM$PK6_89)r_6YX2 zOpPiYI}rmT!a`*6a3fP!*o*q_6#OGh#}OPzV~>A`^BbH;8huDR3XRb1;0kRbz8`!( z7D+uGppAN^tQ^Sal2Gyb; ziIUIJ;O7-tloKP@KRcNh99?|V2Kcjj0!tv!JR&l(%Ujj#XD{@vTNF~#t0P4nMk&z- zodU-u$JJodFBW+Z^@6?7l9LPI1}$|R)S+rRfDI8=LeKSBkD*;^mv!Q?rtF)bCtT}(2kd{Sr1n4fw!89Ab~JR z9)6L*)`fnj2NEDfOP0FLFtrlPT%=j`3k=Fvu5qbSCon@iiO^7R{}6%CCfA9|F^cu$ zT`Of2ebq`d++N*EuXyqHfDoqe&D+}pyX^&?-UxUaAcASQo>~`Z*L!H;eWi_p6R6Jv zY{WU~dhVPX5+%%g)nOXSTL6mHY9iw7{WW!L%>$4Md|8*jeXV zXkytgSb>oX9TX4skbe;&`p&Q|;cvREPajQs`r@EF77qX* z!r1TI{fe5y(m}1y;5#Ut)Bq|mQGLkl3muhUXykMgT=dI!ntvVhOc<|iHb$vsWPvp` zfT=Qq9|}WBz98V+5YmfPaO$bBHLHm7%MYj4->$mc(6+`geB^duzQlfIVycEerCAG4p2=J+CCIshg<3`}3rUq&-oKtUVs`T3e3wm%6d8CaNr zmQjtW%JXwUbbzYn=qeU#31}M-y~h9%MS*3$XW3U#1XjtOWzE49F6kZ}mgMW$67U+r z@X2|?fOIi&th#;Y=x1kR*gvUnF_2Wv#XDm#0d~Ovko(begVcy_zC-1sR@wkoZHsC8^ z5c+pv*tidd)}^Xs_=eA1TJ*ZCW;_9jGuae-aC-NdBEXY{B7SH!7XdI!Kb|DrZIJ&X zvl}jhsal;tyw~a&y1Psx8FnWVxd=`m@R7_)cibQ~tL$MqZvCO|wMEK#6q*0ECsAy4 z7U*~3fzmuJOihVbIrN=cWSJI3Jz+P@+ZaoR(q2w;12Tqmc`~y0r`|IXAmN_uf{2bdAbtc|T_ z8VRRGJ%4-N7*Q@R*-qglvh z!1%d=J%zlZR$+rYcCuw$$*spn0sUn!B8=bBW+Xnccv31n9obj>EHSf*9X9{2DFGb+I@$nQ(kfOSy9Q`t z?z>)d84<+hg3CEzAB7^wh-`SYyt94>)6#WvwTz*Dh2XMuBKga8)pi606Ol zLgufu=iMCN)(F_$Q*kz&7WF88tOcbd>uWCR@g!H3Bo&;8w?Dly<5At!a*^wri8PtB zCXQxN;Qvk-0d9?CHnarpiz(O@bzYJ6Sl#$Dk&L5;A+=hJ9N6qQhEGqp%hTk=QQglZ zZ;DpwC_J4_RZMnhGFByX=OMW(DWdQd10(`gKNPMny-e%b=!2nCtogI&aB5fYlWPC{fr9Y1gWl>Ti{X?2e^#77O}#XIo3rC*0i`<5;lVjrpz|Qn21QU> z?2^E*W?QTHR*z@9*~5w@x>wKPye&fYvL@Cf^%tya5R~u3|@5r&5Prc?PtHv2q zGfbGG_PK}py#`DNmM(Daygk5Nt9R@`9SB|JriF%~=Sx4(49sIBhdEIF3(k#$=pa*N zA0=ZGjjr#Mt_Q)S^Z4Q9ReOIt9~Gkut2Y}-IdXgYA|0xVMfg!{nKkz(@a34tY$u%u z_kIC0jv1Mo+AW2x72#b=kksf)jsPl+P7TVRjyUc6os`vqpuCY3z(|Jo@)g$QT$_c+ zD?a#1`sB}{t|=@eul8~Gy*F|k&%1+dfYbDVS;J%y)VO=Q3H>gyK%WTEDYf683kUs2 zqtf@|5z0m?TVV_TlRtLD?UP`ys* zb~MRacI2}8`5oa6ho}p)OU#``IEq#k&0kfqFZT>3H*F<|auOo`e8wonGwlAW&1{EH zpWk@tamtu9yn7dT;9UY3)HTxd77ezQQ8Im^KRpw5LCUFjx{Edzb`}jNezf2EpnvL6 z9xiPZ8@+b+9vXPvpZAjGZOOS4Q%c8wtz&V2mawsmadso5Uy7LGi1kIn+Mx3C4->k7 z$#wSva;JrqIQsr3@Y(PbNmUcj!rBYE1Q02vAK>u$$=^l}3W9vF(!>P*k}Rl&ym`!C ztsG^a;$#5Ngurr1stvVd5W-`E9}X*hwkr+A@sfscy^UqDJZE=`0S z!dAWA$s5oOZ<+_jq!$jI0@(u@Cf~1D*^!AjzxxWE&)89?`(26IG?0c_d6XYQxf5Bs zpY0p`$b>)qsen8zFC914^6>O3VL9L+{}KKRsa(nv(ZV0=@Jk+yob+! zs+l)HY`)|vvC?vdcQWORaQid!Ara~M0rq+-JYc-?^Un2KvasU#8jjSzV0?}XyF;YJ z+caZpYU)d{I8D?CVYpunz|x%$;=a0l$7L%0$)#o+~@RT9XltN9N46Xs3i zHp3~4He68-J1F>#Fuj%`dGY=c&pgL$p{j>I_K z3v7aXz4h{+0!8x!H*CHWvo_vv-=w7_;rgJJYtRn71uZdF36X^9M-!U6zfZxv=WazE zg?LPby?um$zZa-KkkZWnqBs91p!|%8W6i;sb){-3p*odI=@~0EpnNN8Iv3$th)`Ag zV9-7dy^{$AXo?s;F3n`)|FZldD^9M7F2KqU@vJkeSaEbUbpbwk-{HJBsA(S;N9@}J z#udVmY5=EhNDOlVzm3r$YHn-0-nhSIQjQw4BRg%Pm--w&hqxQiin|MzgUg^jdqJ%p z>wJEvn!p0i2V@H_Uik{<@fG18EoRwZ;Wt}FL_ig&ekCW^u1}y8b2Mrr@(QjyfkIKM zvcwW#FK%=k(>aK4v3lC$_+ICnH9+-BGvijd;l;ETT7)`ig!bH>n%Z>CII1FcKC}FV zw;YS(u6=fl2;ypry&;5#{vx$m2MTWS%lPRUCWhfV>6M4t1_z}_$0;8rJ`Dq#w#1O> zfUv3wpdr#sk+#_vJ$QvUbnMPcU}72qt;E2z^bfdz&xMv|Q}~Zb%Z|AZO;1@r?RTh< zH9psGEX!g2(C}*K zb6kh@HSK1e@8U-Yx>l=8?^(_ORig+d;N|cv-7_J|_3V%Xi_nKJ{MArR4lqYxUR1vtdgESRyMVjN5=4=>TuZOhj~zMX)yjw6gF+_7%c*`HQVq8N zHuH$x2a*2wjjs*1MJ$RZ?05bGRjlMHri%46V>aiHy$U;(Of=vh<@3vjP9plw8CgfeG0QziNkzOV<5tQe8q0qt`y08TB^ zq-Q>~P*coSGg_7v;5t8={0+ zc1aksvM`igVXX);$Yjhj_CmLDC?*vgdQ-^%g+1$aCY`VaU94|Los>^I2T;Q;JJ<)q zfJoUa8O}ltl{E!wNVLPipW}-}@W+$BB7`EZafFH|KDnD%Nzzr6`E;Ym_&FzHfI%sp zE4+KE;oIlrduIZ_66IO|?zv|K^|pk{&&h>Irm*Q@us0S~91Cr#8<$ki!oI0BnzQ)_ zwFHP7d`mm294Q{b8=&yx)4F z)LeHIqm4X*F|PsNJPddqwPO}-jB|l90(pMlihKC|{=%0nG-$RnOSz-KyOf%kAi9Zz zPSv@fzXp;W5$vCny#sF>9oK;LDk!-CD~{g%eQy|G;#G6=rbg!Uj9cMim@?mdp*92c zN0t(Iij7)`VZ7WLH{`8h(sQv-0f}@^@cA}=YB5GkysFZP23q7}rMK#K&};7B4jT!& zUcXHDm0{?JyBBQIi6xT(||3E^-|t{6Vn7Pwmm5k~GiaQ&y`5+0moD zRZ_n4a0hSCoOPfh4ZF5YU%mmXAk$hm>{|I2XD6_-fhnIh1Zchu&Ok!SqYlrNC(343 zyYF)0EaXcsn#k^#+>s5J1;Q?n0a8eJ_bZ<0QDC4e)t6*9xIsiNv8$sP*?(!*WB2mnbB4A%uJ7l5&)LI*LK$aiwM!*kY#czQe zYtlWVA|Ok904M~YpnE4PK!Y*rOO@LYe`Dv+{qkn`r)xJyP^YvRl4SR5#L_!sg=INe z;)LbYaX}Ytsk*I&bET!Tnr=97S9A3wf!eY-R%QuT%G51huRaDcg2_;BEdx-Xm_or` zaxsHw$ALCt#9=!2Fq0S!v~SgRRL`$5=Ni%dURoo-KzvE0RxyF1kS(eT@d1z@NVE`` zB_4U_^Bv{%>R7$T#o6-bm77DWR!uL-S)2SGnT1As``af4E(W2VtXv*#C{&*Q00P0o z4bkmoyY3>>JE-Y8?!k}{e{iaiTJXM$129^=0gmPF_*Z)H5)8|ejO6HGIws*Tc?g-Q z1ky;rW116gsHyRAe)8f(RmCvC&ywcmdBY%Tl~9*W6Jw|I?XfsztoIz@#zGmRN@4DL zPa2Hom|{e6pCZEB5{w_25HM)P)Q1b#jx5%^66PDc_o~UI z!5b1V(F}HWAi#W>;f`pnU9U>tPVd^8d{rAwfwqUsE_i;~0+wqy5MHnmX=v+2Ed{F+ zYl^plo#q|C%KGgM2eYH`s;&75RS<$ZRf+pH+GU9o10ZLIHvqCWZgug9D!@!@Rc@b3 zc0o=x@0}6*Uz(2ou|UdUJ<@G%jt`gttQr(Q*$=rbh6oG!>!Otcd{t2P?|C(JQ{bZ@FI$ZU|*R< zyYBinSo1d#k;#$&!hjB|x5q11`+~6Wrys{CFBEBiKOKFGuPRUr0ZHWpR0;#(h}Tsn z$Ov7b<$8ur>HApc0jHzI6r1ss-)6tO?s8OG?odFjwo?A|4T5=Tx(!qmU@7|GqyVaL z59C80CS$#b%~UJvr66+uA)qb^YS}lF9F(rzY_MYSf^wucnEq0hn+MZ=VmQ}C*5g;L z*YD%=TGz)S%J{PLPQYP4b0Gck4Jr)NO51>oe0Cw&1oXuATUXca-)S%I>m7RrP7sIy z!5&~($`1S{`og_LYX|ZaVV5TCYy0;^X$RohJHW85i!;%-UaOaa|Jnr~9*L3kc5|J& z__Iw-m(fU%&LL3jJS>hBmmN;P=;@eua=nIy&e)=R|ini#0{|{GHi>baAN$&ZIQwaAfbfbBODOd z02LyCG()2aXA(Hv3YZ*X7?59YK$rdv;d>Gd$hx_eY5I1(*Iwt7Doa8`04Jy!80E z4wpGB(zLuqGFE`!PQm0b#y%->G03AGW6NP-5$0netFE{q+wXw9+m217b|;gVbcc4w zyh^~Cgc2W1)`hL#8}(w(=fYsG2Kotd^ZXT);G>Iw4piB{j#(rQw{TSARLO_S(ZBp# zEG)P*r2M}OA*>W(8DJbX3j%eK12A~2+>l3MZkN0nD;Q#b(P`G|aTi!k#JfPZy)N5lNK! z?@uB6`$=w?PZ|IfseWg9kXflM8l%K+PB+~|{Qa3<{z~>jz?%7=UvZD&x6dwHiT?fL zIN`+qdeZ;btgrtcMw~W=+D*FYV_~tR1GN>US>sZxvc{lMIaImREAcnLg@tulW@L#k zj7IO;&o^&M%)SR;o^?(D`v>Nh@0B6z*4i?)F$WDRzv?#`iz|LWiD=?5k1Hb|FX(8#CQOvMW94wHw zEOhmLI;cz- znSG_^{H*x7Hi(VX($i-U==sOoERf#d!f%51W_mI|VoZ?7xR`g#KAvB0I_ zbNKP@RKEBhZ&b#I3D@(}AjeG5!`ET}HXo2T1HHX6?SLm3#W?RNZ@1Ft48?@vMEBv^ z0TNi;Wi(M)7L7j*uxak{1^gM*aO|iAT*RjNJXg|$9!osiA*wOr-AmY2qt@`}mzo^y zQ)n(mYk?b-fD{2}dg}@U#AvwP5Lj9qti7k7msH^gb(` z%RIpz9BTGiOv3P}PguTZt5I@33yb5@dH0vW1O}wTl%hV=-In8rSB{YPfB7%7z~>SMzEX15$>n4;mn zc1rHt2^hsAU}|Gh>L8{u)FroGi6KK>r&HgUO_buXsO~yX2pq5Ig1ogBCiO!4<>X|$ z%Z3+pzUYqPJ|Cd9`*T_af-5UEBrKZzHy}3S7>TVMXLp0pb?JtnP}$kha>-CvE=npg z!m^W_Mv1l9a}gwg0IiA!U1I_9XOOWmyJ;UA|8N~efgI@2bPW(JBQc536CgAj0NiZ=DBPY( zns}A=mDiwDJ@bY%W47W{H8wXDXwdEq{j8p;6_>tJ z$(Y5r=sK1dV4jU*oHr)=9AW{d(!D!>!la=KtN(Saa@!{tcU}plfTEgEctz1xUXRjM( zp{8FuLgOQ!Y#GO33l4Le0}?Bn9}ggtl%p!R_*f&r=H z{p{{|;D4b&%=jWKWbaU|ks{14MVAZ2mEY?MNB()9ZoYIzin_F z@wF2%$D!`z+m@^tS9zxuKZqCwsc$p0UaRSx4LY)?9{Y+SRwKTcP}&n-w*yk2Htu+P{g|Hx2FuFr;R%RGONksc`~Ps+P%}AVH_5?6Ky%A zl(nig*$n~;lg|{Z6`gs!9z3XW1Hww$(!R2dMZVqj$w@M+?w7?6d!hx&1*O>IKc)dj zwYUA2-sHM}?2hGQQrL4^yZ+`I+Q1A^totB!i3)|%(O)oz*GTrId&O~0{y~t}7Lh)C zLZ%o@z1&DNu%iM_Hk}lRw`lKtwDY3rk!vNRv^+&pSNHTtC%Mf~EjZ?FV$KQdHNJ$K zGd%Tgf5oyWG)a(K-Iw#!m<>xI@RT}4wJc2*6*6+^{{Vnjc zAfhjtBB?+?HU6AFbqjYS3Pg%VKMGy(pe?+;&j6DfxhqC?H?sldFU>i7?~DxlIS#hM z&;!)9L=ETcn<=zjvg-oKZ;3*GG7CEMuc$pKkGCBCV>sErEW^*yFVS=1vw2!>(q2dJ z;P^Vcfee0KnmNFPn_+H(~3_Km;FSrZ!XP1}F0^yixlzv8LUZL1ab zEKi5z^1)?x9#5#`bu5~9rKle9Q;jtYl#*RIkrZXq6*hw3+QyK<5wLEEob)9&x0q<-FS`7F>(_^amXFZ({bt6t+8fG%GUdnaXzWA}OA#@T%u>B3ie89zH9A#@A!GNRZ7 zp!>()9(c&@AV_WO`4i?xxvO#?(!OXpCS{x11@bhC?Lgu%I9JGd3k*3@TW4R7?!oD5 zm^638O6jyO5b1NAK?fE{d13?#JX|)Z&l)*Mxt~dtv(XziUJiGS7aVt=Vk#x_d4j(j zWi%>gqdp7-sw3!NsG%G>C2bP(@40IUF>>A9Xsc+{68f8(wK@&*m}zx$|h?W6kXag zF(o&bTt_ijmsmv|Xj|5qw5a!L>5Bu%L5f;1L9C39q@^6w$mFE3WwSp@9>#1@jZ4h2 z)I+79RKMsZdBCn5T5EA z*%_(%VG#7*rzWs~Nc`(i(|1J7W`xnxnC3`}s300YV9cC=NOHlv(0a~4N{Ojo^RN4` z%zO9ehf^6mF_W@Ae>%QSeLm8&xA3qGF`rd3k)POiIOx0AA}IEwK}Gxc8DX6vxZzpLWc=i9I84?aE$wcsE$Un>-Zs-WhdfY{l|xB_}mll zqK&Z4TMOBClZs)mxb){Oa!qQSRqsnv->h!~(ZM9ZK0UR=l>nm3U2ZloNKQ^a8}949 zxx>8$(l(>g?b7AS>Is!{Fcau~8(=?hJ35VX%bI2yy$&`@zgDz>fSLrE%z1@3tD?ti zta5rbiV~e&K}Rc9V*R4yyPQEwtEkuOtD3ySX96!>dbpqFjDD~5{nw`nM1BpW`RHXKc1EohaKt`A*J`gT{yk0tuU$KJT*a3Hj7z3gM zq&re#4}oD&>qmi7NS;Z|s}k)!{~E?%IC7;&>ePpG;^FpB=;Knbo{?Tpa3JhIqQ8{r zf~KjtXxoX~1I0-b<(D0-rVJ3BV0WBTLaj8R9(O`*oEVT=dGEO9p$^(204FKVYr|pe z)9nduFE(yfRfMO?&R%qrUazTpEXDp9M>@NF33{A^L%|NoO7xeR7uUQd%eB))EEP}A zVKLLJmG%WEo_$=D4<}Dosv=IP66~q9Di(FI(Go>VGxLvnz^eY}v;{oKx}5wE(X4^9 zewjfs4*P3Jfb1aPvFak|bD`hhTiI3x@p@mjtHdbmpUS^}TGpKV79-g6K2c8ZBi_dd zcut~rnhIK57i2NgNJV-a(dG@IZwDHUNoX`^GU*C%qn=G`RS;>AXysN9N$sp%>Rw5T z?5A!eWp_`Z|K7u0Iv0U3sg(-L*5~Zcu+a6%eOA_d7v1vr9qZ+gJLi<%rLG^8W~z=2 z5Nuvfxa9ZA84LF6ElQ`#bDmc=9TwfMT^r<{Md_&V%zFAWprw8~cTK&-gV zmg_9+r*kICaIi3j!Dt|ipQpa>o7~HQNqV-x6Ww^Xm+l(%o&=K#WglN#Q9!D{3JYQj z`Z}m;*bM7qNY|dhu+Q4fxaZ^!3-Pt`w@=4h7veqLiVP!!pMuSfPD&nc5VP6E`Iq)Y zM%lUZ=?BxUzvU#gDC~gV>)lEFpAD}oh|?#J=-STojd@w$P*EDScID4}B|)}-4GuRB z;uE71DmxuQ56`DhT{YAzUYdOQmJicpi$9F3T5|Kfu zGX`zLP!Ws3Ovnw1*jh19r+bJQyr+9@%+xRo16cg`JM(@^Pcb@X^gwQ=d`ksOFkUq1 z*bRuvX8RM6V-c)PeUE}tIuUUg)RBhHvJkQU4UPpeXxGWm6FUS*Ha6N@wy#A|7cn-4Ya>hD&n+&#z)df+j;Ei1VmPoY+ixt*wnpOp*h$Vf0psvYM~z9Uosm zbgyJ0xfn^=a_^Wyg?}{<%IVXOZ(;uBALD_H!$J1JpeqK6J5gu#D(U%4xMYfvcs&T) zn8uI+yC{{i#l<(ZBo4(784q&>T+&AQ)zGr@>-CJsP>Nkci^Mh~M~stP5!GrVZWr69 z3QI)mw*r3?Y1RU^y$C@4M5HSnT#Uz8D=?TkK;vV%eKhNPUv(R>9|+!(?}GD-tt+TR z^4gjvaVFFWVJqNV?~jyi_~s%r3BdZuW6|0`-<%kNIGvuZ`@7D;2(Y9<-HE)^GH;f0a#TDg<}a0M{$Ubo?YrT59+^3S}9D z$EZ=srSwfoIed$MJTT2Dh$XZ?>4$A{BwpH29nk(9aFu49z?i2GBO=VXN2DtpCj@jv z5eS}i`~IArf!4o$&8-WF%((%?IGPa z#x`er`x&p6xva%C&GJFRXW7vvuCb46{0Bw8?N;2n=*`7E;y2SW{|?}g!%%bHZns^V zZLlBulJ-lhDc$vR#e(r4geQHFs&eVSx0^5T#SPLJ+aR8C-7iSe&)*1VkPJHv6bMQ43ggMbmMwuFE7cH=E&Or5)8_gm8AQgEfZew8{{qiO`VPO|JP2jVgz}=O=j%1GB9c#_>9$OFWb z%;c)H(YGU}fE;AzMvX_O(U0E|i$iWJMIARMx(w@*+NE&*<4)AhSTd#~a5!`SxOCxk zd>f1KfmC8v%#6S(8LmW0%Ef_kge0?q7^egDOICc2WTd3zILI~SOAY1+W+B_) z6A^1?v-RvM#5FSh5C7Iad0<+P?PO?Qn%1d`Y10J5IY!t1HLdFjo}U6qt4h86r z^s4l%W374*&W>0uXHYABzQmrkm0|*sQutk0ZTH7*{r_~U;>i+9roK~X0=-KhH{cLy zy*9=T%~Y_Px%rBe!{j-pJ9z+$FahYrBe7N5M~A=9PcUPLWx`>-)R#IYVeidC;n^q(4)ePl4W#j4Hu>%2u|aT{(x=oIhlKx+xw8z2s_ouA z29JuZV1R&y!YCjujVK`i zKAcbI96r20?+603_rC9Suj_YRD`>a@c3=F(yZSHP6o@1JGfAoDG!SH*i8oh!2U2(s z22PmbPXrZb#H>dv0BpkRkN;F$wI`+|i~DO{kKB7_X1JmdJ39(^cpl;4ZNSzXjdlP@ z*B1|@vkr?fDpV<OJ#BskaqR5L;EhU!BPk~C9B=>Rq6DU;}eKDjb_u*z<0{& zzn0%~Km8#qT_0u}l5w~otNR!oQ~b&css;}@jf}v_=`Kb4RYJxg^rRj=iE4&}#FnPef)Kby%aC+Ji~9NR4_ zPk8QZt&9xpY&*9el&`7!EZaJ_0Dx3oJH!`Z@gU%L{7hWzdtt>w-#g9k2qWVQ4|BwmZO((kDIh*!27iJ&|mf2 z%;~FvyYi-(YCaxsrk;I48SsjFIsPfi^z#eQ6O|CXv2=oPG>F4}c@qETGn8>pnYB(Y ztuDGd@=+9S>Q5tK`QLA?3^tOQ=u`O}le0@iW_-Vgo377!ij^VReHY#O!7nxW-Jat1 zA{|A2Ub#{ADGtbRL4<@(orn6>(^>NIiJwnV^)a1j#yb&HQsYcuE&uf4l(PD5&vgt< z?ig3Mt`BNm?J;hz!VprFH*+vq7&rL9GoKtsCA-G!z3oxDJIh0%i=^Y?Rnk<+cZK_lQQ!+W=m0lIBzOh~IDw~gX+=PZ zNB|kQ)b}ZL{fCJAZ_}++w?$gUzsN6RV5qJDoPnSVT>hS09Qa5LmRbl}1PW#2W!BBo8T zUDIYR$pFfQh_$dc9d5TbMH>D|VLBA;r1zAJ?BMS=@zH-dVezLn5C8t8-9JQp#Q)Z! zcVCISi2N4+{$M=#Uq;-$AwV11D2 zAyn`@_j4yy1W|x)b$K8g8mJ}NRjVK_9gX#`$rOM-v}ps0Ew_G2myG=26febf2nVgo z!4JSZ?(Q(`1SMMp;^&=}e2Lgu1H?lQtqF;0r5iFLp3{1cFz7vS1VZ0n0I6wLEu75n z6-zYv`d5i^54q&hlC;zYg`1y|3$zl3Kyi5F4O zT*yX?R^F;sIL@bbQKnP{(% z1|gT5rVFml6H}wWdG3mHa>|LRl5rdezRvW#EX z;FMLmIIJ!z@BZ$=g+=3kLWKf{0guz^=MkH0Byj$JSkCzz9@WzCgR41p(1EC53hxQvq9rowOooNub z*YzC^9=1rN(T||XPUA3bpsF3Z)O1`K?BAzZr#DDMT@D9R+{tZQRKNfX> zUXFzLcggALzt!Gor?@WQrsvpcPVctblSdPBup8B=pcZPPVT+9_Zqy z@`=^Q{zY(gU7h4kjr%-f-T~Bs9uv2ZD2vO9zNTmHL~}t^`P!O<%hMH~Z|s=3PWKi= z6z56qv6lKtcu=k5xFE)20SL!?%krNrkb|ndP|Zj&{>5k)P_z65@MZ%fbYc|-U2%hm zTM(b+Hkb)fiXWkEK_W|u!w@Xj7#`2}=6=p+E^^C~ZDdV}W1m}iZY1utAn`WsdzVJkTit8m*Ruhkz7Bp@vU~9=2>ovI zYWdzqoaak1tbrpS57W*Fzr>xE428|%DW@to+ve?JooKiIv1aU4?mM#`d9bL1ucSvW z0|RSsaWNdL5c^~_QzzOIoY+&eADyN&`AfpwvMsI_qW5vh9vT#<=z-;}csTUIq}k&+ zGb5zi)Mf11jvU4C`ueEYR?1So4r+~b=zN|o^-2nq*O<{Pd#R~^!8-B_Y?wO+lg zbC=dw(Y^Epm*oigvfiBz=}Z=myQbg^-iDZOa4);h?paN!#zZIV;j`O{l0SQ3Rd||Y2D^2(vJqeR zm^wKSy&r&Olfujq{#k1^bwS=Cnbd(^Ti!nB;kPl zG)_zBE^2vq%lMxN#h;VgJRw_!CcmRkouKXG1Rj8dK5la3ZdIydOyP(nx_B(%Re}&d z;Z)2kOjhN+8Rm#y?-)x#wa31GUn#TAH@H;3B0aAMC`|oCegH+0RFsXFvI}FUqwJur zdP#@rwZMqaCW2~r68j6GS?)wlxph)x#{26@iO#8}QFD!s?0}TmWnFdQ zkNh6(UYv4N{zW+-mhBhP)GVzbmRN1Ai1iqyj!eTVBZOrW?kt0B0{`<2*9SvHD zD&qe5@J)|Ob3O-NQC)KND z^b_}5QJwP>x^m$=0E`2FMCcE1Ii$Zamm0aXR4(-6(Z1bkAMb%~!YZam-y`7Gb(Nos z8|%I_x^YAK&fEST#Y^wRQHKN9V>3S9P^l5zJoynlc}BI}y3K5!T1=+C@iq*WxYMQ< zd)~yH^GQX42JKBxP3Mi%mY5wGg*yrIA1J;iT&AU>THkaC_OmjP5fR&sSh}biqIn{j z#+CehfG90h^0PG``;wIRT$ZX3{6Xv7+q_I|-|w*?>#$JI69v0n#13SnIHC3mf4%+d z&D|$SbqbddI|jh70EL?-hc}&AhhnfW<{AdUM%Da}#!%iisVTDiIhnna6X{p8xtGDZ z3P}gbKSiWU^*lj-1Bn9j29>`4C{M2*;)f)es;@y02t!f*aAq8MUjcPL`8)3$DlENb zWE5@H)&68a5>JXj0IdV<*lee*y!eEa;I+1>mVq6s+U5N4@vV-IJpV`=QRS#HK|qJ8 zJ@W5CH1gA=7N3fWFQcq<)*meO$93LE2$`&(UxFp8v$36xu(2vUx~S z6z%14*OEX-PEYd$s~ZnAB5-+VQ+DTpOi_+Lo~p0&&d@uNaF+mS|A;|!OP+XXlw?I2Uqto99Oz7RdE-OyQ%WW z$v_;hiWkl>Et*MZPRl$ugl$jp?~J4qa9yu&o7tAUJT4!Vx|h=X-c@ooudHgLXA&4_ zt81cddC7Sxm?%~8=3}npt`P~IF3`!G98G2VK703&k3H1Mnvjy3y-bmnD=Q`f?Hc>U zj)a2y1c}wh0l4JF!?8LZb7G~e)2mEIE!!j$jP~232OYIMw%M3oU6YOMq%&xMYz+Nt za?$4weQv$G2&}R{UptX^qT*Ult}C;N;SM6?Er5et?8#4rtVY~40Wu?F4)3U9iu#Ewd|0zFsxB5MY(KX1 z9GdK$E?3#K8v_OAC9?}6w&|7dx+l>Ynty9p*pL)comn1p4R7-4&9s)q*{Q@sh;A&<0km#!1juILAel43=SN!&59N%3Ob zETf{lkVM%IrQ7XDgHOlz#DJl;ep%s^?A_Gn4yByG-QXO{xW<{eFteS+ysYObs|uIm zg@;;^2zzTb+9WqE^K~)Bd?zmbwWmR+P|vQczPCK!_yBMMyXVSZyt^`Z{^_H4p?yScIB2Xb)QO)nB5 zwe(o~+tX=P7MZQ7ABOR%NFAH7mFHHw@ll457nVXg{UmMff*GM>vDzzgHG%6ZGq&`~ zYyskLSCVmPrxEd{7S9bN>ym@sSU6z1(y;GC)jP%;gk^JnTK@~}kQgc195_9+5W zI20N=(L-d(LRGVw5^*pTMNUO=;KI^mDWrf~#mCqr+PB@66EmZ@LTRt2u}71aoRys(nm(&C9+~hkNe{UW2r<9zA9upLgY$ zm97C**~;^2+4nKDYXtt)tl9$D|B8FPgT6&xnRY3&O3nYX(X2#gy!7MOcF?&W-7cU(wM& z%xc6PhfejaSeBsevSjbAtVVpVL3@l2oRyE{WU^t4PK>&46glx|6hB+f6lh)F>dM3! zIerhT&4BWg!RfIBWF;e#xqC=uME^dd9x^ZTTpFVEVFc-n2NZ{bPhC(P(KAIVj{OLX z9N}O6@$?GMGD_>v*@hIJ1e}gzrIVZOQi)|-YRJ@`uK2qLHo}EEj-R3=t`UylU0B=E zhfCOcpp!6_>u0*DKW>a99|>Mn`I>N1IzCu5-6cLq{L=%(nXJ0L9kT2=05^ffK4xbv z#9%Mc|B5Qk?A$y6!a#s1ucnyOoK|#9atq`|eJ2#N-dGZKxNGfC&f-Cswwpth+^bwB;)_`w4V$@qc z(P4^`f))!WQ*z5FbBgm@N1Qr*$IgvWFS~b5Y=~bu@NB#&%u(vRH*rR5V<}9xj+KVH z=`Z#zZ$CHzbG^MOv!1F5I8KbrjIqJ(>EG*Y5zOxIl(eDe&oV+WkT*FU-!|Uje{2P5 z4uITS%QCU8dp>vpdWGUthm+os&IxiwaWXy0&4qb=IYt~ar*_VLt2y*#(Zl#nf+3;< zbsAT<7C^2p2fKepZn(>NOTJMCWnK&OF3sD*%`cpZW8oA#7hd|E2)R;(bJX79Q|*?h zr;NLKU28VfisjeU?m{iNO|AuXh+X-|EH8z`uOrV^vwxZJd=L$loEV)~92ck|dQ6Vg zUOR|Pc(>jgdVUY~8&I6&^c;G>y?C8w)9CH8epB2X6Yy5&PLzxjID_HTm{<&qemzJS zhDbzAMW{7I?QteY+e=+_0S3Wua5FYp=xp%I*tA=05x84voV(8c&*a`O&4^O6hkiuT zYps2X4zRnt?cmVtKnTmQ%(*=2ecQ!>+@u^a7}L>rU_8IU)~KOVRp*_B4jygH@e}bj zn@j$Aa?8r0Oqz?~11{pI@=5&XUw&hdl+g0`RZ^m^X{eY{-4k7UyzR*Gk^^m98M^5| z#Gjvb?DV_dqY*(-jPbr8&%KbD+qBGwy0|d2;!vEi7OX$=cK(bk(*%z!Z`#Q@@z>|{ zbzn(h=EID<%H4hD{?0JSQ_o0{F1aYTX~46DQjwSQUiX32tUjI_+m z`QjiCu>q;Kq{|{W-88SQmC+d^uphv1`5T)^2F=MVd#cn;PzeK3!HP5A)CIX{E3T)A zviazM$($vBH>$vcy0YeM+F6ZoKZfVOGXz>K33G>s4d!m}D`!yDKeN($MWqk=>6Sq* zDCU1iH&bq|GsnW?;D@QdJ-pd&@SlGg!-q;tkj^=A8rOse9nzMHbGW_Q)uu8KTY~Iz7-7~x}Haw0%ocEyi25(y4&pJztR`W-@#R|jw`(( zp8aXw!?{=MGPE$0k7{erNL1kE?xykcjc#*B3B}y47`0Aky7Pe{#xe&Y;&}7gqWa8m#Au=luvdd>@(Qc^yrnH7M}}mUNUJ9u7{He3@MS!MqiF@gF1;I$Qtoo5m1lc zsKwPJ0Aq`OtvnKdq(m%kzXD!W^?$~y>(_(R{6u=lLqU$MlZjth{p?!#IoewT1BAt% z`E9j+=ES&gPvzFKjJ&uKaIpRLRQ(#X$)UHpM$T;yz52>tFDQ{*dt(ddkZ2T$K)~Ru zE;z{a#&0{mhNw(v$nqP+38O+Oo?fuVy6vrMfwR1OL-cHMBMy^U*@AwybyoHzkss1B zPszyrBVlk0R}pe0mr}2LoAt{q+{TJIRu8KbRJH zYL|NyYpcE)c_K94 zouB4;e8tWGA(!5tWJvH|DcvjK$Y4==D$imAVXDV)E7e|rE|F8;%d=J?J^{lJxOm~v z^VTm5@WZ`Y441tpW@^KCMDa}<#INAD+VGmx^Bz#Q6+p8BwJJ4^oT0d4d>Wqi>k2A4 zzQ#mD)Qhb|A;G=$XXXz}ge~c6hWIeK##ljFAj~iO$aF*RXkY*dKh1n4D!#+j721%m z9_g38LvqVODZsDJvAh`z(yUX@=E-`>^fZYdAc9g0lHrPr(=Ped6;n}8V{x-MKUbS4cUpfC|0UoylE2d5{A>F3!HLr3`XKt z$G7me@W4D3n2E=S*z{9#n(0-HFs{1785%z0l~M_2{8U#tbmh9rbplhaHHCuBiP#GGQ;U9PvmIJ&liDoe;W_--&|0Or{pub(rb!g10ZNUplMJwS}$CDWyXLrb$lb zw2u}UW_sE}Sn~OS&m45&3bh-8G2*w7%dK!Om^P_p zK4Llw03hoyz@P%BS>ZSmP;xvJ^L_#iEHrRvo ziR*ILB|=)}S+&EuZN2$bPT(7x7<~uRS2 zV6wKyWc4H47oaE&qz;n(^!ylpBL5uAbc?JJZdHsuVOEAG=4B+kO$J0pyavAJRcv{; zm;cc4@|{s494oqpRzt+a!2!HLubC{M^LZiisnt(@|gZ;b}Vwfu{0KY;wKO}IUQKm zzKIV40TDe}Xrqm8CL< z$ZD`(yGXygZQ{Qx0jo@Dwp!NFDlJz@n{*#H`U4W7rdrb|B(x4D#Yy_GxRr~?DrKq3 zR*e%dCn(&}!Pr=7VpmGXc-dksQiw6jAjf4-uXG(BRD$AhF>(>4_qvm+mg)xsdZ&38 zz#PyO8@nEfFA^iXr(Xhm^z>r1=&6kn6w5A@yr{RtvC5*@-Q`;Iiwpn8aoR7S$han1Ul-1U+A9RYRZFCP8M z>&3bvc?`KJ{|d=@jzw8y)!9O-gP7(KW|I zk=NtwJ5!5_RtxpclRe6-kJ=&qz+`0A=EV{V2p(gk3E71*Q20E_KLz~i5r~6Fj)iF% z1r$)_?S@{Xg>K7lsu+h=Y|cw_AkL0xrvH6}M#EV?6F#T8zgUkE*eQ5)J?4CX%_&&} zjrB>^NV56{2F9{Qkdj}e)1^XCBT$`lKsy)UPP;Z0HB#oVrO2Azv)g3&)e@(1D=+6s zHXPo}nPYw%T#<7xy-j6(y^;lYJ~}`=R>oBBG%GY%csAU7qj}$lmu`C&YN*td-MiMm zkL=C+bC-^Zh+&@;0ZDuj#)Lq{$d2SJWrqq-eYO5j&+P=s-{(yh$C{naf4_=Mo`5Ri z@9d2>D2$Pr7w%sYX*{>)?vtZYHHvpa#HlQi{H>OxS6wjHVhswvCu%mhEcit$k;KRX zX04*8Gq+T(p>&AgGl9)*t{oCDp5%ABEl-*k^t)M>ZbGZJQ{n16gn|(M(oBC^MPcN| zj6<^F8J5lYadFLfMG%{1V9l>X%mS%uSvG+g+ai&H22%u3Jdlw4r}276~669nd^EQzCu+Rg&P?oK3FXo%4XZDbN*F8#e z%fOQ__&MT~8G*h!kHiJLXXAaPh4pl;#V~rHq+nmH{Q)Ci@i{&Ste&z{jpB1eRTZ96 zdTuv77{K?MRl9^!T{^bhxouAC?`-zkS6&qWbnjRpt>mm3&*iQvouBwlNIf&#$(n^W zw>#wWPeICEko)cHyHgh8=7G0F_c0zl&;B)l;w&zx*kk<*9Or0_fhK<{kudIC#r5le z{}>P8t{))w`ok_ev-;yk^Za=4c*(+pqA}T?PI%NI5PRT9kl&s7M}9KzazJ2!@cA(L zQ95`?L-`8u2d6(BnC2+#^}vpI=G-;H_{lWW4`!|QBn1i2^A5Vd1Qj5>cH8ZK9n&Vq z9DEVwWyb=@Ya!G@$IAM!11ELaHfzUD1gf10guZ|)xJN+>)z-vONNWYZ=fMGh%f+CzA#rp*1+D#rO*F<8*Tq|mm# z5IEkYs>p~}ZJcUhoRk}Jg{~f!umSv%+ z*qp8BdKiW%7`9?4kd>zQPYQs%(Abt+CMFYicj88ehLX5xcm@E_u^o@=m*Kh5t|Xva;qxPp>f_+7F_S?B_` zMkJ;>M2#Q#DHg)adpKccZ^aYu z|MFoS34=tYm8`Dwe)zj!ctCabY*ofsi)_n#klkUuK#r(@JY4zI9ZJn(bAhQl7F4?& zhv=AM0wMxp@Nv^5_sSgpjnt>?pSIXw2$z32@#HWI^z)ck(W{fXrbu{=M!AP;_L=t; z@~By5wv>ssjQ*avfWU$^(2MhHDGH%0>*}7t4~$XUnM#at7tARu`}M_6%qyH{2Pw)F zPA*M2=kjhlS3x@HCYY}4rGK8@X`q&0EwkAft>E6$-BHah=-LytJyS9ExxV7~$Jrri zlV4ldNqbVMv7|k%ibR>Bvlp+T+klv6w7wxq^jsrN~NyGIs zAYS!wb<8@xtPF#BA#h7AM%nQQs1~L~{5Zk0l;T3`B3+FSS_Jzf0*p3)LY@+#oSV+N zf?~$ydIDh||Ii>S=*7GhvnJ#Ar(p^9zd8a=9E2syzRU3^vOL<%H3KWN1v2Co2un~Jsez(;}-E0{%D_L{I?3<83 zK6v&ESU(nQx5aq+Db8#~>60^1P--79pT{-lX|ZXgpZrGI%JllaYU=1T_!0e3zRC)z zbTt$Ky>^70mhX`2lPl(@x5HJa~5OlFE55vwynH_3GhQk+`rkCzt|TpuQ;gV?p0?>USOOvOY=}y-~XH zlYYmH|7*&ZxQ!!%y6*>I-X=do`c84pqSivCyH-nAgG}?N4xq>dC&WHn$2Uod@zp3G z=9C_TW(TxL3xcj)#leV-iRiKL@y?WUX%L9^>4uW9xUt~boM1;`v5s!t?fJ7k&1#L# zqxVN`f&0j<(u3ab@|FQp-~`*5`p9?#mHO--4Pgbcf$tsLHJq*%<N93NKYDz?!Rqmx0&zK~997--ZQR?9t z>nar6DBlv3c&$2bZOkOze<#J9sd#Y6&DXlOs2TD7ZURQb!_)ilsVBYnA`AHoqG0&( zyaA#$UdNJ}X%f+%2%77Z->=>XaY!C_q*CDR4uFv0E@Zkia7{aG&V7z*X#H*&=zHp> zap>oh6=U*Zk*GR*c2AqOTIDKrY)KgmlTh3Uze)a#I8JoCJ`EE|oZJR(31)!{2~?Fb z%dH9F(A;TT)Tqw#NAqe>_v@v6ZM2leX;VD-Fp>;06Eu#R?4t45RHGf{%I$+Eocg@1(kaJZAs9ZH zsqpvx3&+em#le#2MMU$S96lHh4r#NizR;XYKPL~nQqX2MZ^Q-wKcK}KMkesH(IKh<%m zUU5*$98Jk?*`6-Bf$Z&BUqkU&O}?0+#S-Ky%rv+gtArj)H=c5dtPQBvH|~-zL*gxh zZpyEHC{R>>K@>1|-~1@kWec7^Alrr=1;1epwFB_C->%;XvU#+FB=XZK4_-b`l>-Or zhBH;>lB7q zc&Z%Rgef%w?Yx_h0uQ>_7Ry9mx zNT+Q9C2mwEY>)oDb6-!_BQqJ??TU3C!zSZ2n|>;c8FyAM`|d>onVM;`1`Fa ziP3)-k|y`0no;^dyA~`2i^Yt!Uh6(8eDXvxYTQ=KPb8_NKFqcQJKwCnd8{-S*e`PF zq}sOpN$0QHd1i{Oc{Q3V{NYtm+*~me+%X*^gcW{N05PgO>|e1Js?A9Pfp2j7P3S`i z<2jW*S8`GtCPdG+y;YcYuGr9yknmGxEfxkOeFTbwe8E!mFWk^YXXU6DQF2P3^~G{q zYcp=<`G-V&R-=kr^La~A%-OmP+_kC1!;Mm<|lZXwpMG3b$|nUk+Hh9>SLJ$bJ4q} zy{lSeVKOG6e)nkG*xQ)odbC0tva3@M((0Uc)T=kHB3QkDb#DV2IzRQQ!(qgAB{NZZ z)T&-5VHwh?SY7glv;u49I8!6u)vVQ4=3k&&s;58MFh_ql@Y-miLmzIT+i!M@G(Giu zS@7W@4^#jldxn}z?rtbQ%5Q=cDJ#&IeGJmm0ywXuPOO9fniLi~U9sZ@;Q31DIQ3BV zy+HMfKPAakh%ne-1AI46)r{qF?wcl&6jzWV5UIu*%9~y0Hf#Fx0$A-va|n0Rix!0x86n{*ltaIDgL6iZF^*4 z1#F{?y0C~H3YGf0fh835h_7&JelS^}Kk|F2gP-P<@xF-AmvVOF7++acv6+v_R*Yw9 zPy$(b)L z#Wn<2Yq1?Ki8b}Yard`>0v+E#tXPv}zD3=|I7#9G{U>Ng(MW9nv!ui9dY{JlL38wMe5 zTIsnIvgCh8Zlv6YB@THmRSw3ill6r>MXwmLb3k4@b#w88N~d&im2EBy8||B2^liiKrgv;pOu2a=-_ttDt3(VwFn z`{Gi=t6Wj8rhaQEZ5j&tSmG8Y~i1J^2t#QMdjBtH;CvO+=APU|6*S zbU%H^3z=v(GTcOcdPAVh)~hM)nmE6NZ~F9%Sp?fngQTJa=bVjN|&3aPJ=4 zwml4Fsc5R5OLkGP<>Wz^viAEItoEc0l|c^#b_R4FRiJJj18V>4eAXjPlje!}fh^3_fL2z9#98`OKpZBaJi+%U8itUk6 zl1HC?4ZR{jJxbRC%ZX*-=`xeH?4#ug7vMbb#(iPL6SjgM^|Yc;l`M>%E@z413A`0A z{A8_y$7J_VKzu_CeAW%!HKk-dIK~QEtB&xM`o1E*4Y5hSy|ZRKek3a0uiupwc_JO* ziEMmFk&dpTd_{4a>vBY7rgJjfU&Oqr(KrO0&PJD5>DGElXf@9?zl>xRkkaDou;$Ck z7#o;D-nvJVFSPSdxd3y36~_|6H^S`H?4NSDi8Co#G#_HdC46jA#JM#>1Zg@)^J~jo zt1kA9EJiY3u(Mpg8#__vzC<)e(xFSISABR;+zb2eP|c2W*>o$C9|si>_n^?mN$||k zs%cz0rGHC10*=JmqqdcEx=A4>Vx>^ZYKb-TB32Hf|5(%XrQXJ_qV&W^t!z_!?r_Da{;cd_M3{yOsXn zsMUH5&t_G@?gsJ;j71coQros@-;vQ$LhQBhY=e#QF?r0f? zKXxR+(EgekCAUPEKH?+Dug7TLcqfF+CR|vk^eCe9oXf;MyzbyH5SDJGQ(IHV<(9ZG zh#M&8(zZw#G5xb9b8B3RKw2@c1t_v3+ZkLSKZfNPeGx%9de>h;l8VtbSCPq}?uKq) z&g{~!eGXQLKaQN!L*kL&UqNBuPbFy92(ttW0k*t%}BbSpv-cNtRUBUPeA~0Y&6I>64QPa+G zt-|q-+^4G;BW6gbgh-{5BjM;swjS>_s!DT|lE3DNxc-U0H{Xa%Ni^%wEo=he?wU*D zv+Y|+dUwjQFZ9U}Jt>FA*Wgg`f&4c0dVg7AEH=v0d0%?dU7q{^(bE+?@uK8Q_I*I_ zPg-gbWIt@H%qHu&P>|EEtOZasAt`I_uhzVq2u_Sg?0OPn%~6|CxAdQA%ZC=I!K*p5 zw)noe*>M--_`6MmXcA&aEwgkyyx#m|>}|^1mteSwM2s1aLMlYSg&79v(9ZZVPk3s5 zPEh15Uf}7D2~YtAN*0D@PfpOv3eUot#-RP91Gf0@u1&?w-+hcj8j9Pz)&%*Mgh;b+ zlzz^<+k3V`QVB`*sW{%7)0%fwUT`V6kLA6a-TJ_BxONt;4lQM&?|4_oG zROZ05l49NCDU&8!AX>307j=VTeYWaFucIr9Ey<@J)S2ACdBfq$fNkMIob>?8}UD4mM2Dcs69ms_e zHtZ_mB$dio)#UI&AGI#|=hD}Ii`#pKY6pKejZX|^*|O7CLtLa*-1ADPc31%hn0#P9 z(_$FecE{(|_6$`*x*b>&K55<$NNAiJxa-40+@E&-hL&njgHxz@m9|C-k_FRaCBq)n zF}_*|v$o!*;BQNes*WnpWSq?AeEJ*<^TK+IA$78fvCknWMN5gWlKMtwR0KSQH?&J@ z8jcArDwJvmY=Oo;Bk`#xjlE{}E&)`L~R7+7elg3MtE*lkBr)LABa zk=BUGAIEg5hB$I#gQ=jD** zX?Beh*Np`Wi*LR-Z5>rAM|Es$(>Fx*#PxBV+UjWc>gS+5AfX^=tCTZetqZk1mGj*1 z&u#M0$nc!LE?ZD5)CYk8L$8)sLjO2QlyFpSo;gqNu^Lo7H1lP0?AV+UveU2KI7@El zBfc_7opGQ1cIMCIZQCO}ie5ZUlbzuaQmHG$>)vXOOw!4>jrZ43w!p6cs=+;}+Ubtg z@3ly|IMKcdnFDb|refe_L7%Wh!pBvpTL%*K(gd=qW>*@1Rll=_Y{N9q*+Sh>2`tCA zNUDT9D{h*OTobQZi3$QHk?&hlvngJ^E=GB4vYD-=5&NH4906=#rVKZtF zn|+U`hNz8?`_xSNro{XJS)y(KW<3Foe4Yrq=5$W+!96L8+ewOe&JrcqDy?lb1aS@T z;Ygj&+^@Ljeh~+rka+*J12}m0TQXcxA74vS%z5D#!|B|0+o755^bWMIH4V8G;}#>!2FHoa366==YUQ1Ob=eT;2V$m+?jBn<;unspCGAmQcp;_!~ z1T31pS|r1e8NC{qHXqsZ@KYjI#mKVg$N2TtGO^oVojOY#G zD`#kOZRCTt5&q0wZ^_vkK_q+kGV7&n(?+pVKS zThoF}Rc04b?iYN0OVvR;vPZ9#*m~bG4208rsmt!Zf8m&{IQKvL_{aVt!^qfueov?> z9Ox3ZLI^Gqb^w?Rsci=s5d^F&cfE>hBst$Qq7C^={MFu@NAoS(IUOx*X#_NRZ;{wF zN<8TcbBh2~ySM>Vp>?QN*=r5b2rQ|u^(}Gkd-_hJuOSo}yPwEW?SP@hx;C*wSbEKKoL0q3eLx+=#-Uc$KE#2U2E)H=`=P{ODkJu z@6hJI30yl4mtaLZ<{cKIq=2x$w zN42{XU+%o(%s})&#v>Z6FHZa8&RE{d_mkOJfU++FX+t4L5YkvQH7PeCTBr*?X$~@d zU4ZYP(1m}P-loIgop)lZd5DDnJU08q1^CZO)e)eCd_4abd+#0AWcsy>Vjob{(LtpM zDpoouAl)(|QWXdwRYW=gDbkC*Qbg%hMOvs*LNAICBy8dJdnEG%8;=97qloji+|EU^@G2|D&8S`%tvI1gXR_4*=K{}wcEr@Ms^!wC~??|o< zDN5dZ-r5le&+i0s|u8WqVh8c`zbJ?eZ9x^LM4D>S?f9G%UY!8s~M|CV6^g9R{n9HK*ofTEsNFpz;Y((Vdw z_@vVQV5r6{3`aX z)qP@JzjkJrUI_*GY~U1iBP6AVYFdnlV;|JM_%*?;>0CHY84&B3rgC9|2!r9=P-bg+I^FdgsVXz;q4@BGh;~q7 zt2O;q#jppVBhDjpryMq9!Krwkp|Y#3h$gK}mO-A(%AlV`_lPunrq%h0Sl0>qVe<#jEc8+0aOJSz9QcH0x_!s+Ou zYZCw+7pB~}Hvm~T_!dLbQ$2KZ!*l ztowPGfN#{gcRDnB8T^fAi+jPWT@t2ap9~prP1r9h2Jt3&|6*SPBc~mX3vH7yE{a|; zsSgzDc8BzHKldpY7$U`%d>h%Il{89r+65wZVrHI5Xmkg)?VXONo;}}WK<_*@@-K(G z(e|qNYRdF*fIBX{W}WI{vOatk0h-pwqFQRU=_Jau47!o$z8c?+T@5yMIs?t);=z=A z5p7QD#f@6ra5z0XX5uq++jg(ai=)O)(c)FJ981&dbkBaD<7y1X4ewkN@ zrl_M3y)d3hs-YO ztmW(1p0d=L9%;~i&etmrTUw1`Wj!xr%FzQoG40kY(7-oygF zCljD$=v+l=0Ad=#(x%UXh=ps7LJx@44s_?};rQRnB{xgMUj3C8q{5!WJ@@50e{gxy zhWm;V)J#JGn%BHXHWqvFv-FEJI6xtOIm@eZwvswv}*59>ADRl)y}Us#9Nu;f~v;b(%jRTvjxg7jb%Ya z_-c<59URiry8!lC>6um2egUL?Dlz+P0`91)FoTb#>ZF{MXKM4_v6b1z_CdrgypHrF zTPM~RhEa$X&VSeIY(!)VaezkSI}855YtBwFK}yxqgbfB#UHUDYnQXd(6?B;Xc_VG@ zfRMsr}RV%-)Utz)N%&x#`$F&^>vUdmeh1@+O^uZ6BB`JaSOc)tm>Dc}y#rd)P}Dbj+z8p<%3?5FfhXI!|GgZ@;i zxAx{y<$7wi82v^QvN)$TmC{hA!c&|2TOEWz#)G0~*S@4Rc8^$Ycut?1SRD(MR&Xiz z>h_HkLd{OX=x%S3-Io_~MWrQ2_3z9N`p`fnSib2{lzoN2u@`!_&lY|B{SF~IRH1K@ z+~>%9VSk;rg0$pN`J4;l+oy2KK0EU-a_>m%I`cIi3E&Pqvctz`s0#CaeI7GK$Fy4Dqg{2;JKMse?6c7eH}R2*D89VuDSlujE!qm zj)MJ!Bs#4sl)-n8)4(r+PLRp?{RL3QG+!!uR$5|x&9V8>E|2q^Grc9aTWwt8XcEKKWvr`77S_NS`IM+2u8osc%OKk=qj0s{s68qUk^pg9aZq$ z6NS}}8cXfy^#{1>O`NiUY%Ww>#Wl^D(}!i4Cro&T2EUUZ{IwC6rbT_0u0_3`*VXud z0|jC7?QPVPkx0GNOJcYGJ^JB~$E1%c%<^(;{v`CK^#yggPH;bQat+CTbL)?8^4llq z%SL_Au8QZ^Teq%^h|8WI@f!hAr1i#;Q_CfBT{;Q`fQp84b^IoeD!eAV5D0MUJ&Nc# zQF&#yhw+@Z`^o11ee{JY$JBDkk&wGGUc;3c=s9eVp}RxP`zOVHP36fv=$R(G_!~a= zj!WA{FCWwYyd14!0n;LBTWd#qEo|So@p0bGzgypwQ8O}I?dR@3of`CNJ)q^sxMW|R z)h<8nzZpM+s)tz-?{zLPyygxlzN_?Dkvtfxlooch^h)w!^7;(9*TU<;=dt9Cz-d;9 zwr5|UpZh>&Izq~>2(qS|zq%&KC<_(*0-g_oVfoJjEa?Tz{&%gk%)WVe)7Sn%ugu3n z^Kvsm5x3tON~%X2ZJm^DJa@8+CITtK`+TT|pN#YbrVn4PIi_ACaq5!=$AwcFn2BpO z5{l4Cn*hbl0&@SM+=i7POGmK!9FOK!($NcTSbQbRw+sp#d@Ebe;TPPxqU9kx_Wxqy z!T`1ckt!nap5+<4eNIoC+N~Mm#9wyNAb+|5g1tT2eN}2m)&n%eEF|~cBcQCqVHykEt_diFWuUoHczY5gsvTP8$s&m1 zrYeW-T}Ykmy0K-Rb)2#>h@fsl&;}jsf|bK>OLYE8DKte0yDcEQZ`mq0$+tXmO59XpX5cg|8cL{Mk{{co8ly7 z$wgg9%!BGeCOT`(EXB%}U9jL1`eH=Dg>{trvu?t|Yl9ekRG~Fj0pU+N8}NqsK3KIp z)%C53L1~k+O$x{@`_*JQ;S$XnN^l>hdlpGezO36%@ zEDA|?@ts4aLe96zpK*A7ovR+S2F@7?OM17nRfvD8p$C^v)=Z2CrpKRe<+-b^6!3vt zVP1|QeQqFNCF9RRsenCyPpT7h?FDqmDvgSZQ><&RpWnO0>N*jmqhTP=h&d$8*7>q*k%rswApr@tC%w5DFQ>#e< ztpal%jcjb=yE!>L+b{1zmkUglO?$PrredLUcP~}&ij>gzeD*cc@VOk{d>Hb&^|2P{ zq|Gos_oR4scd}Z|CGDh%rdF_4(EE zBko)ot0`a;V^k8xff>{a4V?audHILCP@krX^0{e|FXf&c(O-y>*P_7Olc!l?MkLN* z=RPeZPZ)BFMf|?75@K9UqNwqY;Q{}FE094!1%eaSZrrN(l~IsdDO4=YfHTKN{uxdm zzE-dr-0rlQdHM!d?2{|NQ%ZSLlWOJguBv$2c6C`ClB#fvBkOl7>7 z0&tYgc~p)&6y*R7V(?JB{RcMbklYDX%Ho?mAnVy5N@UN|EZU*suupkiO@Fj=pGvlr zRT4LEcI00rc2Bdsfx8!Xf}lk>D^%*sq@KgBs>7J6<%TQqs7-&#$N)m%3r#be>j+qC zt9T*c(>?#*uj)06f1t>s5OSy9YkJZ0vC2E&pVq=MW>rBxVwyUZ6fm6oCeRayQ2gLP z(o5o2aPA6JJbW&r+XwY1HK@`fV8~-B$J5wI)REV=*}GS9W&O?9^Xj1=gIdAQt{^b) z`=>emuRSnRFQH4#)+@HZ+-Z5e+s-R3zbf@7NcwWUbo&$Qx_GkIi@|Tm1S`1DziN3n&6L| zJ`X{dO?ueOkpAPS9vA*Parl8gnym9t9{(~^+_zX-p zD1gko5VhcEdIguWt9}r{2hJ0#&46!H&@+A{<=V8%t@o#^93aAK5Z9BB?(!fXq9^r` z&p7*kK`&GOJne&oc#5H?>c{|3#sBh>rqoG}fMe=9^KJ3(4U3c?wZKn%o8=l15=$ zYJ-bwx9;w?s*C2BW3Sh0n>Fw-JC>`5DX3!3x#XpvHm~3?)n&}FJc?j}eS9C4S;rkG ze4{}lx13HZsWA&&9}|dim3t*w;x`r^Nh8Q%5>=v z<6^sWLJ6u1s!`Y@%z>KU&-BDsUtSkT9Qb84GC43-cLISzQAleJ)t{-u`MgreS1D%i>&&X0p z6v{DsqlM24;=KU*&>v%C3$AI6lF6I0qqI*sG2ZUxeeS53WaTSzhK=pL#opY>BUXZk z$C6;io8bEEsi)hm`=J5m_rLBSfe5*C@|&k!uRSg<#_)}4wTqcu45Z^NdV;3Q?h8Ju zT!A=KL+FETbmoo1G~soQg44$uV3ZHFBa=8lH+z< zD#5de(I(Dimix|SN6try`~1+Dkqg%B-SG?hj7>s+)9M5^@>gD$tsg^pNh(?jgoUUq zcH+RJyix$y$X}AW$07YP*U?hxzh%DG8EtUY6RWnP+%dN-Ey1;cn*<%!?7dSL3W8gh z4Mf0Chy6}zZhg$_Txu!J&wem;LdBDfZBJXWG5YLXD#|buw`QD^GV|R!+TwN?C;HzT z;PIXh-wy+SelHSgTVG+lD#wmm18|os7CZ>JDjpgIhUP2fy_~)$6oO3bQzM(MtE_bt zfO}&^opDHZQ={SK8CRJAwJvC@WmVVHU?TrW^DX!hM5;J z#eed*ApSuwvzQ~TsA@TNcjP{og|BYyvU|_MeSbqXc_B{7t}dFK#J|%JyQMYhPJ$U+ zp^=T&Kdnc^gNprK+p6#^KIYJj%fVFlL{-eWzxT6CBr)UNpG#l3#-B!(vCARf9H~NE znc=4GPm&2o!l?06D@}J!GZy#Z?4l{LEKO$4Vsj0HHMEtjuwXqI*?QUOs%hk{u0XnN z3kwEVvWCN3S~oZFL~gsIW~@}IP=9ZuTan3QRRz04yy&8ihr3=!8Qp!wp6O5m6U&CX zu1NX++$NCWk|-3gaZulp_Xp}?qRQ``!qG9cCVMrd2Sj%iY3yK&F$!Xmsif(27W|gT zT}k673(wu;k((N#o488+dz62O7cK7AMO_l%%6I#CPun3~s$STF-c&H17H@Dh$Srw$ z;(;`E6w7Bau|&T0{lU1hb~j-5i9v0Bl`#J){9t8EyG;9>oERoyyA}_i^^WvnnEU%k3-y3H7LwsyQ@)=`JGD7X9Y$gZxc0ebA`enSJpc zxMt2_NdXi;i(N~vKM(*)LO`q*7&*PweECG z?TB57_0ja`Rs%+V)RQ0A2r!uJA)VmA_=B1w=mk|yx0RBCMF7>;>F#)`mmnom-_9Y} zGl*wONxpp!&CWJo)TK?Zz5F<{?6+K7?0%bXu@wJF1+rhK=&(`He0t7^b#x0Ki_+v1 zGLqo#OkY2|A|ya`AQ!N-1B_2;KlNOAc(_$*G3wSFZj!MuWmRpsSLIj6@fSs|q0?oY13P&5 z$*ZOU%|^YhHnQeq*>FnaS4|p8Ah$zgL@-QqsLghqa+WP7wm3*I^lvz_2E@vzJ}E!S z;@e|foZ|M~Xk3LRcQz{P1d%Z6R{u>WaPhsb1IDzzM^8z`*NyGOE)JfuII&YK zx3{8K_g)N5-%jO`^Db`Sag3mC30dEd7AU$AS+$ElX6-8aY$Bi?8$Ow7Mc^phR>yiR$Aixx=m zxI+JqV;DrdT<{KEh}p%~jB$Hpx1^A#&-Jc0V1$22(+#=r}UBaiMd?*(4Oqj>p#gC^_I>XZ@xAP*!@(tbsSp{WL1{m)Bv_ zn*oQK)#!t_Jvs~x>eiQ5Oz$VJ0G#1*LvDVRWw=4^B1Ws2Nfpm{N7a;#+|S8hccU7$ zG3FB7TXWLWl1+^34|ifNOuDXteK0=v)QU;E@J^T(slG-lVk6QV)|RcmB&{1ef{UFvT4i4gA1wR<9BA3~&W*38!&>1M)$AcG z-f6xUPB&$obKLH0i1VW%t~!uGtQK9CN+h1YfP2(=?oLi|52iuzuxlE18bm-);ClAb z4bT?@v?wn-y@-f@z|-P8Avyh_eS4{!rZ7InD#-rNSdzV$f1_k!tIW~N27-rDBPCK# zN2wU;BN4{B3Z!wrcrrgnMx}%-4DSp_znyHAY4lA1dBA`xj?+exo!fp`-NsFyBgY2h zS5;@eiyF(#yaQwCcofd$%r}5|QDKoYN2b(D7VfA1GEwM@wffTXYW>Tsj-U_4vx(Nq z?2M9Tn1ybeyh6pk%8kPvoTM#rFFZE5czWb8^I0Io+!@x5Gv6$XBUg2EmP1^ON|NG)k`AjcJZ>%pSFZJ|?tRrk5 z6@TvdwfIDyb%Wm_CS%*~lm(E8iH0MpDoF^%PKU-PGe!PvhdFDbM{*ap+a(FZLC%ww zMS@|91#Oq#sXcqMeLgPh;?meuc3~@KuW?BFc3LP*7r0F(>g8qs`1)@9(t%k=3;KO< z^ax(1yZ_7&*e|lUEw^UoemKL+;0c}!s63jLkaAVd7OzwXe6#8Bxw$yP3QY5Vz{*=8 zs()VcdN3I|^Y0Q=JCz^4XXw|ypw+8%D87399@$_RtmSl-9HDAy^Nq#mUMran9hXXQr*R(xy!%-t_>e(rtp`n}|lTAvnPtNvuw#o@V# z{Wi2W`rlsppC0%2A65zZN;9z$1NkWjdcz|N;TL@CAqDgDj=d$c#>w@8JPNy6n$#~& z+2HDeU*2@Qbu__>?r)x{=|eVITNjX~yrB+Xl>Q#wmhCqmYkZ@i--S2NZ_d%TV(7x; z1;}w}Gb4>MeQO8xOzhI-f9)D(RWFW;D(h>>?vxjhGLAM~oJ8($+qqPEKl3*>W|M)Q za#$iw&w4sF{gBJ*99>U^0Ym2HZos1K)k_t@_I)BPRZwWNE5GnFChDI@2Dl z7=A3BSRDW%ikqH&8(jq81qq(7u4%H>m3#XD3}qp@Ta(?{EJfVf&+L+46sY0TSKmJm zrY;)~BS!~d@^52t&LyY<$%{xcwn1zYKQC>)A8Ya0LGC6s$0Z;u0Z6J;!3M)56+BTf zXz!kh@w= z_ioJcSN}O&vF>e5N0EY)2X?oady8~B`=`khP5O_U-ZtHwW9z&>P7hjqpS-+x zj$~i7OZ95Yj)t)s5*htb zV^y4;JcTOkyRo7G75y6(uLSPn_nrDkxK`TY(x9rXmIsLq>Y_8`mjWdQNr{J@m%SvZ z_fO`>V4UZUQ@(f{xuMWaQ%>luU=D@*C1r%HANF zQjI!wWt9|LGjs5-D)4AxXr>dUSV`Xg^shJ0C{}R#K288UMJ{0e{RjL4F0drdODNg} zR)yBVjTtAjq5)lmL9=|Zl9czuwqHzvVid~QkR)XY?iI!=r`&nw(lXO3EP3L*|5=DhKkkT-WqVedyko-gDt)#lv_hJ#aW(Jxwu3qs zv1=k1e?Mg6o3`moJHau&SiLd45}MN>So0CP@g0{n+2$umoY2aVILapBU#Jx;Wqq&a ztYrea9E3|839CTLFb!Nz5kQUAjxYDtw5(=b-NN?phjo8ybO!E7Xi<=6eU|E0d#%X$ zr-@jo0v!~!6&JoMAAT)^?YsM?pi^BKHOBtqq<2^2tID=OS|Q4>L3JW|{tx!ilm1a} zgm%6A&~IRZMnR={qEiv8;*(o+yrn>-^7l8?wSt7t&2xzZWGQ|!JyRzDBl6|%w(96N za_(EmYM*!4XIU_3d>vK`_RQVsv@5wRG&~25VuJVhubz!70bih5NPC`q;0XR%K}eAS zT6@o#-=0n9()GtA&B=Yqvld8Uu7qlmn@rFPq-I$V^q7u$*B={Af0vBeameU{@rGg5 z3<@RuQ=8rSlp+nMLgNg*R~E-qA-vdk@#jMa|6_AZkxq5b(#wx&?wp2VY$~7twiXcD zF|Q+;urlvmxe~MS+^-Toq{alr`=(Mwxtw$cv-|Dcm9{x!)J+ZVd-1F_50HW1g(2>8 z?_??Da=6s@*T|*w1%AIp@XpR(UnB`z3|Axxk$6WGOV>xgRnK`^^@1gyV@|P+^aj8i z5jxI=X41pn{e_fd)&?aJlaId>=-ygJYD@`DO8cXBmn`d&&xoHaowc{;hq@Nb;_>CCEf zMatZb8CKk(DDxItc|$M=%jfDI_$x! zNH-LOrgW4!zX+Io>DF4Nm*pyR;I%p_zcDb9nbkFum1DdkgNNZy&mt}2^D@$XgRPmW z40G1pgpwyL+p(CmB@gd*#{CioMD%1Pb0Ipf#5z<;_OyM{8U_ja`WMQ5 zl$8e@VJC}Lu;*NITzqJLG(nTSMlZLsJ(r3ayU**QSd5`8M~JZrN^9u9w3>+Ir_W(` zM;AA7AXGyMCh6WXFtPeWIr~Li%Z#zSrLrD`)uFvG0Jyk}x<;Oa}UmvOh-J2z^E6Efs7~#0j zof+?H`2`|v=Rj=q4yr$Y$XtahWOylQCAdu2)X$=ceLkU-KWF=vfvXddmu_!;2-MHO zVln&OM2kLa)tdB}^=d|y75>RSCH>+)t(Z*q;LnkxS%wt3&}5mYI`%p(aj&5Oul_mr zWbqe#zD8xMzf__a^EEY?`Pdchf#A~#%k@etVk2_vjrLp5Eg@6W7Xo76e%Op8XG2FuKNDM`POr!<3E1n0RYzR$f4r@4Tl*7lDkH9u}*ZU0j^j zq5PheV&$6#F-I`gjZ(I;fnHxJ_-c#(JPu*bzZzRs)`BQlKYGvck=&kh$>Bc!6Yjtt zi`ENrGw!#aG-GhS1`OfiSg=KenM%oZIhNPq2qi441f~je!gs6CR==5(aOvw7WpgxQ7JVWh;`iOH3AfWA(WFqT7_vQc z@yw0geu0_30-xWRQ-=dR`F+|*^fo20iHv4;w)d|%T$}gH^+gB^0KLj~a4+cl zXOzoti>cH{)F4&WpOuEkPI0(~@YUS-LoAYc7(!*>RcW~-xU0Bjc5cq}CVgY|wDNup z^Tl@#^0+664yPLond^(1xNnt2{p~iJ(P19FVAQ7n74QBXA)74@Q36YN1ai?OL)ev4 z1MN6-*J~p}V%u(T6=jbZm3&nb`aTEzkg7I!nCwJ7!ZqCC`UQ!~6K=<6rTW5(Ga2?- z+c-~gz3L3~Kytag_GvI$}Je(-YHPN^Q|IsKPpb1NnD zl~B%MbL01wJ8rW;ebsqD29Ko)$g-ugc==<00J~)NpTh;3%@n~2Y z)op}m5VyceAhQg$nkR7f2lCZTn*IZAqn=?9Rm1A*=RjfePQO!O%S`5|2~3yzJyCE4 zS000}aY(n41T@sVZ`yMl4-S4blSTssl#P3y$6S3H-uX?+vf$(M(`RLr;MiW5R_!!* zg#0$9l|%LFvp)|sI*p_+EwGnXjdHqVJpVdSnI?n>Hqx-I3ctp)QbnxUapw#Use{%w z-Z~vs(4>&nXH5in!C;EvSi9&VQ>qiS3K-59Qd7yclC@MpeE zJ8phE&yle=q$LglB{fIy)OQaM*z46(8hDiTG-P1lc$#Y0r}J*3 z_nvDbh&B1kt8mQikVz$qk99G@AS*phJws^jlFX1tmxJ2wepQ9Pj<8!&OZdNhKcEqD zD%!LlX-0CG_`!W6M7r0s5Xwb$%R1?v2Yk&4M1>INeKF~s1G*ZbC>{CsJ6$CQl4pd+P#IH|1i zX;c=1W8ek&##tL-=C#|)e?H!g@ObrTK=yP44LifgQTcsX_||L^Rz*)#+0W*DY2XRK zpie3G?0v38?baiKp;1P9(*?p410&04!wY?0!i8P1VnQ>>`|3=|(9}b1=Gc|BXn2n)K1R84DxNvz7r$oj+aJQwfUZDPKT7K{O3%w{)( z1YFvjhAtV`cr-S%VGLBcW@Tp!>kpYkL>d@p@&v&hzyk-}BIG*85e+nT(lv44TLBv9 zV0_>XSLu!Vj3TVli&qC6)P)JES1uxr43{HkbWvg-KVRLaROC=62P-ww%(LG*j&V=v zz|@Sm|NFh$fTv|Ct;|p6wtumPWPm!SvOQ!P-&#BE+H$Z~e!g@JK$3pdUdBx7(?)S?gHTqiAsH2MEu0&^X3)IsdYXKIe9{A zmZjSZ)=Z)rV1XNg!sL`2)N#Ef%Z*aB!_PH}E1!}FEK9X-Ki|Id{4)IET0Q8UI_X=M zE?nSeblo4W(9~v6h5#H)W$jF4c_s6!G7{R%95PdBxwtKNn$3Sdo{Yu`FnagUr9ce) zbo60G(8Kun%-l3d*h%t)aBk^cf@;A6abyE4yZ!w!!wTO)U|4meN8S~jJ9F6B?xVx{ zt20U90u8vzg6h`0kaP%SMSWtgyI}bNM#Rywd4Pt^%nU-YzJlt*=nXiXzIOpYQ^V2h zq5{pBb6d(4Es(w+s$JxAs(vcIhHktGKNsW6wkPX(=QOR8yuAcxxRr!)~`i? z)@eJF3tBTBA|IkKBdIgD56Y0c%W^uS&J%^&qKO5qhyZ5U3?^&lx~6m#`fZaFv@dO- zKRJ8qcLd{eh<()Y(FRa)t@hmjCQ){^tpz*@7WS^+vPFUCM96NBlp4rKpe zt#B{4VC3XfWP3j_@XgTg5rvpQeU=+b#Br-btVPuMrREx+5Kz3?zzkSyeO$9a&C6nV z7(+#omih8<|E>ZHTZ?L--y-4Gyo$ARcQ2&-ymUli! zgMBiLc6u}sGBWp+)UJyQwZ#Vvyw+f=U8PS7hD9k*;$%u;u(8?Le52r5lcIZ=a(mR9 zKYC#u28y4E|D)`z*x^vp){^i8o3h<(Y*TkZO}NdiS80W?c`XyxyQ@lJy(?0?r&2lm zwz_5>Qwi5iReDsqA%Aesi%UpG0~0{e8mXl?{vcCB;N8SryI{sM5$E12iFzI%ynS=# zdGl3M90yHm{%bZb?ck%$iK)$hD}Vg&TOrTPF8|jE-^1Kv`{7Ohd0aBw|L=9e^AEy* zz+BR zi;Z4$X+uXs_|N~`Tiwh(UjOsXo@JeBWO3SX{pY7L6GH34b=ah`c>nXedSoKkp#;M% z%}xLP?`M*IG5m0{*jN{KvN->@`su$pf$l9`M`?4RNnAysF>55mrmG`rb9fN>x~;QC zLN|y>451!@D3E0W6!n=e^Jy^Aiaf@gp_eU!BpUtxOD%Yyomh+@)6<#;Fo10m3&1p9 z184=uUrZ{mlu=XCRJb-*_?-j&&^XF^@*0gWe-P(#a^_d1Nx8OjFj#jz7UDD6#MggX z!$Jr~@9rr{k7UiVsvCV3NdQBbU6Kh7dEMAcoNI1ahi zS=k{EJ;-J^bU{|TXDyEzZxt%ngs_mLfRbX^1+!FUNV_M?_0F0uGM#J}oO)#t{`d6) zpweo(YuX<}{8{DT2*x7`<%kqB$7qm+|#iIc0f%P0PGAuu&*jtb-r4Szam!-Zr8 z$shFw0uZ8C-d4-=h1+}MEEO*h1-T%3*pG!vh&HTVjHHSNAj3`~fF-(Mn%s~S2}xJT zHJavQRsVeCkNPKq((r!zA4{i)l&NJJzz`UwZXQ4q?@f>syNpMcs|7R=Xl^hPLMT}l z5A$pD8}4%XFo|>zAcobDGr7+|k@B&sNVp18qM6Kvj^XF*j)<&2$~%i2iBWFQkv5pS z8qXlr&f(2z1&c^36qnR5Qu^~TN}?bfn}$dqC`l_mK}T=K#fok~%nB=4>&0{D-wWMG zf-W+!fk$G=3>FLgnvV&v=172$XAIDpfm}@ z8byGZeKWu@b0BSR&*>r)YYU&*FSsV?U=L6SB-vP%%|4zKgE>oK)A?ECa(b*9GB4Y@eyf}jyMur3jAvHi* z=Oe{16U!Z<{|UdP*|27fKtc*bt|WD?awG*Ifv~?HGHIBWxe;YO093J=OkD&+#TXOg zp}Z~l#v!c#s0dNX8ic%xFs7I3_<4XR5!t>M0U|3^kjfu#GQ1cCnK}@8aygzqP~TAo z2S=H4FJE@cqhWom3ZP8kQHExyja8h=ULVww-2~$POMSjP5Xpi9Bo83a%>+Mvr_8&# z#qcoy&zQZv7iaV9FhbAJuv>Ld*Ti&hQvhaUVHO&ziy(39)=Nd^RS7k4ew{R!3eabD>mG6NaV3Y4enp97zXzssPEA)mA1`oAB4;Y8q6k-tn&LaR6z(-s!- zPjr#EQB3?SbNS<=%EidMSA zfj^rlGpBW;5qeGFcYSuA0JtmSCQe_jaVa+iEcO-Q)TSKZtjK+=;^JM$J9B+m{Brqr zx?4@r4AQR2x~ccr9Zu}qK9dR~w@2LXdSL6D-M!TF5pS5hs58V9xf#H&Qp9Y0ow;ogDw+--qvL0Uz(f86&=*G|zZGc{_Uf`2m+vvGsd(g5|R@I1(VV90m<`RWD*XH3?Fc!; zLGkiOPjB(jWW^EoGYL15rUPn4dcRHoPPA3*b#uy7Y^PAkQITeH)0Rs`T9$;dLeZ|C3tWE)9xo`m)5384O!Ue|HnK*~ zaZ2RrV=*|Avd<7tp5G98?Wt~IbDe#n#>)TW@b6U)y`V(;lpnqs^r4W;+&*-m+y2GZ zwX6drNWbWKfj6KDS=(Ou%wC#+N&8J=p~tv<@!DatZbqNl#TlRuWfZ%4STg>f88Q(jtMu?j0R+A8Vl)7<}jgTu;0%4}x zYV3R%cWRYlhyFTmNVeCvL?$hb)VBl$? zL*@KVQbNd~J$eJF2vXtrPYVC=1}3vH^0kXreNhqJ31d~7koG0~Lo1RM%JkoR z4>ng75zvw^&ITvzCt|qecgGC<>@;{=^$W@3e-nna6HyED#jN3ft~VCWjF~SK*TGw_?!H?g+7Ey?~YtsBnF}DUHTVUl@+nbLq zK&Qd=Q&d)0u(xR85Mql1fG^qsGbLKsEJYRlXEBif=VBNVx**EqQn}FJplBJteKZOz z^oH|q3t53Z2a4dmr^lwq?3(asT$i>&4uZyA-J6K|64&$qP>g&10Kr1XUBCkI*MPcl zA7SOJHJrF2NZ?hHc2~Pr>iN@ac4y?Z0VIei#RAX!wtl{MSwgtMtv;b7=I8rL^e0%MDp(d^6!?6UMYryUbq;!XYc*f8LN;W zcLN>*JMkX?;-MG<4%4u&5?re3n}Bl2bz`-?h6>pTxA_(X1(*HvBzd$}74Lj=# zkMi$F`?^cCBM*ho)!r`33TfFB$Rt~=*jtx<-N~z|hZ5gXql#^VxNV|CEr$7%6?V(w z-T=jkKNHcHcV)3%G(fUL*ac2XD9oY4Ic(w>I-4;D!Pg>;T4Z5{E+))mX6m9`p$-v4 z0Y=O-qi}Y zUO!@oKwl5xU>4b~f|qMPKMw zHGv||O`R6L&c|3YSMeOPe?lS-p|x^`$W~2jkwRSjtz7!feau7>S`zSd9Ho!?h(c@# z^8u+*74tA^BRTx0!TDeUpL_GI|113N`S~CC{goudhezeGX!3v;_Ztm&V}9sNm#Xyf z(rbrqe~t@neeG4(Up+=O4pj}}T3hsKcYY62-E4)gC&hpo?$g~ zNpD-Ba9}u8F0=)0xX1nMfpc^yJ<;m(4!a8U7^E=7^b^L$qG|7Xkc!$t{!zX@R=rd- zGVj35ZJStY%v+tUml1;)4DLI)4Bs|@O(^ttWc#geSM5jRFn8_8;y5hq(+3*mk=ZDM zH^!vcq{tKmgT6{p@U3R3a`#vX5NB15P>5Ce?pH)~Gm z+lvdF*_Eu#3blrRKbO@<%j(?_&5@1&NqDcLe0#H20}Ta(u8@V8>$GQ;Vl4&Lzqs-; zw%%pWOLe<5$z*g5i`kQ7C3>NoXaO}&iT=`$4LIR;>j#BB9R&=cR9W-}ak0H#3pA#sF;EkO~p!r9D(wqrTH7@^c+ zzG+YUleMu_`zY~(Dn#49SFgEgKIrFHU$_e~1kuvkbwKCAeBF)Ow@j%1?N++kDrS2q z_U`8`h4rZR7CU1p<<*~0klHjMtzZzExhBO{Xw2PHe4g;Bk>Kf47#F%d6(Kh&UrvII z=cPt{>2?wiQWPcQS~U-dIlUmo3Ee|yIz`V#uo(z){hk2-qT$~L;uXyWUwXOC7Rjr-NQ+m-g#!zq6|wK{`7}K z>?MeHHNgCJL)Bvou+F0L3VBR}P-8LDO050>=q29CX35%F9J^Q*Op`-xf^ZLS+{@r_ z4S%aWV4`ZAk=A6K{!!@rwTWcxM|;^=A83R@Cf^uEJYb^${WS&}-$(B|Z4^1FcH}G} zD{!qV*#OUi#g`t~-HbX8^`i)?@qoi?{hfHVd1$1;}j%$=Yo80|1uW^~_I{n|2=$~j3q)%_swCq=b8 zh-^hRiD{=zhE$JQRyWeNBV1fx3crp|^wQ!L0R+-UR6MBvigi-ibpbp4Gi%7(wQCM{ zX+1?C`SO>Nhp{0M|02kmcjdS@i*W;~bpUNFii@8$)a_#x4nAlLK-zK=Sw8(&#Kj=d z&{2~1ML<1jP`kcqvRbBh(k0W1tXj2y@z2_m5eN4pV8kZkQ2^{KR7q-L^W|MfKbr}4 zscj2PSG zK$Yi}8#$-MAaWGc){55hHs7UF3VL7vJRatL_!rPbp8tOaQU5=yKk)y5oBuVvn`g*L zw3zJ6$JWq-&$0oWhlQwy1^95`YK2VKHUp{vcnUGXEyWpq#0LGfQW?VZb=f) zpnK9%!sZkwWKk8>skrFsRhz;OrY`-v2u5ob|5r<(%{3eV;EbS&IP4^W68|`}$qiogd{196t_?{0qL! zsiBXx6q+cru_ncx?VT>j!H3pyE5H%jph&YM-V3#L8nlJ33-x+3sN9(jF)n9VyCt$K z28%OAGhhH)fLzSnH!b7brDmmuF5W;GDy0C0sTbX)7ow^G+wiKv6_R}%6xHM0o1mtr zK~sZH z6+ID&+nJ&^4O&~2$K&Jx3juNC+c;L!3f<qJ&5EBF zLYUgcSl^mgN9HA8RtsO-frAGjrQdrbXfhFPz6}8@QPvHG?Qk5kjR%BCP4P)Au?(6; zUSD`a%iddW{<+aFJUlieU=2J9yW|CUBtL*8I8;=p&Oz z;v)2*r&DBE@2CAFyH(T&R5MF_zx~z4(_!3sW!ZEXbq+=s@V~`x;v*%m;K&HHhE^j` zC|NXSIi*Sd#HCo&Q|bVHEQ#!b?bVk5s9`arIDT_>Vqc;7h1WBa@)3ubbQ0&5ap+s& zUYeGRrbm@G3pj^@jqZ~?XTaePpfgp1z>s3Ya#+-@a<4+2fXg$l?5@z?4%UC|cFc~! zlaKXcb-S)*TjO~diAQgcVtK)?N8wna!pd3XVam(pN9f4~`{a)K=8^RS!nkr09y4(Rq=F=nd4WN2$Dx}e`FGt;2Dtymb zSQJx9-jk>xd@Tg&b>ov4D_W5m8rS(IDQIrqX1fYEfaJ8T$p1Q3C!$jD#4!s_;7e7c ziWS;Ll&m1k3K5W7RG%vCH2Kl%a29PF+uxm5%r6R=%SX%}ihKp>PU>*V#wS6`qaTw| z-B&O_?d5mCEZ*o4gIu z6r;J}6-wQyUxAtKh+`?U+5IgJGwMl>y#ezOO&v7|ZFN8gz3TkybnsI>#H!JBNO*qNMyOknz-kOS^ z(a^Pja!7s7M+PFa(PjU36ZT9e{_bo5?z!P!ws2(=d5KXhsg&x~q&u+yRW2-~#XCR+ zH1pyBH;#G`UlG~EAW;{1*_Rn8lhxC=x>c{h!~TvzU3Qo3SatO*!Eau$_EgX=O$ZE~ z=#Z!HM>H5|-tVF|)rd`xY>c|`hBeDoqUJift8NN_@K>`@l0dG|RO{r$W9KfWU(#7v zU4y@chD%qCFc#Eab&_d3g(l}ZSQ0sc7E*^<0)Gi5xNV^5?48w@g6Ido4u8X+~symmk0JHk{mjLK#}Ob`%q`$k++P8uH8FLI_|8v#nJ- zaHXtH$rBXjsj$>}_DO68;m2WS*2`B)th!+K3EY)h7=}@qD}!0j>ol1%#I&$-pZ9NA zVc-^Bz1|x+YzVvp{d?_+vz%ay1*9cTU2w8~o9l|a=jNJ}1jL=1 zrF9Uz2Vf&E;IUzPYSvy%aQ~1nIRL*#a5O=p)o0>@8xCl*h54(ymh8dBt37=}a6dM& zOij5p6Q@lMPHs~pmzKgL%A&oG^qPAX&aElf6RUqclWfGSiZ)uo*jYs4f4mr$q(u8g+S|^}LfOEtX32k>K?whZwTr(jBy9ST99sh})wZ3f zbtJC6fT@Or(#S=SKck_n^j(5?%*{_3wzDu7;bQFrfs#WYP^ zBA>sv)&IUlh}Gcwny@O97%BFPy@@Q7c;aps`3f|&97Aw~$l?3C1Iuh;(!Gyt^Gke} z4R1>|_~m!k)fi7+Y&x|k`C3z|>?P*DfHZ3KtN9BOjfK=3I}LDYiZct!*;gYMmTUnA z1aWJ1R`7;c=yWS@PKSvAXnZ z8t0|J36ulq8d^65QV96EISFVh6s6PHdUwcksS`Up5b=m@xnJ?pq06?yISCO1aM{a_ ziT6C#^Em$@4semH#tho z5vt+!kd_I?f+P5Hex(2%bAazJugG6fcRPnbCLd9yR!-i23^5_S4(cVIloXU{7e=`e zlcQ(TaE~@$&*4^-8=P8(+!ZfHjngJK9*Z+zM;4iW@+Fxw3*(29Ou)N}O+#uY=CyG7 zG5N2jd|xe<*;Pc0p%{5?|5H#O&vqRWnbZmS<;eKF<>0BKe;*8Sd0XERn`cC{koB%t zWNXpp%1g{fAL|(1l>R)2oJ?@|DaAEEb@ba#o=~hWQk`Wqt^vXkN)ah!sLt}x z1R@;3q-3PS_D~nwd_Cx$cJ^MsW5jF$oUPyUOki%&?Uyv3qZl3$66RPI)@1VJbX~Jn z>kT$cuL}dJKt-FTtr^}=DuX`fJZF+v$0mA$ZPr^C)v*Orq;=)RpLED^%%md&r-a5| z&)dpxnmi<&TlQ=KRr*sbf!DMA{`UuuYorLQqXR?(+g0zyGEajXAW+J8PP^RGNRsWd zpAj1am5f6aN#E#&iS=s>2sp6TIUR7UUWb?ZnU&&8`roM4M;??tw5vVOvS-e>&ur=4 z?7y2V3pF9F8lH!f{9SJz!TQU`v>b*YaLtslP%Gc{{W5W?S zpUyG}?(H|;`M*e_t|4mXnc`B#Lq9i~rIqhDeV5#Zv&!@D%qBjj2}=C{NpwLu^x!!Q zDUaMla|*LkhccUELO&j@uVUO88=zeS?(d`<>jcS1elpmMY1|1LYuK~Kg&{q~LWG(W zQ!*8co<#3siD4|a;B)jo92b2hr$Fk9`BJ!!l6;51~s%Utn8+y97 z$%%sa{s&Nx*uD4p;TTWp)WsLga~0bS!ta&mO7Xp}VQlc313%!W5XBMirN8kniw z^8LNG|9#at+39Oep_FS`keeCl9}QaESF!Uk)cu(?7WPE&`y#mJa;q>-Wdpa!wT^98 z5^P5DcV3y*Tru@P%2;R>y$m&ykdL1SCERbcZ`z)T6=;8{ml+n))i#CJ7nSGgHl<`6AH+?2X8Ok4wi3K~Lr2nV6)8pS6T%wf&{W z+>@ya0XnMV=Uf^WTaCj@_rqyyFz1JiPYW8(GpPMc+Zom(V+ul*Xz>KHe*Y-6Q=#g; z0ky~9WlTEnxb*xN5P&_%`8xUapPJ%vVHoMP^5zr+L5oOba`QrJU!BuaR~yVJtgb(F zyM2`giS!vlwP-QnVEd%$nUI|r6%LAg`Q{blw;dTwN+Fd3kfM!iAxSNwAivqTVQ_~3 z3r1<8Hb@QVjsvTPl;)lT@~neIR6U8v#!~r4QcssReN`D(YC-a)s~XC`G8b7d!Fs~R zorl`bW0snAtLn(sebsh(4?SmV-9aq|tZ0=n zqa+~VX#$Xi;(VRTP_&OPz*DJQ$dVbWCLM&F4{rbGdi%=^`uCeg_P*L7@tbD1CC~gU zp&X%9Eb?}J_hvUmwuWjsM;Pi|aox3+?1g+i8;Pu2I@UhG(BDcYcvSLSHH%Gsx&wn< zn3?Z#{K}Tdzm`G8YcUqTQB5B_vWl61*)emQk5?M73xkzLi0|Z9(tq0Jo-$IhLDnC{ z91D>+J+rE7w+ChRiD6W+^NSr|r^SoC}*3>87KVdhWjg5+ZmUwI3wnCUBvuRb6KoH z@1XQU*R!^jpsziq&pS^BxK37V*PZ02ZY|7?XOlKQZ4zvHwJDP~G$6SCYNNgEwoU)@ zKT#(&4gCKx0PqsqBn=&tbzhXfgInJfvHHD%Igu}scx7zJg`2j<^@<3Y5kGZ4W2=o< zF`$-Y(AhkS8bgzoy3;CIli#8+unsH*yGOk0>#45+7Cou?*{T5xj zBj&Z=A|h6=f6+PrZ>g;l*2FpBgIJM7{%AC%;sY$+;Jh9XH{XyMz1`+FiytCmR zy^=~dn*I>_?wvYmW4z&D^Q79Ove{?w1Qbur4&0qeK!AZ_CcO{&@|Hec)D-h-ne@t^ zQxmdOg%M1_mr>DaxpDbgarf5&et~mX!m1XqiwW6qiL87nTOmlvqkGuVUcdM+wdd_6aO6G&Ndx#RR zw%#6J8uoR$pNcbhl1h`}EIva-xtDQKSk z)`4Ay`I!aQa>FYASgCDgU6?C(^7aMg^L1zPq<3F};C72K%wVqJ*~lN1vz9><&Zfwf zA&RniWlQ+ytCU59oa_nbg>l9voG%VQ_U+3e^%vPvQFCE zr)!;;CqxV{Io_~gR(vFsly80BmX2(%O8wjnPG~+l&Z{@jI!F2|kb#a<&Me{hIHzz^ zh2{B(mCB7fHcQEvq+PZPzj&ecLcJ(_KAC0WKl1^bQhUfUlCOcx_ti^Q?Ouc9)YrTB zT2Wg+O*YvHGep3%7Efg>52(laKlD;ayd$kw8{>}qGz7d)Zy-bUTqTM`RN9oRcNimp zU+;P}jhBD(tb7jtYy?x}%)>BmRUt2DfH7Z8J-L!g>4dXY237Ziw#>D=?2%;O6D8(h zDM)rzjw4)GfrMxtfnm^DH8|wkV+hfi{^hT()P3?R*$2i>3r-w;<%3LCc6`+6-gA$- zsA`5HW&W~LV9cF=lo_#m;1ip*f!u~a&1AJ=YL!GRX2UWc4;I*RDI>Br$Ih~oo-`59 zs+d;??iLvoWydj(2>E(iM57$%{Dpd12)EX#raLgt{ZsLdzNZ|42P8McT0+EJl-%5{ zt4j6vDwZiaI*9GZJ|qqYp5&E+*v8ficTpZ3ST58g8_dEDNDI)-tz1@+@f5=hl}kOo zt9LMl(C=p5w^>r;g7=K3mT%P5tNMKU22*1IqFHCu$elAcN61Hpb?nS;7?xHHHCv z^1z@p5hk$H!cJnJPQDj7lzK`#O2phUYgylptn-Fp7g!{|Q+L}Z7#H*@VEJOo!Y64G&Be zWn}X6^Fx~}we(!#`A=fQ+&i=QVKp%E=39r-o3MdFP`dXc%Aw|>W6u0 z=S=)#m+V0lhX|J3lHt9IJO^g%W`d&<2ORCgR6sc#Yp*TnNU*(3_mqACOwE2M0^%`N zFL`t82X`)PyK!>+pZbpX5jj#1OJ3U6P%@=Q*Rc|!FLR+>e_6iH`~C^apu%j+4MxZ8 zceVsZd(#R;gWUyN(Jz3-|e^5ke80U3UbKTuuh*)P%9h=2sq4K*xO zvdp|OHHJ@oV??frO~cbv`gMU~lOKt2!UM-tMy9dA!xs?@P=b1b3swV*=2MirPLU1+ z2VAlc2DD1J(I+oH)9N|1mPmfY1d(F-RIFfO7zvpLjNiLSqL$*0zIN9~i-k-k6jzIc zX#Kcp$i)d)R}35HciL&!T$^FCx_Zt;USVGjd-icvra{byS&HG|1C>N54_DKUxHWiK zYj+vUsybKAh!vkzdRN|STcW63#*3*B+Gc-VTQ6M_h-qQqBZu2>yFYK%S~Z40og6>+aP8J?}cY`+_(eC1_@K=-Uz0UI^^ z3ar?mVW!9>#8l0h--?NMe>tk_CENH$D#`L;gCmn)I_vihM542I;CLa3C>uRshhx1f zcaBURNE&d`y8f}*M|0N)GwHuqtd4Uv7Jp8wxv0R|8i5X6Pa_I;oI#-9NY63krYz%9 za&w2EfgQkJjtk0hwNed@r|p8SCk(Wa_{YQF5u6q{kLeL?ue_>FG3g(7xuo?G8ug`; z{r{90ly4shuP@cW{IL1gs9V?OgaVyyvs=_uqFYL(>-y}rZGP_oL2gzeQLYi@$2BB) z|7yy8<@)RxTh=B&v_kT;T6)&PjwywqAnMiELaj`2N!g=VxAH zdy1L{&0J_oW@53ogzeode6|<(D^|H*9W}?g>bJ-wT9($igro}pg(ijN z>EyYDPHRdJl0A!e9ePZ-pp54D;L5Q8_c4ud^!YWZ)V@E?y;u!l`^Kpo9|);Zp^;Q46@|!mk~zs;E%Rp@R%Yu-TN_XvQNAnh{J`x5etkS! zC6gx7{19WGx5xyor5#rXo?h|U4ASNEYiGf8?NhGKD{wz7y1-9ZP(s0&7QZ2n0=hOi zwIq?{uU@fEtSGpv&^#@GWT_gH8 ztb<Tc1{?f+GFD z%K5hoegoWqyY1=txDVnM;gUWGFhuhz5gGe~fsw}FKh1syyu0=`fE%SdLI`n5J{Y+} z!zcdvu9S3eXKo8vHEy99HeVHx{JzSy9qBX5y~{&Dm#@Bd$$tImport. +- ISIM-1673: Display mjcf options in the right panel of the Import Dialog Window. + +## [1.1.1] - 2024-07-10 +### Changed +- Importer frames on imported asset when done through GUI. + +## [1.1.0] - 2023-10-03 +### Changed +- Structural and packaging changes + +## [1.0.1] - 2023-07-07 +### Added +- Support for `autolimits` compiler setting for joints + +## [1.0.0] - 2023-06-13 +### Changed +- Renamed the extension to omni.importer.mjcf +- Published the extension to the default registry + +## [0.5.0] - 2023-05-09 +### Added +- Support for ball and free joint +- Support for `` tag +- Support for plane geom type +- Support for intrinsic Euler sequences + +### Changed +- Default value for fix_base is now false +- Root bodies no longer have their translation automatically set to the origin +- Visualize collision geom option now sets collision geom's visibility to invisible +- Change prim hierarchy to support multiple world body level prims + +### Fixed +- Fix support for full inertia matrix +- Fix collision geom for ellipsoid prim +- Fix zaxis orientation parsing +- Fix 2D texture by enabling UVW projection + + +## [0.4.1] - 2023-05-02 +### Added +- High level code overview in README.md + +## [0.4.0] - 2023-03-27 +### Added +- Support for sites and spatial tendons +- Support for specifying mesh root directory + +## [0.3.1] - 2023-01-06 +### Fixed +- onclick_fn warning when creating UI + +## [0.3.0] - 2022-10-13 +### Added +- Added material and texture support + +## [0.2.3] - 2022-09-07 +### Fixed +- Fixes for kit 103.5 + +## [0.2.2] - 2022-07-21 + +### Added +- Add armature to joints + +## [0.2.1] - 2022-07-21 + +### Fixed +- Display Bookmarks when selecting files + +## [0.2.0] - 2022-06-30 + +### Added +- Add instanceable option to importer + +## [0.1.3] - 2022-05-17 + +### Added +- Add joint values API + +## [0.1.2] - 2022-05-10 + +### Changed +- Collision filtering now uses filteredPairsAPI instead of collision groups +- Adding tendons no longer has limitations on the number of joints per tendon and the order of the joints + +## [0.1.1] - 2022-04-14 + +### Added +- Joint name annotation USD attribute for preserving joint names + +### Fixed +- Correctly parse distance scaling from UI + +## [0.1.0] - 2022-02-07 + +### Added +- Initial version of MJCF importer extension diff --git a/source/extensions/omni.importer.mjcf/docs/Overview.md b/source/extensions/isaacsim.asset.importer.mjcf/docs/Overview.md similarity index 99% rename from source/extensions/omni.importer.mjcf/docs/Overview.md rename to source/extensions/isaacsim.asset.importer.mjcf/docs/Overview.md index 3fe54b8..850bb13 100644 --- a/source/extensions/omni.importer.mjcf/docs/Overview.md +++ b/source/extensions/isaacsim.asset.importer.mjcf/docs/Overview.md @@ -1,6 +1,6 @@ # Usage -To enable this extension, go to the Extension Manager menu and enable omni.importer.mjcf extension. +To enable this extension, go to the Extension Manager menu and enable isaacsim.asset.importer.mjcf extension. # High Level Code Overview diff --git a/source/extensions/omni.importer.mjcf/docs/index.rst b/source/extensions/isaacsim.asset.importer.mjcf/docs/index.rst similarity index 78% rename from source/extensions/omni.importer.mjcf/docs/index.rst rename to source/extensions/isaacsim.asset.importer.mjcf/docs/index.rst index 6d440ad..f9c86f9 100644 --- a/source/extensions/omni.importer.mjcf/docs/index.rst +++ b/source/extensions/isaacsim.asset.importer.mjcf/docs/index.rst @@ -1,5 +1,5 @@ -MJCF Importer Extension [omni.importer.mjcf] -############################################ +MJCF Importer Extension [isaacsim.asset.importer.mjcf] +####################################################### MJCF Import Commands ==================== @@ -19,7 +19,7 @@ Below is a sample demonstrating how to import the Ant MJCF included with this ex # Get path to extension data: ext_manager = omni.kit.app.get_app().get_extension_manager() - ext_id = ext_manager.get_enabled_extension_id("omni.importer.mjcf") + ext_id = ext_manager.get_enabled_extension_id("isaacsim.asset.importer.mjcf") extension_path = ext_manager.get_extension_path(ext_id) # import MJCF @@ -44,19 +44,19 @@ Below is a sample demonstrating how to import the Ant MJCF included with this ex distantLight.CreateIntensityAttr(500) -.. automodule:: omni.importer.mjcf.scripts.commands +.. automodule:: isaacsim.asset.importer.mjcf.scripts.commands :members: :undoc-members: :exclude-members: do, undo -.. automodule:: omni.importer.mjcf._mjcf +.. automodule:: isaacsim.asset.importer.mjcf._mjcf -.. autoclass:: omni.importer.mjcf._mjcf.Mjcf +.. autoclass:: isaacsim.asset.importer.mjcf._mjcf.Mjcf :members: :undoc-members: :no-show-inheritance: -.. autoclass:: omni.importer.mjcf._mjcf.ImportConfig +.. autoclass:: isaacsim.asset.importer.mjcf._mjcf.ImportConfig :members: :undoc-members: :no-show-inheritance: diff --git a/source/extensions/isaacsim.asset.importer.mjcf/icons/icoFileMJCF.png b/source/extensions/isaacsim.asset.importer.mjcf/icons/icoFileMJCF.png new file mode 100644 index 0000000000000000000000000000000000000000..bd92164d08f929dcfceca7bb2055ea28ee79bf1b GIT binary patch literal 13634 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 U3@&gD3jhEB07*qoM6N<$f=g}0p#T5? literal 0 HcmV?d00001 diff --git a/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_off.svg b/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_off.svg new file mode 100644 index 0000000..2302cf2 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_off.svg @@ -0,0 +1,3 @@ + + + diff --git a/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_on.svg b/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_on.svg new file mode 100644 index 0000000..39a3254 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/icons/radio_on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/source/extensions/isaacsim.asset.importer.mjcf/plugins/MeshImporter.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MeshImporter.h new file mode 100644 index 0000000..31f0cd4 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MeshImporter.h @@ -0,0 +1,269 @@ +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +// clang-format off +#include "UsdPCH.h" +// clang-format on + +#include "core/mesh.h" +#include "omniverse_asset_converter.h" +#include "utils/Path.h" +#include "utils/Usd.h" + +#include +using namespace isaacsim::asset::utils::path; +namespace mesh +{ + +inline std::string StatusToString(OmniConverterStatus status) +{ + switch (status) + { + case OmniConverterStatus::OK: + return "OK"; + case OmniConverterStatus::CANCELLED: + return "Cancelled"; + case OmniConverterStatus::IN_PROGRESS: + return "In Progress"; + case OmniConverterStatus::UNSUPPORTED_IMPORT_FORMAT: + return "Unsupported Format"; + case OmniConverterStatus::INCOMPLETE_IMPORT_FORMAT: + return "Incomplete File"; + case OmniConverterStatus::FILE_READ_ERROR: + return "Asset Not Found"; + case OmniConverterStatus::FILE_WRITE_ERROR: + return "Output Path Cannot be Opened"; + case OmniConverterStatus::UNKNOWN: + return "Unknown"; + default: + return "Unknown"; + } +} + + +class MeshImporter +{ +private: + // std::map> + // gymGraphicsMeshCache; std::map, + // carb::gym::TriangleMeshHandle> cylinderCache; std::map + // simulationMeshCache; + +public: + MeshImporter() + { + } + + std::string resolveMeshPath(const std::string& filePath) + { + // noop for now + return filePath; + } + + pxr::TfToken getMaterialToken(pxr::UsdStageWeakPtr stage, const pxr::SdfPath& materialPath) + { + // Get the material object from the stage + pxr::UsdShadeMaterial material = pxr::UsdShadeMaterial(stage->GetPrimAtPath(materialPath)); + + // If the material doesn't exist, return an empty token + if (!material) + { + return pxr::TfToken(); + } + + auto shaderPrim = *material.GetPrim().GetChildren().begin(); + // Get the shader object for the material + pxr::UsdShadeShader shader(shaderPrim); + if (!shader) + { + return pxr::TfToken(); + } + + std::stringstream ss; + for (const auto& attr : shaderPrim.GetAttributes()) + { + ss << "<"; + ss << attr.GetTypeName() << " : " << attr.GetName() << " = "; + + pxr::VtValue value; + if (attr.Get(&value)) + { + ss << value << ">\n"; + } + else + { + ss << ">\n"; // Handle cases where the attribute has no value + } + } + + // Create a TfToken from the token string + pxr::TfToken token(ss.str()); + return token; + } + + + void moveAndBindMaterial(const pxr::UsdStageRefPtr& sourceStage, + const pxr::UsdStageRefPtr& dstStage, + const pxr::SdfPath& rootPath, + const pxr::SdfPath& sourcePath, + const pxr::SdfPath& dstPath, + std::map& materialPaths) + { + auto sourceImageable = sourceStage->GetPrimAtPath(sourcePath); + auto dstImageable = dstStage->GetPrimAtPath(dstPath); + pxr::UsdShadeMaterialBindingAPI bindingAPI(sourceImageable); + pxr::UsdShadeMaterialBindingAPI::DirectBinding directBinding = bindingAPI.GetDirectBinding(); + pxr::UsdShadeMaterial material = directBinding.GetMaterial(); + if (material) + { + pxr::TfToken materialToken = getMaterialToken(sourceStage, material.GetPrim().GetPath()); + pxr::SdfPath materialPath; + if (materialPaths.count(materialToken)) + { + materialPath = materialPaths[materialToken]; + } + else + { + materialPath = pxr::SdfPath(isaacsim::asset::importer::mjcf::usd::GetNewSdfPathString( + dstStage, rootPath.AppendChild(pxr::TfToken("Looks")) + .AppendChild(pxr::TfToken(material.GetPath().GetName())) + .GetString())); + pxr::SdfCopySpec(sourceStage->GetRootLayer(), material.GetPath(), dstStage->GetRootLayer(), materialPath); + materialPaths.emplace(materialToken, materialPath); + } + + pxr::UsdShadeMaterial newMaterial = pxr::UsdShadeMaterial(dstStage->GetPrimAtPath(materialPath)); + if (newMaterial) + { + bindingAPI = pxr::UsdShadeMaterialBindingAPI(dstImageable); + bindingAPI.Bind(newMaterial); + } + } + } + + void moveMeshAndMaterials(const pxr::UsdStageRefPtr& sourceStage, + const pxr::UsdStageRefPtr& dstStage, + const pxr::SdfPath& rootPath, + const pxr::SdfPath& meshPath, + const pxr::SdfPath& targetPrimPath, + std::map& materialPaths) + { + pxr::UsdGeomMesh mesh = pxr::UsdGeomMesh(sourceStage->GetPrimAtPath(meshPath)); + if (!mesh) + { + CARB_LOG_ERROR("Error: Could not find mesh at path %s", meshPath.GetText()); + return; + } + + pxr::UsdGeomMesh newMesh = pxr::UsdGeomMesh::Define(dstStage, targetPrimPath); + if (!newMesh) + { + CARB_LOG_ERROR("Error: Could not create new mesh at path %s", targetPrimPath.GetText()); + return; + } + + pxr::SdfCopySpec(sourceStage->GetRootLayer(), mesh.GetPath(), dstStage->GetRootLayer(), newMesh.GetPath()); + // Move materials and bind them to the new mesh + for (const auto& subset : pxr::UsdGeomSubset::GetAllGeomSubsets(mesh)) + { + pxr::TfToken subsetName = subset.GetPrim().GetName(); + pxr::UsdGeomSubset dstSubset = + pxr::UsdGeomSubset(dstStage->GetPrimAtPath(newMesh.GetPath().AppendChild(pxr::TfToken(subsetName)))); + moveAndBindMaterial(sourceStage, dstStage, rootPath, subset.GetPath(), dstSubset.GetPath(), materialPaths); + } + + // Bind the material to the new mesh + moveAndBindMaterial(sourceStage, dstStage, rootPath, mesh.GetPath(), newMesh.GetPath(), materialPaths); + } + + + pxr::SdfPath waitForConverter(OmniConverterFuture* future, + pxr::UsdStageRefPtr usdStage, + const std::string& mesh_usd_path, + const std::string& meshStagePath, + const pxr::SdfPath& rootPath, + std::map& materialPaths) + { + OmniConverterStatus status = OmniConverterStatus::OK; + // Wait for the converter to finish + if (future == nullptr) + { + CARB_LOG_ERROR("Error: Future is null"); + return pxr::SdfPath(); + } + while (omniConverterCheckFutureStatus(future) == OmniConverterStatus::IN_PROGRESS) + { + } + status = omniConverterCheckFutureStatus(future); + omniConverterReleaseFuture(future); + + if (status == OmniConverterStatus::OK) + { + CARB_LOG_INFO("Asset %s convert successfully.", mesh_usd_path.c_str()); + } + else + { + CARB_LOG_WARN("Asset convert failed with error status: %s (%s)", StatusToString(status).c_str(), + meshStagePath.c_str()); + } + // Open the mesh stage and get the mesh prims + pxr::UsdStageRefPtr meshStage = pxr::UsdStage::Open(mesh_usd_path); + pxr::UsdPrimRange primRange(meshStage->GetDefaultPrim()); + std::vector meshPrims; + std::copy_if(primRange.begin(), primRange.end(), std::back_inserter(meshPrims), + [](pxr::UsdPrim const& prim) { return prim.IsA(); }); + + + // Create a base prim and move meshes and materials + auto basePrim = pxr::UsdGeomXform::Define(usdStage, pxr::SdfPath(meshStagePath)); + + for (const auto& mesh : meshPrims) + { + moveMeshAndMaterials(meshStage, usdStage, usdStage->GetDefaultPrim().GetPath(), mesh.GetPath(), + basePrim.GetPath().AppendChild(pxr::TfToken(mesh.GetName())), materialPaths); + } + // Clean up + // omniClientWait(omniClientDelete(mesh_usd_path.c_str(), {}, {})); + pxr::UsdGeomImageable(usdStage->GetPrimAtPath(pxr::SdfPath(meshStagePath))) + .CreateVisibilityAttr() + .Set(pxr::UsdGeomTokens->inherited); + return pxr::SdfPath(meshStagePath); + } + + void importMesh(Mesh* mesh, std::string relativeMeshPath, const Vec3& scale, bool flip = false) + { + std::string meshPath = resolveMeshPath(relativeMeshPath); + std::string mesh_usd_path = pathJoin(getParent(meshPath), getPathStem(meshPath.c_str()) + ".tmp.usd"); + + CARB_LOG_INFO("Importing Mesh %s\n (%s)", meshPath.c_str(), mesh_usd_path.c_str()); + // Set up the Omni Converter flags + int flags = OMNI_CONVERTER_FLAGS_SINGLE_MESH_FILE | OMNI_CONVERTER_FLAGS_IGNORE_CAMERAS | + OMNI_CONVERTER_FLAGS_USE_METER_PER_UNIT | OMNI_CONVERTER_FLAGS_MERGE_ALL_MESHES | + OMNI_CONVERTER_FLAGS_IGNORE_LIGHTS | OMNI_CONVERTER_FLAGS_FBX_CONVERT_TO_Z_UP | + OMNI_CONVERTER_FLAGS_FBX_BAKING_SCALES_INTO_MESH | OMNI_CONVERTER_FLAGS_IGNORE_PIVOTS; + + // Set up the log and progress callbacks for the Omni Converter + omniConverterSetLogCallback([](const char* message) { CARB_LOG_INFO(message); }); + omniConverterSetProgressCallback([](OmniConverterFuture* future, uint32_t progress, uint32_t total) + { CARB_LOG_INFO("Progress: %d / %d", progress, total); }); + + // Create a new Omni Converter future for the mesh import + mesh->m_assetConvertStatus = omniConverterCreateAsset(meshPath.c_str(), mesh_usd_path.c_str(), flags); + mesh->m_convertedUsdMesh = mesh_usd_path; + } +}; + +} // namespace mesh diff --git a/source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.cpp new file mode 100644 index 0000000..f3f2263 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.cpp @@ -0,0 +1,340 @@ +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#define CARB_EXPORTS + +// clang-format off +#include "UsdPCH.h" +// clang-format on + +#include "Mjcf.h" + +#include "./utils/Path.h" +#include "MjcfImporter.h" +#include "stdio.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define EXTENSION_NAME "isaacsim.asset.importer.mjcf.plugin" + +using namespace carb; +using namespace isaacsim::asset::utils::path; +const struct carb::PluginImplDesc kPluginImpl = { EXTENSION_NAME, "MJCF Utilities", "NVIDIA", + carb::PluginHotReload::eEnabled, "dev" }; + +CARB_PLUGIN_IMPL(kPluginImpl, isaacsim::asset::importer::mjcf::Mjcf) +CARB_PLUGIN_IMPL_DEPS(omni::kit::IApp, carb::logging::ILogging) + +namespace +{ +bool FileExists(const std::string& path) +{ + std::ifstream file(path); + return file.good(); +} + +void OpenOrCreateNew(pxr::UsdStageRefPtr& stage, const std::string& stage_identifier) +{ + if (pxr::UsdStage::IsSupportedFile(stage_identifier)) + { + if (FileExists(stage_identifier)) + { + stage = pxr::UsdStage::Open(stage_identifier); + } + if (!stage) + { + CARB_LOG_INFO("Creating Stage: %s", stage_identifier.c_str()); + stage = pxr::UsdStage::CreateNew(stage_identifier); + } + else + { + stage->GetRootLayer()->Clear(); + stage->Save(); + } + } + else + { + CARB_LOG_ERROR("Stage identifier %s is not supported", stage_identifier.c_str()); + } +} + + +// passed in from python +void createAssetFromMJCF(const char* fileName, + const char* primName, + isaacsim::asset::importer::mjcf::ImportConfig& config, + const std::string& stage_identifier = "") +{ + isaacsim::asset::importer::mjcf::MJCFImporter mjcf(fileName, config); + if (!mjcf.isLoaded) + { + printf("cannot load mjcf xml file\n"); + } + Transform trans = Transform(); + + bool save_stage = true; + std::unordered_map stages; + stages["stage"] = pxr::UsdStageRefPtr(); + stages["sensor_stage"] = pxr::UsdStageRefPtr(); + stages["physics_stage"] = pxr::UsdStageRefPtr(); + stages["base_stage"] = pxr::UsdStageRefPtr(); + + bool multi_layer = true; + std::string name = ""; + if (stage_identifier != "" && pxr::UsdStage::IsSupportedFile(stage_identifier)) + { + OpenOrCreateNew(stages["stage"], stage_identifier); + std::string directoryPath = pxr::TfGetPathName(stage_identifier); + name = pxr::TfStringGetBeforeSuffix(pxr::TfGetBaseName(stage_identifier)); + + // CARB_LOG_WARN(stage_identifier.c_str()); + // CARB_LOG_WARN(directoryPath.c_str()); + // CARB_LOG_WARN(name.c_str()); + + OpenOrCreateNew(stages["sensor_stage"], directoryPath + "/configuration/" + name + "_sensor.usd"); + OpenOrCreateNew(stages["physics_stage"], directoryPath + "/configuration/" + name + "_physics.usd"); + OpenOrCreateNew(stages["base_stage"], directoryPath + "/configuration/" + name + "_base.usd"); + + config.makeDefaultPrim = true; + } + if (!stages["stage"]) // If all else fails, import on current stage + { + CARB_LOG_INFO("Importing MJCF to Current Stage"); + // Get the 'active' USD stage from the USD stage cache. + const std::vector allStages = pxr::UsdUtilsStageCache::Get().GetAllStages(); + if (allStages.size() != 1) + { + CARB_LOG_ERROR("Cannot determine the 'active' USD stage (%zu stages present in the USD stage cache).", + allStages.size()); + return; + } + stages["stage"] = allStages[0]; + std::string identifier = pxr::TfStringGetBeforeSuffix((stages["stage"]->GetRootLayer()->GetIdentifier())); + if (pxr::TfStringStartsWith(identifier, "anon:")) + { + CARB_LOG_WARN("Creating Asset in an in-memory stage, will not create layered structure"); + stages["sensor_stage"] = stages["stage"]; + stages["physics_stage"] = stages["stage"]; + stages["base_stage"] = stages["stage"]; + multi_layer = false; + save_stage = false; + } + else + { + std::string directoryPath = pxr::TfGetPathName(identifier); + std::string name = pxr::TfGetBaseName(identifier); + OpenOrCreateNew(stages["sensor_stage"], directoryPath + "/configuration/" + name + "_sensor.usd"); + OpenOrCreateNew(stages["physics_stage"], directoryPath + "/configuration/" + name + "_physics.usd"); + OpenOrCreateNew(stages["base_stage"], directoryPath + "/configuration/" + name + "_base.usd"); + } + } + + for (auto& stage : stages) + { + + { + pxr::UsdGeomSetStageUpAxis(stage.second, pxr::UsdGeomTokens->z); + pxr::UsdGeomSetStageMetersPerUnit(stage.second, 1.0 / config.distanceScale); + } + } + // Create Root prim before adding sublayers + createRoot(stages, trans, primName, config); + + + pxr::SdfLayerRefPtr rootLayer = stages["stage"]->GetRootLayer(); + if (multi_layer) + { + auto subLayerPaths = rootLayer->GetSubLayerPaths(); + if (std::find(subLayerPaths.begin(), subLayerPaths.end(), + stages["sensor_stage"]->GetRootLayer()->GetIdentifier()) == subLayerPaths.end()) + { + subLayerPaths.push_back(stages["sensor_stage"]->GetRootLayer()->GetIdentifier()); + } + if (std::find(subLayerPaths.begin(), subLayerPaths.end(), + stages["physics_stage"]->GetRootLayer()->GetIdentifier()) == subLayerPaths.end()) + { + subLayerPaths.push_back(stages["physics_stage"]->GetRootLayer()->GetIdentifier()); + } + auto physics_subLayerPaths = stages["physics_stage"]->GetRootLayer()->GetSubLayerPaths(); + if (std::find(physics_subLayerPaths.begin(), physics_subLayerPaths.end(), + stages["base_stage"]->GetRootLayer()->GetIdentifier()) == physics_subLayerPaths.end()) + { + physics_subLayerPaths.push_back(stages["base_stage"]->GetRootLayer()->GetIdentifier()); + } + } + std::string result = ""; + + if (stages["stage"]) + { + for (auto const& stage : stages) + { + pxr::UsdGeomSetStageMetersPerUnit(stage.second, 1.0 / config.distanceScale); + stage.second->DefinePrim(pxr::SdfPath(std::string(primName)), pxr::TfToken("Xform")); + } + if (config.createPhysicsScene) + { + pxr::UsdPhysicsScene scene = + pxr::UsdPhysicsScene::Define(stages["physics_stage"], pxr::SdfPath("/physicsScene")); + scene.CreateGravityDirectionAttr().Set(pxr::GfVec3f(0.0f, 0.0f, -1.0)); + scene.CreateGravityMagnitudeAttr().Set(9.81f * config.distanceScale); + + pxr::PhysxSchemaPhysxSceneAPI physxSceneAPI = pxr::PhysxSchemaPhysxSceneAPI::Apply( + stages["physics_stage"]->GetPrimAtPath(pxr::SdfPath("/physicsScene"))); + physxSceneAPI.CreateEnableCCDAttr().Set(true); + physxSceneAPI.CreateEnableStabilizationAttr().Set(true); + physxSceneAPI.CreateEnableGPUDynamicsAttr().Set(false); + + physxSceneAPI.CreateBroadphaseTypeAttr().Set(pxr::TfToken("MBP")); + physxSceneAPI.CreateSolverTypeAttr().Set(pxr::TfToken("TGS")); + } + + { + + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); + stages["stage"]->DefinePrim(pxr::SdfPath(std::string(primName) + "/Looks"), pxr::TfToken("Scope")); + stages["stage"]->DefinePrim(pxr::SdfPath(std::string(primName) + "/joints"), pxr::TfToken("Scope")); + stages["stage"]->DefinePrim(pxr::SdfPath("/meshes"), pxr::TfToken("Scope")); + stages["stage"]->DefinePrim(pxr::SdfPath("/visuals"), pxr::TfToken("Scope")); + stages["physics_stage"]->DefinePrim(pxr::SdfPath("/collisions"), pxr::TfToken("Scope")); + + pxr::UsdGeomImageable(stages["stage"]->GetPrimAtPath(pxr::SdfPath("/visuals"))) + .CreateVisibilityAttr() + .Set(pxr::UsdGeomTokens->invisible); + pxr::UsdGeomImageable(stages["stage"]->GetPrimAtPath(pxr::SdfPath("/collisions"))) + .CreateVisibilityAttr() + .Set(pxr::UsdGeomTokens->invisible); + pxr::UsdGeomImageable(stages["stage"]->GetPrimAtPath(pxr::SdfPath("/meshes"))) + .CreateVisibilityAttr() + .Set(pxr::UsdGeomTokens->invisible); + + { + pxr::UsdPhysicsCollisionGroup collisionGroupRobot = pxr::UsdPhysicsCollisionGroup::Define( + stages["physics_stage"], pxr::SdfPath("/collisions/robotCollisionGroup")); + collisionGroupRobot.GetCollidersCollectionAPI().CreateIncludesRel().AddTarget( + pxr::SdfPath(std::string(primName))); + + pxr::UsdPhysicsCollisionGroup collisionGroupColliders = pxr::UsdPhysicsCollisionGroup::Define( + stages["physics_stage"], pxr::SdfPath("/collisions/collidersCollisionGroup")); + collisionGroupColliders.GetCollidersCollectionAPI().CreateIncludesRel().AddTarget( + pxr::SdfPath("/collisions")); + pxr::UsdRelationship collisionGroupCollidersRel = collisionGroupColliders.CreateFilteredGroupsRel(); + collisionGroupCollidersRel.AddTarget(collisionGroupRobot.GetPrim().GetPath()); + } + } + if (!mjcf.AddPhysicsEntities(stages, trans, primName, config)) + { + printf("no physics entities found!\n"); + } + // CARB_LOG_WARN("Import Done, saving"); + if (save_stage) + { + CARB_LOG_INFO("Saving Stage %s", stages["stage"]->GetRootLayer()->GetIdentifier().c_str()); + CARB_LOG_INFO("Saving Sensor Stage %s", stages["sensor_stage"]->GetRootLayer()->GetIdentifier().c_str()); + CARB_LOG_INFO("Saving Physics Stage %s", stages["physics_stage"]->GetRootLayer()->GetIdentifier().c_str()); + CARB_LOG_INFO("Saving Base Stage %s", stages["base_stage"]->GetRootLayer()->GetIdentifier().c_str()); + stages["stage"]->Save(); + stages["sensor_stage"]->Save(); + stages["physics_stage"]->Save(); + stages["base_stage"]->Save(); + pxr::UsdEditContext context(stages["stage"], stages["stage"]->GetRootLayer()); + result = stages["base_stage"]->GetDefaultPrim().GetPath().GetString(); + // Remove the physics and sensor stages from sublayers, and add them as payloads through variants + rootLayer->GetSubLayerPaths().clear(); + + auto root_prim = stages["stage"]->GetDefaultPrim(); + + + pxr::UsdVariantSets variantSets = root_prim.GetVariantSets(); + pxr::UsdVariantSet physics = variantSets.AddVariantSet("Physics"); + physics.AddVariant("None"); + physics.SetVariantSelection("None"); + { + pxr::UsdEditContext ctxt(physics.GetVariantEditContext()); + root_prim.GetReferences().AddReference( + resolve_relative(stages["stage"]->GetRootLayer()->GetIdentifier(), + stages["base_stage"]->GetRootLayer()->GetIdentifier())); + auto joints = stages["stage"]->GetPrimAtPath(root_prim.GetPath().AppendPath(pxr::SdfPath("joints"))); + if (joints) + { + joints.SetActive(false); + } + auto loop_joints = + stages["stage"]->GetPrimAtPath(root_prim.GetPath().AppendPath(pxr::SdfPath("loop_joints"))); + if (loop_joints) + { + loop_joints.SetActive(false); + } + auto root_joint = + stages["stage"]->GetPrimAtPath(root_prim.GetPath().AppendPath(pxr::SdfPath("root_joint"))); + if (root_joint) + { + root_joint.SetActive(false); + } + } + physics.AddVariant("PhysX"); + physics.SetVariantSelection("PhysX"); + { + pxr::UsdEditContext ctxt(physics.GetVariantEditContext()); + stages["stage"]->GetDefaultPrim().GetPayloads().AddPayload( + pxr::SdfPayload(resolve_relative(stages["stage"]->GetRootLayer()->GetIdentifier(), + stages["physics_stage"]->GetRootLayer()->GetIdentifier()))); + } + + + pxr::UsdVariantSet sensor = variantSets.AddVariantSet("Sensor"); + sensor.AddVariant("None"); + sensor.AddVariant("Sensors"); + sensor.SetVariantSelection("Sensors"); + { + pxr::UsdEditContext ctxt(sensor.GetVariantEditContext()); + stages["stage"]->GetDefaultPrim().GetPayloads().AddPayload( + pxr::SdfPayload(resolve_relative(stages["stage"]->GetRootLayer()->GetIdentifier(), + stages["sensor_stage"]->GetRootLayer()->GetIdentifier()))); + } + CARB_LOG_INFO("Import Done, saving"); + + stages["stage"]->Save(); + } + } +} + +} // namespace + +CARB_EXPORT void carbOnPluginStartup() +{ + CARB_LOG_INFO("Startup MJCF Extension"); +} + +CARB_EXPORT void carbOnPluginShutdown() +{ +} + +void fillInterface(isaacsim::asset::importer::mjcf::Mjcf& iface) +{ + using namespace isaacsim::asset::importer::mjcf; + memset(&iface, 0, sizeof(iface)); + // iface.helloWorld = helloWorld; + iface.createAssetFromMJCF = createAssetFromMJCF; + // iface.importRobot = importRobot; +} diff --git a/source/extensions/omni.importer.mjcf/plugins/Mjcf.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.h similarity index 89% rename from source/extensions/omni.importer.mjcf/plugins/Mjcf.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.h index 1d27db2..1c5a0d1 100644 --- a/source/extensions/omni.importer.mjcf/plugins/Mjcf.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/Mjcf.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,9 @@ #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -54,7 +56,7 @@ struct ImportConfig struct Mjcf { - CARB_PLUGIN_INTERFACE("omni::importer::mjcf::Mjcf", 0, 1); + CARB_PLUGIN_INTERFACE("isaacsim::asset::importer::mjcf::Mjcf", 0, 1); void(CARB_ABI* createAssetFromMJCF)(const char* fileName, const char* primName, @@ -64,4 +66,5 @@ struct Mjcf } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfImporter.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.cpp similarity index 52% rename from source/extensions/omni.importer.mjcf/plugins/MjcfImporter.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.cpp index f0cbad3..9de6b15 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfImporter.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,11 +13,14 @@ // See the License for the specific language governing permissions and // limitations under the License. + #include "MjcfImporter.h" #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -40,6 +43,7 @@ MJCFImporter::MJCFImporter(const std::string fullPath, ImportConfig& config) return; } + LoadCompiler(root->FirstChildElement("compiler"), compiler); // if the mjcf file contains , load the included file as // well { @@ -97,6 +101,45 @@ MJCFImporter::~MJCFImporter() } } +void MJCFImporter::applyMaterial(pxr::UsdStageWeakPtr stage, pxr::UsdPrim& prim, MJCFVisualElement* element) +{ + if (element->material != "") + { + if (materials.find(element->material) != materials.end()) + { + MJCFMaterial material = materials.find(element->material)->second; + MJCFTexture* texture = nullptr; + if (material.texture != "") + { + if (textures.find(material.texture) == textures.end()) + { + CARB_LOG_ERROR("Cannot find texture with name %s.\n", material.texture.c_str()); + } + else + { + texture = &(textures.find(material.texture)->second); + // Only MESH type has UV mapping + if (element->type == MJCFVisualElement::MESH) + { + material.project_uvw = false; + } + } + } + Vec4 color = Vec4(); + createAndBindMaterial(stage, prim, &material, texture, color, false, materialPaths); + } + else + { + CARB_LOG_ERROR("Cannot find material with name %s.\n", element->material.c_str()); + } + } + else if (element->rgba.x != 0.2f || element->rgba.y != 0.2f || element->rgba.z != 0.2f) + { + // Create material with color only + createAndBindMaterial(stage, prim, nullptr, nullptr, element->rgba, true, materialPaths); + } +} + void MJCFImporter::populateBodyLookup(MJCFBody* body) { nameToBody[body->name] = body; @@ -116,7 +159,7 @@ void MJCFImporter::populateBodyLookup(MJCFBody* body) } } -bool MJCFImporter::AddPhysicsEntities(pxr::UsdStageWeakPtr stage, +bool MJCFImporter::AddPhysicsEntities(std::unordered_map stages, const Transform trans, const std::string& rootPrimPath, const ImportConfig& config) @@ -124,139 +167,30 @@ bool MJCFImporter::AddPhysicsEntities(pxr::UsdStageWeakPtr stage, this->createBodyForFixedJoint = config.createBodyForFixedJoint; - setStageMetadata(stage, config); - createRoot(stage, trans, rootPrimPath, config); - std::string instanceableUSDPath = config.instanceableMeshUsdPath; - if (config.makeInstanceable) + for (auto const& stage : stages) { - if (config.instanceableMeshUsdPath[0] == '.') - { - // make relative path relative to output directory - std::string relativePath = config.instanceableMeshUsdPath.substr(1); - std::string curStagePath = stage->GetRootLayer()->GetIdentifier(); - std::string directory; - size_t pos = curStagePath.find_last_of("\\/"); - directory = (std::string::npos == pos) ? "" : curStagePath.substr(0, pos); - instanceableUSDPath = directory + relativePath; - } - pxr::UsdStageRefPtr instanceableMeshStage = pxr::UsdStage::CreateNew(instanceableUSDPath); - setStageMetadata(instanceableMeshStage, config); - for (int i = 0; i < (int)bodies.size(); i++) - { - std::string rootArtPrimPath = rootPrimPath + "/" + SanitizeUsdName(bodies[i]->name); - pxr::UsdGeomXform rootArtPrim = - pxr::UsdGeomXform::Define(instanceableMeshStage, pxr::SdfPath(rootArtPrimPath)); - - CreateInstanceableMeshes(instanceableMeshStage, bodies[i], rootArtPrimPath, true, config); - } - - // create instanceable assets for world body geoms - std::string worldBodyPrimPath = rootPrimPath + "/worldBody"; - pxr::UsdGeomXform worldBodyPrim = - pxr::UsdGeomXform::Define(instanceableMeshStage, pxr::SdfPath(worldBodyPrimPath)); - for (int i = 0; i < (int)worldBody.geoms.size(); i++) - { - - std::string bodyPath = worldBodyPrimPath + "/" + SanitizeUsdName(worldBody.geoms[i]->name); - auto bodyPathSdf = getNextFreePath(instanceableMeshStage, pxr::SdfPath(bodyPath)); - bodyPath = bodyPathSdf.GetString(); - std::string uniqueName = bodyPathSdf.GetName(); - - pxr::UsdPrim bodyLink = pxr::UsdGeomXform::Define(instanceableMeshStage, bodyPathSdf).GetPrim(); - - bool isVisual = worldBody.geoms[i]->contype == 0 && worldBody.geoms[i]->conaffinity == 0; - if (isVisual) - { - worldBody.hasVisual = true; - } - else - { - if (worldBody.geoms[i]->type != MJCFGeom::PLANE) - { - std::string geomPath = bodyPath + "/collisions/" + uniqueName; - pxr::UsdPrim prim = createPrimitiveGeom(instanceableMeshStage, geomPath, worldBody.geoms[i], - simulationMeshCache, config, false, rootPrimPath, true); - - // enable collisions on prim - if (prim) - { - applyCollisionGeom(instanceableMeshStage, prim, worldBody.geoms[i]); - nameToUsdCollisionPrim[worldBody.geoms[i]->name] = bodyPath; - } - else - { - CARB_LOG_ERROR("Collision geom %s could not created", worldBody.geoms[i]->name.c_str()); - } - } - } - - std::string geomPath = bodyPath + "/visuals/" + uniqueName; - pxr::UsdPrim prim = createPrimitiveGeom(instanceableMeshStage, geomPath, worldBody.geoms[i], - simulationMeshCache, config, true, rootPrimPath, false); - - if (!config.visualizeCollisionGeoms && worldBody.hasVisual && !isVisual) - { - // turn off visibility for collision prim - pxr::UsdGeomImageable imageable(prim); - imageable.MakeInvisible(); - } - - // parse material and texture - if (worldBody.geoms[i]->material != "") - { - if (materials.find(worldBody.geoms[i]->material) != materials.end()) - { - MJCFMaterial material = materials.find(worldBody.geoms[i]->material)->second; - MJCFTexture* texture = nullptr; - if (material.texture != "") - { - if (textures.find(material.texture) == textures.end()) - { - CARB_LOG_ERROR("Cannot find texture with name %s.\n", material.texture.c_str()); - } - texture = &(textures.find(material.texture)->second); - - // only MESH type has UV mapping - if (worldBody.geoms[i]->type == MJCFGeom::MESH) - { - material.project_uvw = false; - } - } - Vec4 color = Vec4(); - createAndBindMaterial(instanceableMeshStage, prim, &material, texture, color, false); - } - else - { - CARB_LOG_ERROR("Cannot find material with name %s.\n", worldBody.geoms[i]->material.c_str()); - } - } - else if (worldBody.geoms[i]->rgba.x != 0.2 || worldBody.geoms[i]->rgba.y != 0.2 || - worldBody.geoms[i]->rgba.z != 0.2) - { - // create material with color only - createAndBindMaterial(instanceableMeshStage, prim, nullptr, nullptr, worldBody.geoms[i]->rgba, true); - } - geomPrimMap[worldBody.geoms[i]->name] = prim; - geomToBodyPrim[worldBody.geoms[i]->name] = bodyLink; - } - - instanceableMeshStage->Export(instanceableUSDPath); + CARB_LOG_INFO("set stage meta data: %s", stage.first.c_str()); + pxr::UsdEditContext context(stages["stage"], stage.second->GetRootLayer()); + setStageMetadata(stage.second, config); } + createRoot(stages, trans, rootPrimPath, config); + std::string instanceableUSDPath = config.instanceableMeshUsdPath; for (int i = 0; i < (int)bodies.size(); i++) { - std::string rootArtPrimPath = rootPrimPath + "/" + SanitizeUsdName(bodies[i]->name); - pxr::UsdGeomXform rootArtPrim = pxr::UsdGeomXform::Define(stage, pxr::SdfPath(rootArtPrimPath)); + pxr::UsdGeomXform rootArtPrim = pxr::UsdGeomXform::Define(stages["base_stage"], pxr::SdfPath(rootArtPrimPath)); CreatePhysicsBodyAndJoint( - stage, bodies[i], rootArtPrimPath, trans, true, rootPrimPath, config, instanceableUSDPath); + stages, bodies[i], rootPrimPath, rootArtPrimPath, trans, true, rootPrimPath, config, instanceableUSDPath); } + { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + AddContactFilters(stages["stage"]); + AddTendons(stages["stage"], rootPrimPath); - addWorldGeomsAndSites(stage, rootPrimPath, config, instanceableUSDPath); - AddContactFilters(stage); - AddTendons(stage, rootPrimPath); - + addWorldGeomsAndSites(stages, rootPrimPath, config, instanceableUSDPath); + } return true; } @@ -269,61 +203,42 @@ bool MJCFImporter::addVisualGeom(pxr::UsdStageWeakPtr stage, const std::string rootPrimPath) { bool hasVisualGeoms = false; + std::string baseVisualsPath = "/visuals/" + bodyPrim.GetName().GetString(); + pxr::UsdPrim visualsPrim = stage->DefinePrim(pxr::SdfPath(bodyPath + "/visuals"), pxr::TfToken("Xform")); + pxr::UsdPrim basePrim = stage->DefinePrim(pxr::SdfPath(baseVisualsPath), pxr::TfToken("Xform")); for (int i = 0; i < (int)body->geoms.size(); i++) { bool isVisual = body->geoms[i]->contype == 0 && body->geoms[i]->conaffinity == 0; - if (!config.makeInstanceable || createGeoms) + + if (config.visualizeCollisionGeoms || !body->hasVisual || isVisual) { - std::string geomPath = bodyPath + "/visuals/" + SanitizeUsdName(body->geoms[i]->name); - pxr::UsdPrim prim = createPrimitiveGeom( - stage, geomPath, body->geoms[i], simulationMeshCache, config, true, rootPrimPath, false); + // Path where the mesh will be referenced + pxr::UsdPrim prim; + std::string geomPath = baseVisualsPath + "/" + SanitizeUsdName(body->geoms[i]->name); - if (!config.visualizeCollisionGeoms && body->hasVisual && !isVisual) + std::string meshName = body->geoms[i]->name; + if (body->geoms[i]->type == MJCFVisualElement::MESH) { - // turn off visibility for prim - pxr::UsdGeomImageable imageable(prim); - imageable.MakeInvisible(); + meshName = body->geoms[i]->mesh; } - - // parse material and texture - if (body->geoms[i]->material != "") + if (body->geoms[i]->type != MJCFVisualElement::MESH || + convertedMeshes.find(meshName) == convertedMeshes.end()) { - if (materials.find(body->geoms[i]->material) != materials.end()) - { - MJCFMaterial material = materials.find(body->geoms[i]->material)->second; - MJCFTexture* texture = nullptr; - if (material.texture != "") - { - if (textures.find(material.texture) == textures.end()) - { - CARB_LOG_ERROR("Cannot find texture with name %s.\n", material.texture.c_str()); - } - texture = &(textures.find(material.texture)->second); - - // only MESH type has UV mapping - if (body->geoms[i]->type == MJCFGeom::MESH) - { - material.project_uvw = false; - } - } - Vec4 color = Vec4(); - createAndBindMaterial(stage, prim, &material, texture, color, false); - } - else - { - CARB_LOG_ERROR("Cannot find material with name %s.\n", body->geoms[i]->material.c_str()); - } - } - else if (body->geoms[i]->rgba.x != 0.2 || body->geoms[i]->rgba.y != 0.2 || body->geoms[i]->rgba.z != 0.2) - { - // create material with color only - createAndBindMaterial(stage, prim, nullptr, nullptr, body->geoms[i]->rgba, true); + std::string meshPath = "/meshes/" + SanitizeUsdName(meshName); + pxr::UsdPrim mesh_prim = createPrimitiveGeom(stage, meshPath, body->geoms[i], simulationMeshCache, + config, materialPaths, true, rootPrimPath, false); + convertedMeshes[meshName] = mesh_prim.GetPath(); } + basePrim.GetReferences().AddInternalReference(convertedMeshes[meshName]); + // parse material and texture using helper function + applyMaterial(stage, basePrim, body->geoms[i]); geomPrimMap[body->geoms[i]->name] = prim; } geomToBodyPrim[body->geoms[i]->name] = bodyPrim; hasVisualGeoms = true; } + visualsPrim.GetReferences().AddInternalReference(basePrim.GetPath()); + visualsPrim.SetInstanceable(true); return hasVisualGeoms; } @@ -332,40 +247,31 @@ void MJCFImporter::addVisualSites( { for (int i = 0; i < (int)body->sites.size(); i++) { - std::string sitePath = bodyPath + "/sites/" + SanitizeUsdName(body->sites[i]->name); + std::string name = SanitizeUsdName(body->sites[i]->name); + std::string sitePath = bodyPath + "/sites/" + name; pxr::UsdPrim prim; if (body->sites[i]->hasGeom) { - prim = createPrimitiveGeom(stage, sitePath, body->sites[i], config, true); - - // parse material and texture - if (body->sites[i]->material != "") + stage->DefinePrim(pxr::SdfPath(bodyPath + "/sites"), pxr::TfToken("Xform")); + prim = stage->DefinePrim(pxr::SdfPath(sitePath), pxr::TfToken("Xform")); + // prim = createPrimitiveGeom(stage, sitePath, body->sites[i], config, true); + if (body->sites[i]->type != MJCFVisualElement::MESH || convertedMeshes.find(name) == convertedMeshes.end()) { - if (materials.find(body->sites[i]->material) != materials.end()) + std::string meshPath = "/meshes/" + SanitizeUsdName(name); + pxr::UsdPrim mesh_prim = stage->GetPrimAtPath(pxr::SdfPath(meshPath)); + int counter = 0; + while (mesh_prim) { - MJCFMaterial material = materials.find(body->sites[i]->material)->second; - MJCFTexture* texture = nullptr; - if (material.texture != "") - { - if (textures.find(material.texture) == textures.end()) - { - CARB_LOG_ERROR("Cannot find texture with name %s.\n", material.texture.c_str()); - } - texture = &(textures.find(material.texture)->second); - } - Vec4 color = Vec4(); - createAndBindMaterial(stage, prim, &material, texture, color, false); - } - else - { - CARB_LOG_ERROR("Cannot find material with name %s.\n", body->geoms[i]->material.c_str()); + meshPath = std::string("/meshes/" + SanitizeUsdName(name) + "_" + std::to_string(++counter)); + mesh_prim = stage->GetPrimAtPath(pxr::SdfPath(meshPath)); } + mesh_prim = createPrimitiveGeom(stage, meshPath, body->sites[i], config, true); + convertedMeshes[name] = mesh_prim.GetPath(); } - else if (body->sites[i]->rgba.x != 0.2 || body->sites[i]->rgba.y != 0.2 || body->sites[i]->rgba.z != 0.2) - { - // create material with color only - createAndBindMaterial(stage, prim, nullptr, nullptr, body->sites[i]->rgba, true); - } + prim.GetReferences().AddInternalReference(convertedMeshes[name]); + prim.SetInstanceable(true); + // parse material and texture using helper function + applyMaterial(stage, prim, body->sites[i]); } else { @@ -376,37 +282,47 @@ void MJCFImporter::addVisualSites( } } -void MJCFImporter::addWorldGeomsAndSites(pxr::UsdStageWeakPtr stage, +void MJCFImporter::addWorldGeomsAndSites(std::unordered_map stages, std::string rootPath, const ImportConfig& config, const std::string instanceableUsdPath) { - + std::string dummyPath = rootPath + "/worldBody"; + pxr::UsdPrim dummyLink; + { + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); + dummyLink = pxr::UsdGeomXform::Define(stages["stage"], pxr::SdfPath(dummyPath)).GetPrim(); + } // we have to create a dummy link to place the sites/geoms defined in the // world body - std::string dummyPath = rootPath + "/worldBody"; - pxr::UsdPrim dummyLink = pxr::UsdGeomXform::Define(stage, pxr::SdfPath(dummyPath)).GetPrim(); - - pxr::UsdPhysicsArticulationRootAPI physicsSchema = pxr::UsdPhysicsArticulationRootAPI::Apply(dummyLink); - pxr::PhysxSchemaPhysxArticulationAPI physxSchema = pxr::PhysxSchemaPhysxArticulationAPI::Apply(dummyLink); - physxSchema.CreateEnabledSelfCollisionsAttr().Set(config.selfCollision); + { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + pxr::UsdPhysicsArticulationRootAPI physicsSchema = pxr::UsdPhysicsArticulationRootAPI::Apply(dummyLink); + pxr::PhysxSchemaPhysxArticulationAPI physxSchema = pxr::PhysxSchemaPhysxArticulationAPI::Apply(dummyLink); + physxSchema.CreateEnabledSelfCollisionsAttr().Set(config.selfCollision); + } for (int i = 0; i < (int)worldBody.geoms.size(); i++) { std::string bodyPath = dummyPath + "/" + SanitizeUsdName(worldBody.geoms[i]->name); - auto bodyPathSdf = getNextFreePath(stage, pxr::SdfPath(bodyPath)); + auto bodyPathSdf = getNextFreePath(stages["stage"], pxr::SdfPath(bodyPath)); bodyPath = bodyPathSdf.GetString(); std::string uniqueName = bodyPathSdf.GetName(); - - pxr::UsdPrim bodyLink = pxr::UsdGeomXform::Define(stage, bodyPathSdf).GetPrim(); - pxr::UsdPhysicsRigidBodyAPI physicsAPI = pxr::UsdPhysicsRigidBodyAPI::Apply(bodyLink); - pxr::PhysxSchemaPhysxRigidBodyAPI::Apply(bodyLink); + pxr::UsdPrim bodyLink; + { + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); + bodyLink = pxr::UsdGeomXform::Define(stages["stage"], bodyPathSdf).GetPrim(); + } + { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + pxr::UsdPhysicsRigidBodyAPI physicsAPI = pxr::UsdPhysicsRigidBodyAPI::Apply(bodyLink); + pxr::PhysxSchemaPhysxRigidBodyAPI::Apply(bodyLink); + physicsAPI.GetKinematicEnabledAttr().Set(true); + } // createFixedRoot(stage, dummyPath + "/joints/rootJoint_" + uniqueName, // dummyPath + "/" + uniqueName); - physicsAPI.GetKinematicEnabledAttr().Set(true); - bool hasCollisionGeoms = false; bool isVisual = worldBody.geoms[i]->contype == 0 && worldBody.geoms[i]->conaffinity == 0; if (isVisual) { @@ -414,31 +330,57 @@ void MJCFImporter::addWorldGeomsAndSites(pxr::UsdStageWeakPtr stage, } else { - if (worldBody.geoms[i]->type != MJCFGeom::PLANE) + if (worldBody.geoms[i]->type != MJCFVisualElement::PLANE) { - if (!config.makeInstanceable) + { - std::string geomPath = bodyPath + "/collisions/" + uniqueName; - pxr::UsdPrim prim = createPrimitiveGeom( - stage, geomPath, worldBody.geoms[i], simulationMeshCache, config, false, rootPath, true); + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + std::string baseCollisionPath = "/collisions/" + uniqueName; + std::string geomPath = bodyPath + baseCollisionPath; + stages["physics_stage"]->DefinePrim(pxr::SdfPath(bodyPath + "/collisions"), pxr::TfToken("Xform")); + pxr::UsdPrim basePrim = + stages["base_stage"]->DefinePrim(pxr::SdfPath(baseCollisionPath), pxr::TfToken("Xform")); + pxr::UsdPrim prim = + stages["physics_stage"]->DefinePrim(pxr::SdfPath(geomPath), pxr::TfToken("Xform")); + ; + + std::string meshName = worldBody.geoms[i]->name; + if (worldBody.geoms[i]->type == MJCFVisualElement::MESH) + { + meshName = worldBody.geoms[i]->mesh; + } + if (worldBody.geoms[i]->type != MJCFVisualElement::MESH || + convertedMeshes.find(meshName) == convertedMeshes.end()) + { + std::string meshPath = "/meshes/" + SanitizeUsdName(meshName); + pxr::UsdPrim mesh_prim = + createPrimitiveGeom(stages["base_stage"], meshPath, worldBody.geoms[i], simulationMeshCache, + config, materialPaths, false, rootPath, true); + convertedMeshes[meshName] = mesh_prim.GetPath(); + } + basePrim.GetReferences().AddInternalReference(convertedMeshes[meshName]); + prim.GetReferences().AddInternalReference(basePrim.GetPath()); - // enable collisions on prim if (prim) { - applyCollisionGeom(stage, prim, worldBody.geoms[i]); + applyCollisionGeom(stages["stage"], prim, config.convexDecomp); nameToUsdCollisionPrim[worldBody.geoms[i]->name] = bodyPath; } else { CARB_LOG_ERROR("Collision geom %s could not created", worldBody.geoms[i]->name.c_str()); } + prim.SetInstanceable(true); + // enable collisions on prim } } else { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + stages["physics_stage"]->DefinePrim(pxr::SdfPath(bodyPath + "/collisions"), pxr::TfToken("Xform")); // add collision plane (do not support instanceable asset for the plane) pxr::SdfPath collisionPlanePath = pxr::SdfPath(bodyPath + "/collisions/CollisionPlane"); - pxr::UsdGeomPlane collisionPlane = pxr::UsdGeomPlane::Define(stage, collisionPlanePath); + pxr::UsdGeomPlane collisionPlane = pxr::UsdGeomPlane::Define(stages["physics_stage"], collisionPlanePath); collisionPlane.CreatePurposeAttr().Set(pxr::UsdGeomTokens->guide); collisionPlane.CreateAxisAttr().Set(pxr::UsdGeomTokens->z); pxr::UsdPrim collisionPlanePrim = collisionPlane.GetPrim(); @@ -460,86 +402,54 @@ void MJCFImporter::addWorldGeomsAndSites(pxr::UsdStageWeakPtr stage, mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); pxr::UsdGeomXformable gprim = pxr::UsdGeomXformable(collisionPlanePrim); gprim.ClearXformOpOrder(); - pxr::UsdGeomXformOp transOp = gprim.AddTransformOp(); - transOp.Set(scale * mat, pxr::UsdTimeCode::Default()); + gprim.AddTranslateOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractTranslation()); + gprim.AddOrientOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractRotationQuat()); + gprim.AddScaleOp(pxr::UsdGeomXformOp::PrecisionDouble) + .Set(pxr::GfVec3d(config.distanceScale, config.distanceScale, config.distanceScale)); } - hasCollisionGeoms = true; } - if (config.makeInstanceable && hasCollisionGeoms && worldBody.geoms[i]->type != MJCFGeom::PLANE) + + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); + std::string geomPath = bodyPath + "/visuals/" + uniqueName; + stages["base_stage"]->DefinePrim(pxr::SdfPath(bodyPath + "/visuals"), pxr::TfToken("Xform")); + pxr::UsdPrim prim = stages["base_stage"]->DefinePrim(pxr::SdfPath(geomPath), pxr::TfToken("Xform")); + std::string meshName = worldBody.geoms[i]->name; + if (worldBody.geoms[i]->type == MJCFVisualElement::MESH) { - // make main collisions prim instanceable and reference meshes - pxr::SdfPath collisionsPath = pxr::SdfPath(bodyPath + "/collisions"); - pxr::UsdPrim collisionsPrim = stage->DefinePrim(collisionsPath); - collisionsPrim.GetReferences().AddReference(instanceableUsdPath, collisionsPath); - collisionsPrim.SetInstanceable(true); + meshName = worldBody.geoms[i]->mesh; } - - bool hasVisualGeoms = false; - if (!config.makeInstanceable) + if (worldBody.geoms[i]->type != MJCFVisualElement::MESH || + convertedMeshes.find(meshName) == convertedMeshes.end()) { - std::string geomPath = bodyPath + "/visuals/" + uniqueName; - pxr::UsdPrim prim = createPrimitiveGeom( - stage, geomPath, worldBody.geoms[i], simulationMeshCache, config, true, rootPath, false); - - if (!config.visualizeCollisionGeoms && worldBody.hasVisual && !isVisual) - { - // turn off visibility for collision prim - pxr::UsdGeomImageable imageable(prim); - imageable.MakeInvisible(); - } - - // parse material and texture - if (worldBody.geoms[i]->material != "") - { - if (materials.find(worldBody.geoms[i]->material) != materials.end()) - { - MJCFMaterial material = materials.find(worldBody.geoms[i]->material)->second; - MJCFTexture* texture = nullptr; - if (material.texture != "") - { - if (textures.find(material.texture) == textures.end()) - { - CARB_LOG_ERROR("Cannot find texture with name %s.\n", material.texture.c_str()); - } - texture = &(textures.find(material.texture)->second); - - // only MESH type has UV mapping - if (worldBody.geoms[i]->type == MJCFGeom::MESH) - { - material.project_uvw = false; - } - } - Vec4 color = Vec4(); - createAndBindMaterial(stage, prim, &material, texture, color, false); - } - else - { - CARB_LOG_ERROR("Cannot find material with name %s.\n", worldBody.geoms[i]->material.c_str()); - } - } - else if (worldBody.geoms[i]->rgba.x != 0.2 || worldBody.geoms[i]->rgba.y != 0.2 || - worldBody.geoms[i]->rgba.z != 0.2) - { - // create material with color only - createAndBindMaterial(stage, prim, nullptr, nullptr, worldBody.geoms[i]->rgba, true); - } - geomPrimMap[worldBody.geoms[i]->name] = prim; + std::string meshPath = "/meshes/" + SanitizeUsdName(meshName); + pxr::UsdPrim mesh_prim = + createPrimitiveGeom(stages["base_stage"], meshPath, worldBody.geoms[i], simulationMeshCache, config, + materialPaths, true, rootPath, false); + convertedMeshes[meshName] = mesh_prim.GetPath(); } - geomToBodyPrim[worldBody.geoms[i]->name] = bodyLink; - hasVisualGeoms = true; - - if (config.makeInstanceable && hasVisualGeoms) + prim.GetReferences().AddInternalReference(convertedMeshes[meshName]); + prim.SetInstanceable(true); + // pxr::UsdPrim prim = createPrimitiveGeom(stages["stage"], geomPath, worldBody.geoms[i], + // simulationMeshCache, + // config, materialPaths, true, rootPath, false); + + if (!config.visualizeCollisionGeoms && worldBody.hasVisual && + !stages["base_stage"]->GetPrimAtPath(pxr::SdfPath(bodyPath + "/visuals")).GetChildren().empty()) { - // make main visuals prim instanceable and reference meshes - pxr::SdfPath visualsPath = pxr::SdfPath(bodyPath + "/visuals"); - pxr::UsdPrim visualsPrim = stage->DefinePrim(visualsPath); - visualsPrim.GetReferences().AddReference(instanceableUsdPath, visualsPath); - visualsPrim.SetInstanceable(true); + // turn off visibility for collision prim + pxr::UsdGeomImageable imageable(prim); + imageable.MakeInvisible(); } + + // parse material and texture using helper function + applyMaterial(stages["base_stage"], bodyLink, worldBody.geoms[i]); + geomPrimMap[worldBody.geoms[i]->name] = prim; + + geomToBodyPrim[worldBody.geoms[i]->name] = bodyLink; } - addVisualSites(stage, dummyLink, &worldBody, dummyPath, config); + addVisualSites(stages["base_stage"], dummyLink, &worldBody, dummyPath, config); } void MJCFImporter::AddContactFilters(pxr::UsdStageWeakPtr stage) @@ -563,10 +473,35 @@ void MJCFImporter::AddContactFilters(pxr::UsdStageWeakPtr stage) } } +void createTendonAxisRootAPI(const pxr::UsdPhysicsJoint& rootJointPrim, + const pxr::TfToken& name, + const pxr::VtArray& coef, + const MJCFTendon* t) +{ + pxr::PhysxSchemaPhysxTendonAxisRootAPI rootAPI = + pxr::PhysxSchemaPhysxTendonAxisRootAPI::Apply(rootJointPrim.GetPrim(), name); + + if (t->limited) + { + rootAPI.CreateLowerLimitAttr().Set(t->range[0]); + rootAPI.CreateUpperLimitAttr().Set(t->range[1]); + } + + if (t->springlength >= 0) + { + rootAPI.CreateRestLengthAttr().Set(t->springlength); + } + + rootAPI.CreateStiffnessAttr().Set(t->stiffness); + rootAPI.CreateDampingAttr().Set(t->damping); + + pxr::PhysxSchemaPhysxTendonAttachmentAPI(rootAPI, rootAPI.GetName()).CreateGearingAttr().Set(coef); +} + void MJCFImporter::AddTendons(pxr::UsdStageWeakPtr stage, std::string rootPath) { // adding tendons - for (const auto& t : tendons) + for (const MJCFTendon* t : tendons) { if (t->type == MJCFTendon::FIXED) { @@ -583,62 +518,26 @@ void MJCFImporter::AddTendons(pxr::UsdStageWeakPtr stage, std::string rootPath) } } + // adding the TendonAxisRoot api to the root joint pxr::VtArray coef = { rootJoint->coef }; + if (revoluteJointsMap.find(rootJoint->joint) != revoluteJointsMap.end()) { - pxr::UsdPhysicsRevoluteJoint rootJointPrim = revoluteJointsMap[rootJoint->joint]; - pxr::PhysxSchemaPhysxTendonAxisRootAPI rootAPI = pxr::PhysxSchemaPhysxTendonAxisRootAPI::Apply( - rootJointPrim.GetPrim(), pxr::TfToken(SanitizeUsdName(t->name))); - if (t->limited) - { - rootAPI.CreateLowerLimitAttr().Set(t->range[0]); - rootAPI.CreateUpperLimitAttr().Set(t->range[1]); - } - if (t->springlength >= 0) - { - rootAPI.CreateRestLengthAttr().Set(t->springlength); - } - rootAPI.CreateStiffnessAttr().Set(t->stiffness); - rootAPI.CreateDampingAttr().Set(t->damping); - pxr::PhysxSchemaPhysxTendonAttachmentAPI(rootAPI, rootAPI.GetName()).CreateGearingAttr().Set(coef); + createTendonAxisRootAPI( + revoluteJointsMap[rootJoint->joint], pxr::TfToken(SanitizeUsdName(t->name)), coef, t); } else if (prismaticJointsMap.find(rootJoint->joint) != prismaticJointsMap.end()) { - pxr::UsdPhysicsPrismaticJoint rootJointPrim = prismaticJointsMap[rootJoint->joint]; - pxr::PhysxSchemaPhysxTendonAxisRootAPI rootAPI = pxr::PhysxSchemaPhysxTendonAxisRootAPI::Apply( - rootJointPrim.GetPrim(), pxr::TfToken(SanitizeUsdName(t->name))); - if (t->limited) - { - rootAPI.CreateLowerLimitAttr().Set(t->range[0]); - rootAPI.CreateUpperLimitAttr().Set(t->range[1]); - } - if (t->springlength >= 0) - { - rootAPI.CreateRestLengthAttr().Set(t->springlength); - } - rootAPI.CreateStiffnessAttr().Set(t->stiffness); - rootAPI.CreateDampingAttr().Set(t->damping); - pxr::PhysxSchemaPhysxTendonAttachmentAPI(rootAPI, rootAPI.GetName()).CreateGearingAttr().Set(coef); + createTendonAxisRootAPI( + prismaticJointsMap[rootJoint->joint], pxr::TfToken(SanitizeUsdName(t->name)), coef, t); } else if (d6JointsMap.find(rootJoint->joint) != d6JointsMap.end()) { - pxr::UsdPhysicsJoint rootJointPrim = d6JointsMap[rootJoint->joint]; - pxr::PhysxSchemaPhysxTendonAxisRootAPI rootAPI = pxr::PhysxSchemaPhysxTendonAxisRootAPI::Apply( - rootJointPrim.GetPrim(), pxr::TfToken(SanitizeUsdName(t->name))); - if (t->limited) - { - rootAPI.CreateLowerLimitAttr().Set(t->range[0]); - rootAPI.CreateUpperLimitAttr().Set(t->range[1]); - } - if (t->springlength >= 0) - { - rootAPI.CreateRestLengthAttr().Set(t->springlength); - } - rootAPI.CreateStiffnessAttr().Set(t->stiffness); - rootAPI.CreateDampingAttr().Set(t->damping); - pxr::PhysxSchemaPhysxTendonAttachmentAPI(rootAPI, rootAPI.GetName()).CreateGearingAttr().Set(coef); + createTendonAxisRootAPI( + d6JointsMap[rootJoint->joint], pxr::TfToken(SanitizeUsdName(t->name)), coef, t); } + else { CARB_LOG_ERROR( @@ -738,7 +637,6 @@ void MJCFImporter::AddTendons(pxr::UsdStageWeakPtr stage, std::string rootPath) { name = attachment->site; linkPrim = dummyLink; - siteToBodyPrim[name] = dummyLink; hasLink = true; } @@ -865,80 +763,21 @@ pxr::GfVec3f MJCFImporter::GetLocalPos(MJCFTendon::SpatialAttachment attachment) return localPos; } -void MJCFImporter::CreateInstanceableMeshes(pxr::UsdStageRefPtr stage, - MJCFBody* body, - const std::string rootPrimPath, - const bool isRoot, - const ImportConfig& config) -{ - - if ((!createBodyForFixedJoint) && ((body->joints.size() == 0) && (!isRoot))) - { - CARB_LOG_WARN( - "RigidBodySpec with no joint will have no geometry for now, " - "to avoid instability of fixed joint!"); - } - else - { - if (!body->inertial && body->geoms.size() == 0) - { - CARB_LOG_WARN("*** Neither inertial nor geometries where specified for %s", body->name.c_str()); - return; - } - - std::string bodyPath = rootPrimPath + "/" + SanitizeUsdName(body->name); - - // add collision geoms first to detect whether visuals are available - for (int i = 0; i < (int)body->geoms.size(); i++) - { - bool isVisual = body->geoms[i]->contype == 0 && body->geoms[i]->conaffinity == 0; - if (isVisual) - { - body->hasVisual = true; - } - else - { - std::string geomPath = bodyPath + "/collisions/" + SanitizeUsdName(body->geoms[i]->name); - pxr::UsdPrim prim = createPrimitiveGeom( - stage, geomPath, body->geoms[i], simulationMeshCache, config, false, rootPrimPath, true); - - // enable collisions on prim - if (prim) - { - applyCollisionGeom(stage, prim, body->geoms[i]); - nameToUsdCollisionPrim[body->geoms[i]->name] = bodyPath; - } - else - { - CARB_LOG_ERROR("Collision geom %s could not be created", body->geoms[i]->name.c_str()); - } - } - } - - // add visual geoms - addVisualGeom(stage, pxr::UsdPrim(), body, bodyPath, config, true, rootPrimPath); - - // recursively create children's bodies - for (int i = 0; i < (int)body->bodies.size(); i++) - { - CreateInstanceableMeshes(stage, body->bodies[i], rootPrimPath, false, config); - } - } -} - -void MJCFImporter::CreatePhysicsBodyAndJoint(pxr::UsdStageWeakPtr stage, +void MJCFImporter::CreatePhysicsBodyAndJoint(std::unordered_map stages, MJCFBody* body, - std::string rootPrimPath, - const Transform trans, + const std::string& rootPath, + const std::string& rootPrimPath, + const Transform& trans, const bool isRoot, - const std::string parentBodyPath, + const std::string& parentBodyPath, const ImportConfig& config, - const std::string instanceableUsdPath) + const std::string& instanceableUsdPath) { + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); + Transform myTrans; myTrans = trans * Transform(body->pos, body->quat); int numJoints = (int)body->joints.size(); - if ((!createBodyForFixedJoint) && ((body->joints.size() == 0) && (!isRoot))) { CARB_LOG_WARN( @@ -947,99 +786,96 @@ void MJCFImporter::CreatePhysicsBodyAndJoint(pxr::UsdStageWeakPtr stage, } else { + pxr::UsdEditContext context(stages["stage"], stages["base_stage"]->GetRootLayer()); if (!body->inertial && body->geoms.size() == 0) { CARB_LOG_WARN("*** Neither inertial nor geometries where specified for %s", body->name.c_str()); - return; + // return; } - std::string bodyPath = rootPrimPath + "/" + SanitizeUsdName(body->name); - pxr::UsdGeomXformable bodyPrim = createBody(stage, bodyPath, myTrans, config); + pxr::UsdGeomXformable bodyPrim = createBody(stages["stage"], bodyPath, myTrans, config); // add Rigid Body if (bodyPrim) { - applyRigidBody(bodyPrim, body, config); + applyRigidBody(stages, bodyPrim, body, config); } else { CARB_LOG_ERROR("Body prim %s could not created", body->name.c_str()); - return; + // return; } - if (isRoot) { - pxr::UsdGeomXform rootPrim = pxr::UsdGeomXform::Define(stage, pxr::SdfPath(rootPrimPath)); - applyArticulationAPI(stage, rootPrim, config); - - if (config.fixBase || numJoints == 0) + pxr::UsdGeomXform rootPrim = pxr::UsdGeomXform::Define(stages["stage"], pxr::SdfPath(rootPrimPath)); { - // enable multiple root joints - createFixedRoot(stage, rootPrimPath + "/joints/rootJoint_" + SanitizeUsdName(body->name), - rootPrimPath + "/" + SanitizeUsdName(body->name)); + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + applyArticulationAPI(stages, rootPrim, config); + if (config.fixBase || numJoints == 0) + { + // enable multiple root joints + createFixedRoot(stages, rootPath + "/joints/rootJoint_" + SanitizeUsdName(body->name), + rootPrimPath + "/" + SanitizeUsdName(body->name)); + } } } - + pxr::UsdPrim collisionPrim = + stages["physics_stage"]->DefinePrim(pxr::SdfPath(bodyPath + "/collisions"), pxr::TfToken("Xform")); + // bool hasVisualGeoms = false; // add collision geoms first to detect whether visuals are available - bool hasCollisionGeoms = false; - for (int i = 0; i < (int)body->geoms.size(); i++) { - bool isVisual = body->geoms[i]->contype == 0 && body->geoms[i]->conaffinity == 0; - if (isVisual) - { - body->hasVisual = true; - } - else + + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + + std::string baseCollisionsPath = "/collisions/" + bodyPrim.GetPrim().GetName().GetString(); + pxr::UsdPrim basePrim = + stages["physics_stage"]->DefinePrim(pxr::SdfPath(baseCollisionsPath), pxr::TfToken("Xform")); + for (int i = 0; i < (int)body->geoms.size(); i++) { - if (!config.makeInstanceable) + bool isVisual = body->geoms[i]->contype == 0 && body->geoms[i]->conaffinity == 0; + if (isVisual) { - std::string geomPath = bodyPath + "/collisions/" + SanitizeUsdName(body->geoms[i]->name); - pxr::UsdPrim prim = createPrimitiveGeom( - stage, geomPath, body->geoms[i], simulationMeshCache, config, false, rootPrimPath, true); - - // enable collisions on prim - if (prim) + body->hasVisual = true; + } + else + { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + std::string meshName = body->geoms[i]->name; + if (body->geoms[i]->type == MJCFVisualElement::MESH) { - applyCollisionGeom(stage, prim, body->geoms[i]); - - nameToUsdCollisionPrim[body->geoms[i]->name] = bodyPath; + meshName = body->geoms[i]->mesh; } - else + if (body->geoms[i]->type != MJCFVisualElement::MESH || + convertedMeshes.find(meshName) == convertedMeshes.end()) { - CARB_LOG_ERROR("Collision geom %s could not created", body->geoms[i]->name.c_str()); + std::string meshPath = "/meshes/" + SanitizeUsdName(meshName); + pxr::UsdPrim mesh_prim = + createPrimitiveGeom(stages["base_stage"], meshPath, body->geoms[i], simulationMeshCache, + config, materialPaths, false, rootPrimPath, true); + convertedMeshes[meshName] = mesh_prim.GetPath(); } + basePrim.GetReferences().AddInternalReference(convertedMeshes[meshName]); + nameToUsdCollisionPrim[body->geoms[i]->name] = bodyPath; } - hasCollisionGeoms = true; } - } - if (config.makeInstanceable && hasCollisionGeoms) - { - // make main collisions prim instanceable and reference meshes - pxr::SdfPath collisionsPath = pxr::SdfPath(bodyPath + "/collisions"); - pxr::UsdPrim collisionsPrim = stage->DefinePrim(collisionsPath); - collisionsPrim.GetReferences().AddReference(instanceableUsdPath, collisionsPath); - collisionsPrim.SetInstanceable(true); - } - // add visual geoms - bool hasVisualGeoms = addVisualGeom(stage, bodyPrim.GetPrim(), body, bodyPath, config, false, rootPrimPath); - if (config.makeInstanceable && hasVisualGeoms) - { - // make main visuals prim instanceable and reference meshes - pxr::SdfPath visualsPath = pxr::SdfPath(bodyPath + "/visuals"); - pxr::UsdPrim visualsPrim = stage->DefinePrim(visualsPath); - visualsPrim.GetReferences().AddReference(instanceableUsdPath, visualsPath); - visualsPrim.SetInstanceable(true); + collisionPrim.GetReferences().AddInternalReference(basePrim.GetPath()); + applyCollisionGeom(stages["stage"], collisionPrim, config.convexDecomp); + collisionPrim.SetInstanceable(true); } - + // add visual geoms + addVisualGeom(stages["base_stage"], bodyPrim.GetPrim(), body, bodyPath, config, false, rootPrimPath); // add sites if (config.importSites) { - addVisualSites(stage, bodyPrim.GetPrim(), body, bodyPath, config); + addVisualSites(stages["base_stage"], bodyPrim.GetPrim(), body, bodyPath, config); + } + if (!config.visualizeCollisionGeoms) + { + // turn off visibility for collision prim + pxr::UsdGeomImageable imageable(collisionPrim); + imageable.MakeInvisible(); } - - // int numJoints = (int)body->joints.size(); - // add joints // create joint linked to parent @@ -1047,194 +883,210 @@ void MJCFImporter::CreatePhysicsBodyAndJoint(pxr::UsdStageWeakPtr stage, // go into this if statement to create any joints. However, if the root body // has joints but the import config has fixBase set to true, also no need to // create any additional joints. - if (!(isRoot && (numJoints == 0 || config.fixBase))) { - // jointSpec transform - Transform origin; - if (body->joints.size() > 0) - { - // origin at last joint (deepest) - origin.p = body->joints[0]->pos; - } - else + addJoints(stages, rootPath, parentBodyPath, bodyPath, body, config, trans, myTrans, isRoot, numJoints); + // recursively create children's bodies + for (int i = 0; i < (int)body->bodies.size(); i++) { - origin.p = Vec3(0.0f, 0.0f, 0.0f); + CreatePhysicsBodyAndJoint(stages, body->bodies[i], rootPath, rootPrimPath, myTrans, false, bodyPath, + config, instanceableUsdPath); } + } + } +} - // compute joint frame and map joint axes to D6 axes - int axisMap[3] = { 0, 1, 2 }; - computeJointFrame(origin, axisMap, body); +void MJCFImporter::addJoints(std::unordered_map stages, + const std::string& rootPath, + const std::string& parentBodyPath, + const std::string& bodyPath, + MJCFBody* body, + const ImportConfig& config, + const Transform& trans0, + const Transform& trans1, + const bool isRoot, + const int numJoints) +{ + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + if (!(isRoot && (numJoints == 0 || config.fixBase))) + { + // jointSpec transform + Transform origin; + if (body->joints.size() > 0) + { + // origin at last joint (deepest) + origin.p = body->joints[0]->pos; + } + else + { + origin.p = Vec3(0.0f, 0.0f, 0.0f); + } + + // compute joint frame and map joint axes to D6 axes + int axisMap[3] = { 0, 1, 2 }; + computeJointFrame(origin, axisMap, body); + + origin = trans1 * origin; - origin = myTrans * origin; + Transform ptran = trans0; + Transform mtran = trans1; - Transform ptran = trans; - Transform mtran = myTrans; + Transform ppose = (Inverse(ptran)) * origin; + Transform cpose = (Inverse(mtran)) * origin; - Transform ppose = (Inverse(ptran)) * origin; - Transform cpose = (Inverse(mtran)) * origin; + std::string jointPath = rootPath + "/joints/" + SanitizeUsdName(body->name); + + int numJoints = (int)body->joints.size(); + if (numJoints == 0) + { + Transform poseJointToParentBody = Transform(body->pos, body->quat); + Transform poseJointToChildBody = Transform(); + pxr::UsdPhysicsJoint jointPrim = createFixedJoint(stages["stage"], jointPath, poseJointToParentBody, + poseJointToChildBody, parentBodyPath, bodyPath, config); + } + else if (numJoints == 1) + { + Transform poseJointToParentBody = Transform(ppose.p, ppose.q); + Transform poseJointToChildBody = Transform(cpose.p, cpose.q); + MJCFJoint* joint = body->joints.front(); - std::string jointPath = rootPrimPath + "/joints/" + SanitizeUsdName(body->name); - int numJoints = (int)body->joints.size(); - if (numJoints == 0) + auto actuatorIterator = jointToActuatorIdx.find(joint->name); + int actuatorIdx = actuatorIterator != jointToActuatorIdx.end() ? actuatorIterator->second : -1; + MJCFActuator* actuator = nullptr; + if (actuatorIdx != -1) { - Transform poseJointToParentBody = Transform(body->pos, body->quat); - Transform poseJointToChildBody = Transform(); - pxr::UsdPhysicsJoint jointPrim = createFixedJoint( - stage, jointPath, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, config); + actuatorIdx = actuatorIterator->second; + actuator = actuators[actuatorIdx]; } - else if (numJoints == 1) - { - Transform poseJointToParentBody = Transform(ppose.p, ppose.q); - Transform poseJointToChildBody = Transform(cpose.p, cpose.q); - MJCFJoint* joint = body->joints.front(); - std::string jointPath = rootPrimPath + "/joints/" + SanitizeUsdName(joint->name); + std::string jointPath = rootPath + "/joints/" + SanitizeUsdName(joint->name); - auto actuatorIterator = jointToActuatorIdx.find(joint->name); - int actuatorIdx = actuatorIterator != jointToActuatorIdx.end() ? actuatorIterator->second : -1; - MJCFActuator* actuator = nullptr; - if (actuatorIdx != -1) + if (joint->type == MJCFJoint::HINGE) + { + pxr::UsdPhysicsRevoluteJoint jointPrim = + pxr::UsdPhysicsRevoluteJoint::Define(stages["stage"], pxr::SdfPath(jointPath)); + initPhysicsJoint(jointPrim, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, + config.distanceScale); + applyPhysxJoint(jointPrim, joint); + + // joint was aligned such that its hinge axis is aligned with local + // x-axis. + jointPrim.CreateAxisAttr().Set(pxr::UsdPhysicsTokens->x); + if (joint->limited) { - actuatorIdx = actuatorIterator->second; - actuator = actuators[actuatorIdx]; + jointPrim.CreateLowerLimitAttr().Set(joint->range.x * 180 / kPi); + jointPrim.CreateUpperLimitAttr().Set(joint->range.y * 180 / kPi); } - if (joint->type == MJCFJoint::HINGE) - { - pxr::UsdPhysicsRevoluteJoint jointPrim = - pxr::UsdPhysicsRevoluteJoint::Define(stage, pxr::SdfPath(jointPath)); - initPhysicsJoint(jointPrim, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, - config.distanceScale); - applyPhysxJoint(jointPrim, joint); + pxr::PhysxSchemaPhysxLimitAPI physxLimitAPI = + pxr::PhysxSchemaPhysxLimitAPI::Apply(jointPrim.GetPrim(), pxr::TfToken(pxr::UsdPhysicsTokens->x)); + physxLimitAPI.CreateStiffnessAttr().Set(joint->stiffness); + physxLimitAPI.CreateDampingAttr().Set(joint->damping); - // joint was aligned such that its hinge axis is aligned with local - // x-axis. - jointPrim.CreateAxisAttr().Set(pxr::UsdPhysicsTokens->x); + revoluteJointsMap[joint->name] = jointPrim; - if (joint->limited) - { - jointPrim.CreateLowerLimitAttr().Set(joint->range.x * 180 / kPi); - jointPrim.CreateUpperLimitAttr().Set(joint->range.y * 180 / kPi); - } - - pxr::PhysxSchemaPhysxLimitAPI physxLimitAPI = pxr::PhysxSchemaPhysxLimitAPI::Apply( - jointPrim.GetPrim(), pxr::TfToken(pxr::UsdPhysicsTokens->x)); - physxLimitAPI.CreateStiffnessAttr().Set(joint->stiffness); - physxLimitAPI.CreateDampingAttr().Set(joint->damping); + createJointDrives(jointPrim, joint, actuator, "X", config); + } + else if (joint->type == MJCFJoint::SLIDE) + { + pxr::UsdPhysicsPrismaticJoint jointPrim = + pxr::UsdPhysicsPrismaticJoint::Define(stages["stage"], pxr::SdfPath(jointPath)); + initPhysicsJoint(jointPrim, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, + config.distanceScale); + applyPhysxJoint(jointPrim, joint); - revoluteJointsMap[joint->name] = jointPrim; + // joint was aligned such that its hinge axis is aligned with local + // x-axis. + jointPrim.CreateAxisAttr().Set(pxr::UsdPhysicsTokens->x); - createJointDrives(jointPrim, joint, actuator, "X", config); - } - else if (joint->type == MJCFJoint::SLIDE) + if (joint->limited) { - pxr::UsdPhysicsPrismaticJoint jointPrim = - pxr::UsdPhysicsPrismaticJoint::Define(stage, pxr::SdfPath(jointPath)); - initPhysicsJoint(jointPrim, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, - config.distanceScale); - applyPhysxJoint(jointPrim, joint); + jointPrim.CreateLowerLimitAttr().Set(config.distanceScale * joint->range.x); + jointPrim.CreateUpperLimitAttr().Set(config.distanceScale * joint->range.y); + } - // joint was aligned such that its hinge axis is aligned with local - // x-axis. - jointPrim.CreateAxisAttr().Set(pxr::UsdPhysicsTokens->x); + pxr::PhysxSchemaPhysxLimitAPI physxLimitAPI = + pxr::PhysxSchemaPhysxLimitAPI::Apply(jointPrim.GetPrim(), pxr::TfToken(pxr::UsdPhysicsTokens->x)); + physxLimitAPI.CreateStiffnessAttr().Set(joint->stiffness); + physxLimitAPI.CreateDampingAttr().Set(joint->damping); - if (joint->limited) - { - jointPrim.CreateLowerLimitAttr().Set(config.distanceScale * joint->range.x); - jointPrim.CreateUpperLimitAttr().Set(config.distanceScale * joint->range.y); - } + prismaticJointsMap[joint->name] = jointPrim; - pxr::PhysxSchemaPhysxLimitAPI physxLimitAPI = pxr::PhysxSchemaPhysxLimitAPI::Apply( - jointPrim.GetPrim(), pxr::TfToken(pxr::UsdPhysicsTokens->x)); - physxLimitAPI.CreateStiffnessAttr().Set(joint->stiffness); - physxLimitAPI.CreateDampingAttr().Set(joint->damping); - - prismaticJointsMap[joint->name] = jointPrim; + createJointDrives(jointPrim, joint, actuator, "X", config); + } + else if (joint->type == MJCFJoint::BALL) + { + pxr::UsdPhysicsJoint jointPrim = createD6Joint(stages["stage"], jointPath, poseJointToParentBody, + poseJointToChildBody, parentBodyPath, bodyPath, config); + applyPhysxJoint(jointPrim, body->joints[0]); - createJointDrives(jointPrim, joint, actuator, "X", config); - } - else if (joint->type == MJCFJoint::BALL) + // lock all translational axes to create a D6 joint. + std::string translationAxes[6] = { "transX", "transY", "transZ" }; + for (int i = 0; i < 3; ++i) { - pxr::UsdPhysicsJoint jointPrim = createD6Joint( - stage, jointPath, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, config); - applyPhysxJoint(jointPrim, body->joints[0]); - - // lock all translational axes to create a D6 joint. - std::string translationAxes[6] = { "transX", "transY", "transZ" }; - for (int i = 0; i < 3; ++i) - { - pxr::UsdPhysicsLimitAPI limitAPI = - pxr::UsdPhysicsLimitAPI::Apply(jointPrim.GetPrim(), pxr::TfToken(translationAxes[i])); - limitAPI.CreateLowAttr().Set(1.0f); - limitAPI.CreateHighAttr().Set(-1.0f); - } - - d6JointsMap[joint->name] = jointPrim; + pxr::UsdPhysicsLimitAPI limitAPI = + pxr::UsdPhysicsLimitAPI::Apply(jointPrim.GetPrim(), pxr::TfToken(translationAxes[i])); + limitAPI.CreateLowAttr().Set(1.0f); + limitAPI.CreateHighAttr().Set(-1.0f); } - else if (joint->type == MJCFJoint::FREE) + + d6JointsMap[joint->name] = jointPrim; + } + else if (joint->type == MJCFJoint::FREE) + { + } + else + { + CARB_LOG_WARN( + "*** Only hinge, slide, ball, and free joints are " + "supported by MJCF importer"); + } + } + else + { + Transform poseJointToParentBody = Transform(ppose.p, ppose.q); + Transform poseJointToChildBody = Transform(cpose.p, cpose.q); + pxr::UsdPhysicsJoint jointPrim = createD6Joint(stages["stage"], jointPath, poseJointToParentBody, + poseJointToChildBody, parentBodyPath, bodyPath, config); + applyPhysxJoint(jointPrim, body->joints[0]); + + // TODO: this needs to be updated to support all joint types and + // combinations set joint limits + for (int jid = 0; jid < (int)body->joints.size(); jid++) + { + // all locked + for (int k = 0; k < 6; ++k) { + body->joints[jid]->velocityLimits[k] = 100.f; } - else + + if (body->joints[jid]->type != MJCFJoint::HINGE && body->joints[jid]->type != MJCFJoint::SLIDE) { CARB_LOG_WARN( - "*** Only hinge, slide, ball, and free joints are " - "supported by MJCF importer"); + "*** Only hinge and slide joints are supported by " + "MJCF importer"); + continue; } - } - else - { - Transform poseJointToParentBody = Transform(ppose.p, ppose.q); - Transform poseJointToChildBody = Transform(cpose.p, cpose.q); - pxr::UsdPhysicsJoint jointPrim = createD6Joint( - stage, jointPath, poseJointToParentBody, poseJointToChildBody, parentBodyPath, bodyPath, config); - applyPhysxJoint(jointPrim, body->joints[0]); - // TODO: this needs to be updated to support all joint types and - // combinations set joint limits - for (int jid = 0; jid < (int)body->joints.size(); jid++) + if (body->joints[jid]->ref != 0.0f) { - // all locked - for (int k = 0; k < 6; ++k) - { - body->joints[jid]->velocityLimits[k] = 100.f; - } - - if (body->joints[jid]->type != MJCFJoint::HINGE && body->joints[jid]->type != MJCFJoint::SLIDE) - { - CARB_LOG_WARN( - "*** Only hinge and slide joints are supported by " - "MJCF importer"); - continue; - } - - if (body->joints[jid]->ref != 0.0f) - { - CARB_LOG_WARN("Don't know how to deal with joint with ref != 0 yet"); - } + CARB_LOG_WARN("Don't know how to deal with joint with ref != 0 yet"); + } - // actuators - TODO: how do we set this part? what do we need to set? - auto actuatorIterator = jointToActuatorIdx.find(body->joints[jid]->name); - int actuatorIdx = actuatorIterator != jointToActuatorIdx.end() ? actuatorIterator->second : -1; - MJCFActuator* actuator = nullptr; - if (actuatorIdx != -1) - { - actuatorIdx = actuatorIterator->second; - actuator = actuators[actuatorIdx]; - } + // actuators - TODO: how do we set this part? what do we need to set? + auto actuatorIterator = jointToActuatorIdx.find(body->joints[jid]->name); + int actuatorIdx = actuatorIterator != jointToActuatorIdx.end() ? actuatorIterator->second : -1; + MJCFActuator* actuator = nullptr; + if (actuatorIdx != -1) + { + actuatorIdx = actuatorIterator->second; + actuator = actuators[actuatorIdx]; + } - applyJointLimits(jointPrim, body->joints[jid], actuator, axisMap, jid, numJoints, config); + applyJointLimits(jointPrim, body->joints[jid], actuator, axisMap, jid, numJoints, config); - d6JointsMap[body->joints[jid]->name] = jointPrim; - } + d6JointsMap[body->joints[jid]->name] = jointPrim; } } - - // recursively create children's bodies - for (int i = 0; i < (int)body->bodies.size(); i++) - { - CreatePhysicsBodyAndJoint( - stage, body->bodies[i], rootPrimPath, myTrans, false, bodyPath, config, instanceableUsdPath); - } } } @@ -1448,6 +1300,8 @@ void MJCFImporter::computeKinematicHierarchy() } } + } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfImporter.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.h similarity index 74% rename from source/extensions/omni.importer.mjcf/plugins/MjcfImporter.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.h index 3670720..2378084 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfImporter.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfImporter.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,6 +25,7 @@ #include "MjcfUtils.h" #include "core/mesh.h" #include "math/core/maths.h" +#include "utils/Usd.h" #include @@ -39,7 +40,9 @@ #include #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -78,6 +81,8 @@ class MJCFImporter std::map simulationMeshCache; std::map meshes; std::map materials; + std::map materialPaths; + std::map convertedMeshes; std::map textures; std::vector contactGraph; @@ -95,25 +100,31 @@ class MJCFImporter ~MJCFImporter(); void populateBodyLookup(MJCFBody* body); - bool AddPhysicsEntities(pxr::UsdStageWeakPtr stage, + bool AddPhysicsEntities(std::unordered_map stages, const Transform trans, const std::string& rootPrimPath, const ImportConfig& config); - void CreateInstanceableMeshes(pxr::UsdStageRefPtr stage, - MJCFBody* body, - const std::string rootPrimPath, - const bool isRoot, - const ImportConfig& config); - - void CreatePhysicsBodyAndJoint(pxr::UsdStageWeakPtr stage, + void CreatePhysicsBodyAndJoint(std::unordered_map stages, MJCFBody* body, - std::string rootPrimPath, - const Transform trans, + const std::string& rootPath, + const std::string& rootPrimPath, + const Transform& trans, const bool isRoot, - const std::string parentBodyPath, + const std::string& parentBodyPath, const ImportConfig& config, - const std::string instanceableUsdPath); + const std::string& instanceableUsdPath); + + void addJoints(std::unordered_map stages, + const std::string& rootPath, + const std::string& parentBodyPath, + const std::string& bodyPath, + MJCFBody* body, + const ImportConfig& config, + const Transform& trans0, + const Transform& trans1, + const bool isRoot, + const int numJoints); void computeJointFrame(Transform& origin, int* axisMap, const MJCFBody* body); @@ -122,7 +133,7 @@ class MJCFImporter void computeKinematicHierarchy(); - void addWorldGeomsAndSites(pxr::UsdStageWeakPtr stage, + void addWorldGeomsAndSites(std::unordered_map stages, std::string rootPath, const ImportConfig& config, const std::string instanceableUsdPath); @@ -142,8 +153,11 @@ class MJCFImporter void AddContactFilters(pxr::UsdStageWeakPtr stage); void AddTendons(pxr::UsdStageWeakPtr stage, std::string rootPath); pxr::GfVec3f GetLocalPos(MJCFTendon::SpatialAttachment attachment); + + void applyMaterial(pxr::UsdStageWeakPtr stage, pxr::UsdPrim& prim, MJCFVisualElement* element); }; } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfParser.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.cpp similarity index 89% rename from source/extensions/omni.importer.mjcf/plugins/MjcfParser.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.cpp index 5f24539..70da735 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfParser.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,10 +17,17 @@ #include "MeshImporter.h" #include "MjcfUtils.h" +#include "utils/Path.h" #include -namespace omni +#include + +using namespace isaacsim::asset::utils::path; + +namespace isaacsim +{ +namespace asset { namespace importer { @@ -40,7 +47,7 @@ tinyxml2::XMLElement* LoadInclude(tinyxml2::XMLDocument& doc, const tinyxml2::XM if ((s = GetAttr(c, "file")) != "") { std::string fileName(s); - std::string filePath = baseDirPath + fileName; + std::string filePath = baseDirPath + "/" + fileName; tinyxml2::XMLElement* root = LoadFile(doc, filePath); return root; @@ -174,37 +181,48 @@ void LoadGeom(tinyxml2::XMLElement* g, getIfExist(g, "type", type); if (type == "capsule") { - geom.type = MJCFGeom::CAPSULE; + geom.type = MJCFVisualElement::CAPSULE; } else if (type == "sphere") { - geom.type = MJCFGeom::SPHERE; + geom.type = MJCFVisualElement::SPHERE; } else if (type == "ellipsoid") { - geom.type = MJCFGeom::ELLIPSOID; + geom.type = MJCFVisualElement::ELLIPSOID; } else if (type == "cylinder") { - geom.type = MJCFGeom::CYLINDER; + geom.type = MJCFVisualElement::CYLINDER; } else if (type == "box") { - geom.type = MJCFGeom::BOX; + geom.type = MJCFVisualElement::BOX; } else if (type == "mesh") { - geom.type = MJCFGeom::MESH; + geom.type = MJCFVisualElement::MESH; } else if (type == "plane") { - geom.type = MJCFGeom::PLANE; + geom.type = MJCFVisualElement::PLANE; } else if (type != "") { - geom.type = MJCFGeom::OTHER; + geom.type = MJCFVisualElement::OTHER; std::cout << "Geom type " << type << " not yet supported!" << std::endl; } + else + { + if (geom.mesh != "") + { + geom.type = MJCFVisualElement::MESH; + } + else + { + CARB_LOG_WARN("Could not determine geometry type, defaulting to Sphere (%s)", geom.name.c_str()); + } + } if (!isDefault && geom.name == "") { @@ -258,23 +276,23 @@ void LoadSite(tinyxml2::XMLElement* s, getIfExist(s, "type", type); if (type == "capsule") { - site.type = MJCFSite::CAPSULE; + site.type = MJCFVisualElement::CAPSULE; } else if (type == "sphere") { - site.type = MJCFSite::SPHERE; + site.type = MJCFVisualElement::SPHERE; } else if (type == "ellipsoid") { - site.type = MJCFSite::ELLIPSOID; + site.type = MJCFVisualElement::ELLIPSOID; } else if (type == "cylinder") { - site.type = MJCFSite::CYLINDER; + site.type = MJCFVisualElement::CYLINDER; } else if (type == "box") { - site.type = MJCFSite::BOX; + site.type = MJCFVisualElement::BOX; } else if (type != "") { @@ -534,6 +552,7 @@ void LoadJoint(tinyxml2::XMLElement* g, getIfExist(g, "name", joint.name); getIfExist(g, "pos", joint.pos); getIfExist(g, "range", joint.range); + getIfExist(g, "actuatorfrcrange", joint.forcerange); const char* st = g->Attribute("range"); if (st) @@ -767,7 +786,7 @@ void LoadAssets(tinyxml2::XMLElement* a, // if (config.meshRootDirectory != "") // baseDirPath = config.meshRootDirectory; - std::string meshPath = baseDirPath + compiler.meshDir + "/" + meshFile; + std::string meshPath = resolve_path(baseDirPath + "/" + compiler.meshDir + "/" + meshFile); if (meshName == "") { if (meshFile != "") @@ -784,13 +803,15 @@ void LoadAssets(tinyxml2::XMLElement* a, meshes[meshName] = mMesh; std::map::iterator it = simulationMeshCache.find(meshName); - Mesh* mesh = nullptr; - if (it == simulationMeshCache.end()) { Vec3 scale{ 1.f }; mesh::MeshImporter meshImporter; - mesh = meshImporter.loadMeshAssimp(meshPath.c_str(), scale, GymMeshNormalMode::eComputePerFace); + Mesh* mesh = new Mesh(); + meshImporter.importMesh(mesh, meshPath.c_str(), scale); + mesh->scale.x = meshScale.x; + mesh->scale.y = meshScale.y; + mesh->scale.z = meshScale.z; if (!mesh) { @@ -805,7 +826,7 @@ void LoadAssets(tinyxml2::XMLElement* a, mesh->name = meshName; // use flat normals on collision shapes - mesh->CalculateFaceNormals(); + // mesh->CalculateFaceNormals(); GymMeshHandle gymMeshHandle = -1; MeshInfo meshInfo; @@ -813,10 +834,6 @@ void LoadAssets(tinyxml2::XMLElement* a, meshInfo.meshHandle = gymMeshHandle; simulationMeshCache[meshName] = meshInfo; } - else - { - mesh = it->second.mesh; - } m = m->NextSiblingElement("mesh"); } @@ -893,7 +910,6 @@ void LoadGlobals(tinyxml2::XMLElement* root, // parses attributes for the MJCF compiler, which defines settings such as // angle units (rad/deg), mesh directory path, etc. LoadCompiler(root->FirstChildElement("compiler"), compiler); - // reset counters bodyIdxCount = 0; geomIdxCount = 0; @@ -927,7 +943,7 @@ void LoadGlobals(tinyxml2::XMLElement* root, } tinyxml2::XMLElement* a = root->FirstChildElement("asset"); - if (a) + while (a) { { tinyxml2::XMLDocument includeDoc; @@ -941,6 +957,7 @@ void LoadGlobals(tinyxml2::XMLElement* root, LoadAssets(a, baseDirPath, compiler, simulationMeshCache, meshes, materials, textures, defaultClassName, classes, config); + a = a->NextSiblingElement("asset"); } // finds the origin of the world frame within which the rest of the kinematic @@ -948,7 +965,10 @@ void LoadGlobals(tinyxml2::XMLElement* root, tinyxml2::XMLElement* wb = root->FirstChildElement("worldbody"); if (wb) { + worldBody = MJCFBody(); + while (wb) { + tinyxml2::XMLDocument includeDoc; tinyxml2::XMLElement* includeRoot = LoadInclude(includeDoc, wb->FirstChildElement("include"), baseDirPath); if (includeRoot) @@ -961,41 +981,43 @@ void LoadGlobals(tinyxml2::XMLElement* root, c = c->NextSiblingElement("body"); } } - } - tinyxml2::XMLElement* c = wb->FirstChildElement("body"); - while (c) - { - bodies.push_back(new MJCFBody()); - LoadBody(c, bodies, *bodies.back(), defaultClassName, compiler, classes, baseDirPath); - c = c->NextSiblingElement("body"); - } - worldBody = MJCFBody(); - // load sites and geoms - tinyxml2::XMLElement* g = wb->FirstChildElement("geom"); - while (g) - { - worldBody.geoms.push_back(new MJCFGeom()); - LoadGeom(g, *worldBody.geoms.back(), defaultClassName, compiler, classes, true); - if (worldBody.geoms.back()->type == MJCFGeom::OTHER) + tinyxml2::XMLElement* c = wb->FirstChildElement("body"); + while (c) { - // don't know how to deal with it - remove it from list - worldBody.geoms.pop_back(); + bodies.push_back(new MJCFBody()); + LoadBody(c, bodies, *bodies.back(), defaultClassName, compiler, classes, baseDirPath); + c = c->NextSiblingElement("body"); } - g = g->NextSiblingElement("geom"); - } - tinyxml2::XMLElement* s = wb->FirstChildElement("site"); - while (s) - { - worldBody.sites.push_back(new MJCFSite()); - LoadSite(wb->FirstChildElement("site"), *worldBody.sites.back(), defaultClassName, compiler, classes, true); - s = s->NextSiblingElement("site"); + + // load sites and geoms + tinyxml2::XMLElement* g = wb->FirstChildElement("geom"); + while (g) + { + worldBody.geoms.push_back(new MJCFGeom()); + LoadGeom(g, *worldBody.geoms.back(), defaultClassName, compiler, classes, true); + if (worldBody.geoms.back()->type == MJCFVisualElement::OTHER) + { + // don't know how to deal with it - remove it from list + worldBody.geoms.pop_back(); + } + g = g->NextSiblingElement("geom"); + } + tinyxml2::XMLElement* s = wb->FirstChildElement("site"); + while (s) + { + worldBody.sites.push_back(new MJCFSite()); + LoadSite( + wb->FirstChildElement("site"), *worldBody.sites.back(), defaultClassName, compiler, classes, true); + s = s->NextSiblingElement("site"); + } + wb = wb->NextSiblingElement("worldbody"); } } tinyxml2::XMLElement* ac = root->FirstChildElement("actuator"); - if (ac) + while (ac) { tinyxml2::XMLElement* c = ac->FirstChildElement(); while (c) @@ -1031,38 +1053,44 @@ void LoadGlobals(tinyxml2::XMLElement* root, actuators.push_back(actuator); c = c->NextSiblingElement(); } + ac = ac->NextSiblingElement("actuator"); } // load tendons tinyxml2::XMLElement* tc = root->FirstChildElement("tendon"); - if (tc) + while (tc) { + + // parse fixed tendons first + tinyxml2::XMLElement* c = tc->FirstChildElement("fixed"); + while (c) { - // parse fixed tendons first - tinyxml2::XMLElement* c = tc->FirstChildElement("fixed"); - while (c) - { - MJCFTendon* tendon = new MJCFTendon(); - LoadTendon(c, *tendon, defaultClassName, MJCFTendon::FIXED, classes); - tendons.push_back(tendon); - c = c->NextSiblingElement("fixed"); - } + MJCFTendon* tendon = new MJCFTendon(); + LoadTendon(c, *tendon, defaultClassName, MJCFTendon::FIXED, classes); + tendons.push_back(tendon); + c = c->NextSiblingElement("fixed"); } + + tc = tc->NextSiblingElement("tendon"); + } + tc = root->FirstChildElement("tendon"); + while (tc) + { + // parse spatial tendons next + tinyxml2::XMLElement* c = tc->FirstChildElement("spatial"); + while (c) { - // parse spatial tendons next - tinyxml2::XMLElement* c = tc->FirstChildElement("spatial"); - while (c) - { - MJCFTendon* tendon = new MJCFTendon(); - LoadTendon(c, *tendon, defaultClassName, MJCFTendon::SPATIAL, classes); - tendons.push_back(tendon); - c = c->NextSiblingElement("spatial"); - } + MJCFTendon* tendon = new MJCFTendon(); + LoadTendon(c, *tendon, defaultClassName, MJCFTendon::SPATIAL, classes); + tendons.push_back(tendon); + c = c->NextSiblingElement("spatial"); } + tc = tc->NextSiblingElement("tendon"); } + tinyxml2::XMLElement* cc = root->FirstChildElement("contact"); - if (cc) + while (cc) { tinyxml2::XMLElement* c = cc->FirstChildElement(); while (c) @@ -1089,9 +1117,11 @@ void LoadGlobals(tinyxml2::XMLElement* root, contacts.push_back(contact); c = c->NextSiblingElement(); } + cc = cc->NextSiblingElement("contact"); } } } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfParser.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.h similarity index 97% rename from source/extensions/omni.importer.mjcf/plugins/MjcfParser.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.h index 17ebee4..2247e08 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfParser.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfParser.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,7 +22,9 @@ #include #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -117,4 +119,5 @@ void LoadGlobals(tinyxml2::XMLElement* root, } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfTypes.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfTypes.h similarity index 95% rename from source/extensions/omni.importer.mjcf/plugins/MjcfTypes.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfTypes.h index 16678a2..9e52366 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfTypes.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfTypes.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,9 @@ #include #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -56,7 +58,7 @@ class MJCFJoint }; std::string name; - Type type; + Type type = HINGE; bool limited; float armature; @@ -72,6 +74,7 @@ class MJCFJoint Vec3 pos; // aka origin's position: origin is {position, quat} // limits Vec2 range; // lower to upper joint limit + Vec2 forcerange = { 0.0f, 0.0f }; float velocityLimits[6]; float initVal; @@ -95,7 +98,7 @@ class MJCFJoint } }; -class MJCFGeom +class MJCFVisualElement { public: enum Type @@ -109,35 +112,32 @@ class MJCFGeom PLANE, OTHER }; + std::string name; + std::string material; + Vec4 rgba; + Vec3 size; + Type type; +}; +class MJCFGeom : public MJCFVisualElement +{ +public: float density; int conaffinity; int condim; int contype; float margin; - - // sliding, torsion, rolling frictions Vec3 friction; - - std::string material; - Vec4 rgba; Vec3 solimp; Vec2 solref; Vec3 from; Vec3 to; - Vec3 size; - - std::string name; Vec3 pos; - Type type; Quat quat; Vec4 axisangle; Vec3 zaxis; - std::string mesh; - bool hasFromTo; - MJCFGeom() { conaffinity = 1; @@ -159,7 +159,7 @@ class MJCFGeom name = ""; pos = Vec3(0.0f, 0.0f, 0.0f); - type = SPHERE; + type = MJCFVisualElement::SPHERE; density = 1000.0f; quat = Quat(); @@ -167,7 +167,7 @@ class MJCFGeom } }; -class MJCFSite +class MJCFSite : public MJCFVisualElement { public: enum Type @@ -178,27 +178,15 @@ class MJCFSite CYLINDER, BOX }; - int group; - - // sliding, torsion, rolling frictions Vec3 friction; - - std::string material; - Vec4 rgba; Vec3 from; Vec3 to; - Vec3 size; bool hasFromTo; - - std::string name; Vec3 pos; - Type type; Quat quat; Vec3 zaxis; - bool hasGeom; - MJCFSite() { group = 0; @@ -214,7 +202,7 @@ class MJCFSite name = ""; pos = Vec3(0.0f, 0.0f, 0.0f); - type = SPHERE; + type = MJCFVisualElement::SPHERE; quat = Quat(); hasGeom = true; } @@ -321,7 +309,7 @@ class MJCFCompiler angleInRad = false; inertiafromgeom = true; coordinateInLocal = true; - autolimits = false; + autolimits = true; } }; @@ -374,7 +362,8 @@ class MJCFActuator bool forcelimited; Vec2 ctrlrange; - Vec2 forcerange; + Vec2 forcerange = Vec2(-FLT_MAX, FLT_MAX); + ; float gear; std::string joint; @@ -581,4 +570,5 @@ class MJCFClass } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfUsd.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.cpp similarity index 86% rename from source/extensions/omni.importer.mjcf/plugins/MjcfUsd.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.cpp index 08da2e0..e497621 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfUsd.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,11 +15,17 @@ #include "MjcfUsd.h" +#include "MeshImporter.h" #include "utils/Path.h" +#include "utils/Usd.h" #include -namespace omni +#include + +namespace isaacsim +{ +namespace asset { namespace importer { @@ -58,52 +64,45 @@ std::string makeValidUSDIdentifier(const std::string& name) return validName; } -void setStageMetadata(pxr::UsdStageWeakPtr stage, const omni::importer::mjcf::ImportConfig config) +void setStageMetadata(pxr::UsdStageWeakPtr stage, const isaacsim::asset::importer::mjcf::ImportConfig config) { - if (config.createPhysicsScene) - { - pxr::UsdPhysicsScene scene = pxr::UsdPhysicsScene::Define(stage, pxr::SdfPath("/physicsScene")); - scene.CreateGravityDirectionAttr().Set(pxr::GfVec3f(0.0f, 0.0f, -1.0)); - scene.CreateGravityMagnitudeAttr().Set(9.81f * config.distanceScale); - - pxr::PhysxSchemaPhysxSceneAPI physxSceneAPI = - pxr::PhysxSchemaPhysxSceneAPI::Apply(stage->GetPrimAtPath(pxr::SdfPath("/physicsScene"))); - physxSceneAPI.CreateEnableCCDAttr().Set(true); - physxSceneAPI.CreateEnableStabilizationAttr().Set(true); - physxSceneAPI.CreateEnableGPUDynamicsAttr().Set(false); - - physxSceneAPI.CreateBroadphaseTypeAttr().Set(pxr::TfToken("MBP")); - physxSceneAPI.CreateSolverTypeAttr().Set(pxr::TfToken("TGS")); - } + pxr::UsdGeomSetStageMetersPerUnit(stage, 1.0f / config.distanceScale); pxr::UsdGeomSetStageUpAxis(stage, pxr::TfToken("Z")); } -void createRoot(pxr::UsdStageWeakPtr stage, +void createRoot(std::unordered_map stages, Transform trans, const std::string rootPrimPath, - const omni::importer::mjcf::ImportConfig config) + const isaacsim::asset::importer::mjcf::ImportConfig config) { - pxr::UsdGeomXform robotPrim = pxr::UsdGeomXform::Define(stage, pxr::SdfPath(rootPrimPath)); - - if (config.makeDefaultPrim) + for (auto& stage : stages) { - stage->SetDefaultPrim(robotPrim.GetPrim()); + pxr::UsdGeomXform robotPrim = pxr::UsdGeomXform::Define(stage.second, pxr::SdfPath(rootPrimPath)); + if (stage.first != "stage" || (config.makeDefaultPrim)) + { + stage.second->SetDefaultPrim(robotPrim.GetPrim()); + } } } -void createFixedRoot(pxr::UsdStageWeakPtr stage, const std::string jointPath, const std::string bodyPath) +void createFixedRoot(std::unordered_map stages, + const std::string jointPath, + const std::string bodyPath) { - pxr::UsdPhysicsFixedJoint rootJoint = pxr::UsdPhysicsFixedJoint::Define(stage, pxr::SdfPath(jointPath)); + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); + + pxr::UsdPhysicsFixedJoint rootJoint = pxr::UsdPhysicsFixedJoint::Define(stages["stage"], pxr::SdfPath(jointPath)); pxr::SdfPathVector val1{ pxr::SdfPath(bodyPath) }; rootJoint.CreateBody1Rel().SetTargets(val1); } -void applyArticulationAPI(pxr::UsdStageWeakPtr stage, +void applyArticulationAPI(std::unordered_map stages, pxr::UsdGeomXformable prim, - const omni::importer::mjcf::ImportConfig config) + const isaacsim::asset::importer::mjcf::ImportConfig config) { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); pxr::UsdPhysicsArticulationRootAPI physicsSchema = pxr::UsdPhysicsArticulationRootAPI::Apply(prim.GetPrim()); pxr::PhysxSchemaPhysxArticulationAPI physxSchema = pxr::PhysxSchemaPhysxArticulationAPI::Apply(prim.GetPrim()); physxSchema.CreateEnabledSelfCollisionsAttr().Set(config.selfCollision); @@ -265,8 +264,29 @@ void createMaterial(pxr::UsdStageWeakPtr usdStage, } // convert from internal Gym mesh to USD mesh -pxr::UsdGeomMesh createMesh(pxr::UsdStageWeakPtr stage, const pxr::SdfPath path, Mesh* mesh, float scale, bool importMaterials) +pxr::UsdPrim createUsdMesh(pxr::UsdStageWeakPtr stage, + const pxr::SdfPath path, + Mesh* mesh, + std::map& materialPaths, + float scale, + bool importMaterials) { + if (mesh->m_assetConvertStatus != nullptr) + { + mesh::MeshImporter mesh_importer; + pxr::SdfPath mesh_usd_path = + mesh_importer.waitForConverter(mesh->m_assetConvertStatus, stage, mesh->m_convertedUsdMesh, path.GetText(), + stage->GetDefaultPrim().GetPath(), materialPaths); + mesh->m_assetConvertStatus = nullptr; + pxr::UsdPrim prim = stage->GetPrimAtPath(mesh_usd_path); + pxr::UsdGeomXformable xformable(prim); + return stage->GetPrimAtPath(mesh_usd_path); + } + else + { + CARB_LOG_ERROR("Error: Mesh converter Future is null"); + return pxr::UsdPrim(); + } // basic mesh data pxr::VtArray> uvs; @@ -332,7 +352,7 @@ pxr::UsdGeomMesh createMesh(pxr::UsdStageWeakPtr stage, const pxr::SdfPath path, createMaterial(stage, path, mesh, usdMesh, materialMap); } - return usdMesh; + return usdMesh.GetPrim(); } pxr::UsdGeomMesh createMesh(pxr::UsdStageWeakPtr stage, @@ -373,20 +393,23 @@ pxr::UsdGeomXformable createBody(pxr::UsdStageWeakPtr stage, { // translate the prim before xform is created automatically pxr::UsdGeomXform xform = pxr::UsdGeomXform::Define(stage, pxr::SdfPath(primPath)); - pxr::GfMatrix4d bodyMat; - bodyMat.SetIdentity(); - bodyMat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(trans.p.x, trans.p.y, trans.p.z)); - bodyMat.SetRotateOnly(pxr::GfQuatd(trans.q.w, trans.q.x, trans.q.y, trans.q.z)); pxr::UsdGeomXformable gprim = pxr::UsdGeomXformable(xform); gprim.ClearXformOpOrder(); - pxr::UsdGeomXformOp transOp = gprim.AddTransformOp(); - transOp.Set(bodyMat, pxr::UsdTimeCode::Default()); + gprim.AddTranslateOp(pxr::UsdGeomXformOp::PrecisionDouble) + .Set(config.distanceScale * pxr::GfVec3d(trans.p.x, trans.p.y, trans.p.z)); + gprim.AddOrientOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(pxr::GfQuatd(trans.q.w, trans.q.x, trans.q.y, trans.q.z)); + gprim.AddScaleOp(pxr::UsdGeomXformOp::PrecisionDouble) + .Set(pxr::GfVec3d(config.distanceScale, config.distanceScale, config.distanceScale)); return gprim; } -void applyRigidBody(pxr::UsdGeomXformable bodyPrim, const MJCFBody* body, const ImportConfig& config) +void applyRigidBody(std::unordered_map stages, + pxr::UsdGeomXformable bodyPrim, + const MJCFBody* body, + const ImportConfig& config) { + pxr::UsdEditContext context(stages["stage"], stages["physics_stage"]->GetRootLayer()); pxr::UsdPhysicsRigidBodyAPI physicsAPI = pxr::UsdPhysicsRigidBodyAPI::Apply(bodyPrim.GetPrim()); pxr::PhysxSchemaPhysxRigidBodyAPI::Apply(bodyPrim.GetPrim()); @@ -428,11 +451,15 @@ void createAndBindMaterial(pxr::UsdStageWeakPtr stage, MJCFMaterial* material, MJCFTexture* texture, Vec4& color, - bool colorOnly) + bool colorOnly, + std::map& materialPaths) { + + // First create the material in a temp prim pxr::SdfPath path = prim.GetPath(); - std::string prefix_path; - prefix_path = path.GetParentPath().GetString(); // body category root + std::string prefix_path("/Tmp"); + stage->DefinePrim(pxr::SdfPath("/Tmp"), pxr::TfToken("Scope")); + // prefix_path = path.GetParentPath().GetString(); // body category root stage->DefinePrim(pxr::SdfPath(prefix_path + "/Looks"), pxr::TfToken("Scope")); pxr::UsdShadeMaterial matPrim; @@ -542,9 +569,14 @@ void createAndBindMaterial(pxr::UsdStageWeakPtr stage, // mbi.Apply(matPrim); // mbi.Bind(matPrim); pxr::UsdShadeMaterialBindingAPI::Apply(prim).Bind(matPrim); + mesh::MeshImporter mesh_importer; + mesh_importer.moveAndBindMaterial( + stage, stage, stage->GetDefaultPrim().GetPath(), prim.GetPath(), prim.GetPath(), materialPaths); + stage->RemovePrim(pxr::SdfPath("/Tmp")); } } + pxr::GfVec3f evalSphereCoord(float u, float v) { float theta = u * 2.0f * kPi; @@ -676,13 +708,19 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, const MJCFGeom* geom, const std::map& simulationMeshCache, const ImportConfig& config, + std::map& materialPaths, bool importMaterials, const std::string rootPrimPath, bool collisionGeom) { pxr::SdfPath path = pxr::SdfPath(geomPath); - if (geom->type == MJCFGeom::PLANE) + if (geom->type != MJCFVisualElement::MESH) + { + pxr::UsdGeomXform::Define(stage, path); + path = path.AppendPath(pxr::SdfPath(path.GetName())); + } + if (geom->type == MJCFVisualElement::PLANE) { // add visual plane pxr::UsdGeomMesh groundPlane = pxr::UsdGeomMesh::Define(stage, path); @@ -729,8 +767,9 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, groundPlane.CreateNormalsAttr().Set(normals); groundPlane.CreatePointsAttr().Set(points); } - else if (geom->type == MJCFGeom::SPHERE) + else if (geom->type == MJCFVisualElement::SPHERE) { + pxr::UsdGeomSphere spherePrim = pxr::UsdGeomSphere::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -738,7 +777,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, spherePrim.GetRadiusAttr().Set(double(geom->size.x)); spherePrim.GetExtentAttr().Set(extentArray); } - else if (geom->type == MJCFGeom::ELLIPSOID) + else if (geom->type == MJCFVisualElement::ELLIPSOID) { if (collisionGeom) { @@ -755,7 +794,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, ellipsePrim.GetExtentAttr().Set(extentArray); } } - else if (geom->type == MJCFGeom::CAPSULE) + else if (geom->type == MJCFVisualElement::CAPSULE) { pxr::UsdGeomCapsule capsulePrim = pxr::UsdGeomCapsule::Define(stage, path); pxr::VtVec3fArray extentArray(4); @@ -778,7 +817,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, capsulePrim.ComputeExtent(double(height), double(geom->size.x), axis, &extentArray); capsulePrim.GetExtentAttr().Set(extentArray); } - else if (geom->type == MJCFGeom::CYLINDER) + else if (geom->type == MJCFVisualElement::CYLINDER) { pxr::UsdGeomCylinder cylinderPrim = pxr::UsdGeomCylinder::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -799,7 +838,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, cylinderPrim.GetHeightAttr().Set(double(height)); cylinderPrim.GetRadiusAttr().Set(double(geom->size.x)); } - else if (geom->type == MJCFGeom::BOX) + else if (geom->type == MJCFVisualElement::BOX) { pxr::UsdGeomCube boxPrim = pxr::UsdGeomCube::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -807,15 +846,17 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, extentArray[0] = -extentArray[1]; boxPrim.GetExtentAttr().Set(extentArray); } - else if (geom->type == MJCFGeom::MESH) + else if (geom->type == MJCFVisualElement::MESH) { + CARB_LOG_INFO("Mesh Type"); MeshInfo meshInfo = simulationMeshCache.find(geom->mesh)->second; - createMesh(stage, path, meshInfo.mesh, config.distanceScale, importMaterials); + createUsdMesh(stage, path, meshInfo.mesh, materialPaths, config.distanceScale, importMaterials); + CARB_LOG_INFO("Created mesh at path %s", geomPath.c_str()); } - - pxr::UsdPrim prim = stage->GetPrimAtPath(path); + pxr::UsdPrim prim = stage->GetPrimAtPath(pxr::SdfPath(geomPath)); if (prim) { + CARB_LOG_INFO("Prim Exists"); // set the transformations first pxr::GfMatrix4d mat; mat.SetIdentity(); @@ -825,20 +866,19 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, pxr::GfMatrix4d scale; scale.SetIdentity(); scale.SetScale(pxr::GfVec3d(config.distanceScale, config.distanceScale, config.distanceScale)); - if (geom->type == MJCFGeom::ELLIPSOID) + if (geom->type == MJCFVisualElement::ELLIPSOID) { scale.SetScale(config.distanceScale * pxr::GfVec3d(geom->size.x, geom->size.y, geom->size.z)); } - else if (geom->type == MJCFGeom::SPHERE) + else if (geom->type == MJCFVisualElement::SPHERE) { - Vec3 s = geom->size; Vec3 cen = geom->pos; Quat q = geom->quat; // scale.SetIdentity(); mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - else if (geom->type == MJCFGeom::CAPSULE) + else if (geom->type == MJCFVisualElement::CAPSULE) { Vec3 cen; Quat q; @@ -870,7 +910,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - else if (geom->type == MJCFGeom::CYLINDER) + else if (geom->type == MJCFVisualElement::CYLINDER) { Vec3 cen; Quat q; @@ -889,7 +929,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); } - else if (geom->type == MJCFGeom::BOX) + else if (geom->type == MJCFVisualElement::BOX) { Vec3 s = geom->size; Vec3 cen = geom->pos; @@ -898,15 +938,19 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - else if (geom->type == MJCFGeom::MESH) + else if (geom->type == MJCFVisualElement::MESH) { Vec3 cen = geom->pos; Quat q = geom->quat; - scale.SetIdentity(); + + MeshInfo meshInfo = simulationMeshCache.find(geom->mesh)->second; + scale.SetScale(config.distanceScale * + pxr::GfVec3d(meshInfo.mesh->scale.x, meshInfo.mesh->scale.y, meshInfo.mesh->scale.z)); + mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - else if (geom->type == MJCFGeom::PLANE) + else if (geom->type == MJCFVisualElement::PLANE) { Vec3 cen = geom->pos; Quat q = geom->quat; @@ -915,10 +959,13 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - pxr::UsdGeomXformable gprim = pxr::UsdGeomXformable(prim); + pxr::UsdGeomXformable gprim = pxr::UsdGeomXformable(stage->GetPrimAtPath(path)); gprim.ClearXformOpOrder(); - pxr::UsdGeomXformOp transOp = gprim.AddTransformOp(); - transOp.Set(scale * mat, pxr::UsdTimeCode::Default()); + gprim.AddTranslateOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractTranslation()); + gprim.AddOrientOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractRotationQuat()); + gprim.AddScaleOp(pxr::UsdGeomXformOp::PrecisionDouble) + .Set(pxr::GfVec3d(scale.GetRow3(0)[0], scale.GetRow3(1)[1], scale.GetRow3(2)[2])); + CARB_LOG_INFO("Done Adding Mesh"); } return prim; @@ -931,8 +978,11 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, bool importMaterials) { pxr::SdfPath path = pxr::SdfPath(geomPath); - - if (site->type == MJCFSite::SPHERE) + { + pxr::UsdGeomXform::Define(stage, path); + path = path.AppendPath(pxr::SdfPath(path.GetName())); + } + if (site->type == MJCFVisualElement::SPHERE) { pxr::UsdGeomSphere spherePrim = pxr::UsdGeomSphere::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -941,7 +991,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, spherePrim.GetRadiusAttr().Set(double(site->size.x)); spherePrim.GetExtentAttr().Set(extentArray); } - else if (site->type == MJCFSite::ELLIPSOID) + else if (site->type == MJCFVisualElement::ELLIPSOID) { pxr::UsdGeomSphere ellipsePrim = pxr::UsdGeomSphere::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -949,7 +999,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, ellipsePrim.ComputeExtent(site->size.x, &extentArray); ellipsePrim.GetExtentAttr().Set(extentArray); } - else if (site->type == MJCFSite::CAPSULE) + else if (site->type == MJCFVisualElement::CAPSULE) { pxr::UsdGeomCapsule capsulePrim = pxr::UsdGeomCapsule::Define(stage, path); pxr::VtVec3fArray extentArray(4); @@ -972,7 +1022,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, capsulePrim.ComputeExtent(double(height), double(site->size.x), axis, &extentArray); capsulePrim.GetExtentAttr().Set(extentArray); } - else if (site->type == MJCFSite::CYLINDER) + else if (site->type == MJCFVisualElement::CYLINDER) { pxr::UsdGeomCylinder cylinderPrim = pxr::UsdGeomCylinder::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -993,7 +1043,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, cylinderPrim.GetHeightAttr().Set(double(height)); cylinderPrim.GetRadiusAttr().Set(double(site->size.x)); } - else if (site->type == MJCFSite::BOX) + else if (site->type == MJCFVisualElement::BOX) { pxr::UsdGeomCube boxPrim = pxr::UsdGeomCube::Define(stage, path); pxr::VtVec3fArray extentArray(2); @@ -1014,11 +1064,11 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, pxr::GfMatrix4d scale; scale.SetIdentity(); scale.SetScale(pxr::GfVec3d(config.distanceScale, config.distanceScale, config.distanceScale)); - if (site->type == MJCFSite::ELLIPSOID) + if (site->type == MJCFVisualElement::ELLIPSOID) { scale.SetScale(config.distanceScale * pxr::GfVec3d(site->size.x, site->size.y, site->size.z)); } - else if (site->type == MJCFSite::CAPSULE) + else if (site->type == MJCFVisualElement::CAPSULE) { Vec3 cen; Quat q; @@ -1050,7 +1100,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetTranslateOnly(config.distanceScale * pxr::GfVec3d(cen.x, cen.y, cen.z)); mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); } - else if (site->type == MJCFSite::CYLINDER) + else if (site->type == MJCFVisualElement::CYLINDER) { Vec3 cen; Quat q; @@ -1069,7 +1119,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, mat.SetRotateOnly(pxr::GfQuatd(q.w, q.x, q.y, q.z)); mat.SetTranslateOnly(pxr::GfVec3d(cen.x, cen.y, cen.z)); } - else if (site->type == MJCFSite::BOX) + else if (site->type == MJCFVisualElement::BOX) { Vec3 s = site->size; Vec3 cen = site->pos; @@ -1081,36 +1131,35 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, pxr::UsdGeomXformable gprim = pxr::UsdGeomXformable(prim); gprim.ClearXformOpOrder(); - pxr::UsdGeomXformOp transOp = gprim.AddTransformOp(); - transOp.Set(scale * mat, pxr::UsdTimeCode::Default()); + gprim.AddTranslateOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractTranslation()); + gprim.AddOrientOp(pxr::UsdGeomXformOp::PrecisionDouble).Set(mat.ExtractRotationQuat()); + gprim.AddScaleOp(pxr::UsdGeomXformOp::PrecisionDouble) + .Set(pxr::GfVec3d(scale.GetRow3(0)[0], scale.GetRow3(1)[1], scale.GetRow3(2)[2])); } - return prim; + return stage->GetPrimAtPath(pxr::SdfPath(geomPath)); } -void applyCollisionGeom(pxr::UsdStageWeakPtr stage, pxr::UsdPrim prim, const MJCFGeom* geom) +void applyCollisionGeom(pxr::UsdStageWeakPtr stage, pxr::UsdPrim prim, bool ConvexDecomposition) { - - if (geom->type == MJCFGeom::PLANE) - { - } - else + pxr::UsdPhysicsCollisionAPI::Apply(prim); + for (const auto& mesh_prim : prim.GetChildren()) { - pxr::UsdPhysicsCollisionAPI::Apply(prim); - pxr::UsdPhysicsMeshCollisionAPI physicsMeshAPI = pxr::UsdPhysicsMeshCollisionAPI::Apply(prim); - if (geom->type == MJCFGeom::SPHERE) - { - physicsMeshAPI.CreateApproximationAttr().Set(pxr::UsdPhysicsTokens.Get()->boundingSphere); - } - else if (geom->type == MJCFGeom::BOX) + if (pxr::UsdGeomMesh(mesh_prim)) { - physicsMeshAPI.CreateApproximationAttr().Set(pxr::UsdPhysicsTokens.Get()->boundingCube); - } - else - { - physicsMeshAPI.CreateApproximationAttr().Set(pxr::UsdPhysicsTokens.Get()->convexHull); + pxr::UsdPhysicsMeshCollisionAPI physicsMeshAPI = pxr::UsdPhysicsMeshCollisionAPI::Apply(prim); + pxr::PhysxSchemaPhysxMeshMergeCollisionAPI mergeAPI = pxr::PhysxSchemaPhysxMeshMergeCollisionAPI::Apply(prim); + mergeAPI.GetCollisionMeshesCollectionAPI().GetIncludesRel().AddTarget(prim.GetPath()); + if (ConvexDecomposition) + { + physicsMeshAPI.CreateApproximationAttr().Set(pxr::UsdPhysicsTokens.Get()->convexDecomposition); + } + else + { + physicsMeshAPI.CreateApproximationAttr().Set(pxr::UsdPhysicsTokens.Get()->convexHull); + } + break; } - pxr::UsdGeomMesh(prim).CreatePurposeAttr().Set(pxr::UsdGeomTokens->guide); } } @@ -1349,9 +1398,25 @@ void createJointDrives(pxr::UsdPhysicsJoint jointPrim, const Vec2& forcerange = actuator->forcerange; float maxForce = std::max(abs(forcerange.x), abs(forcerange.y)); - driveAPI.CreateMaxForceAttr().Set(maxForce); + if (maxForce == FLT_MAX) + { + maxForce = std::max(abs(joint->forcerange.x), abs(joint->forcerange.y)); + } + if (maxForce != FLT_MAX) + { + driveAPI.CreateMaxForceAttr().Set(maxForce); + } + } + else + { + float maxForce = std::max(abs(joint->forcerange.x), abs(joint->forcerange.y)); + if (maxForce != FLT_MAX) + { + driveAPI.CreateMaxForceAttr().Set(maxForce); + } } } } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfUsd.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.h similarity index 82% rename from source/extensions/omni.importer.mjcf/plugins/MjcfUsd.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.h index a2ccaa7..0e3569c 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfUsd.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUsd.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -51,7 +51,9 @@ #include #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -59,16 +61,18 @@ namespace mjcf { pxr::SdfPath getNextFreePath(pxr::UsdStageWeakPtr stage, const pxr::SdfPath& primPath); -void setStageMetadata(pxr::UsdStageWeakPtr stage, const omni::importer::mjcf::ImportConfig config); -void createRoot(pxr::UsdStageWeakPtr stage, +void setStageMetadata(pxr::UsdStageWeakPtr stage, const isaacsim::asset::importer::mjcf::ImportConfig config); +void createRoot(std::unordered_map stages, Transform trans, const std::string rootPrimPath, - const omni::importer::mjcf::ImportConfig config); -void createFixedRoot(pxr::UsdStageWeakPtr stage, const std::string jointPath, const std::string bodyPath); -void applyArticulationAPI(pxr::UsdStageWeakPtr stage, + const isaacsim::asset::importer::mjcf::ImportConfig config); +void createFixedRoot(std::unordered_map stages, + const std::string jointPath, + const std::string bodyPath); +void applyArticulationAPI(std::unordered_map stages, pxr::UsdGeomXformable prim, - const omni::importer::mjcf::ImportConfig config); -pxr::UsdGeomMesh createMesh( + const isaacsim::asset::importer::mjcf::ImportConfig config); +pxr::UsdPrim createUsdMesh( pxr::UsdStageWeakPtr stage, const pxr::SdfPath path, Mesh* mesh, float scale, bool importMaterials, bool instanceable); pxr::UsdGeomMesh createMesh(pxr::UsdStageWeakPtr stage, const pxr::SdfPath path, @@ -81,17 +85,22 @@ void createAndBindMaterial(pxr::UsdStageWeakPtr stage, MJCFMaterial* material, MJCFTexture* texture, Vec4& color, - bool colorOnly); + bool colorOnly, + std::map& materialPaths); pxr::UsdGeomXformable createBody(pxr::UsdStageWeakPtr stage, const std::string primPath, const Transform& trans, const ImportConfig& config); -void applyRigidBody(pxr::UsdGeomXformable bodyPrim, const MJCFBody* body, const ImportConfig& config); +void applyRigidBody(std::unordered_map stages, + pxr::UsdGeomXformable bodyPrim, + const MJCFBody* body, + const ImportConfig& config); pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, const std::string geomPath, const MJCFGeom* geom, const std::map& simulationMeshCache, const ImportConfig& config, + std::map& materialPaths, bool importMaterials, const std::string rootPrimPath, bool collisionGeom); @@ -100,7 +109,7 @@ pxr::UsdPrim createPrimitiveGeom(pxr::UsdStageWeakPtr stage, const MJCFSite* site, const ImportConfig& config, bool importMaterials); -void applyCollisionGeom(pxr::UsdStageWeakPtr stage, pxr::UsdPrim prim, const MJCFGeom* geom); +void applyCollisionGeom(pxr::UsdStageWeakPtr stage, pxr::UsdPrim prim, bool ConvexDecomposition); pxr::UsdPhysicsJoint createFixedJoint(pxr::UsdStageWeakPtr stage, const std::string jointPath, const Transform& poseJointToParentBody, @@ -137,4 +146,5 @@ void createJointDrives(pxr::UsdPhysicsJoint jointPrim, } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfUtils.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.cpp similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/MjcfUtils.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.cpp index 5962483..8f9551f 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfUtils.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,7 +17,9 @@ #include "math/core/maths.h" -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -328,4 +330,5 @@ Vec3 Diagonalize(const Matrix33& m, Quat& massFrame) } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/MjcfUtils.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.h similarity index 93% rename from source/extensions/omni.importer.mjcf/plugins/MjcfUtils.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.h index 3cbd450..e2d1f82 100644 --- a/source/extensions/omni.importer.mjcf/plugins/MjcfUtils.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/MjcfUtils.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,9 @@ #include -namespace omni +namespace isaacsim +{ +namespace asset { namespace importer { @@ -45,4 +47,5 @@ Vec3 Diagonalize(const Matrix33& m, Quat& massFrame); } // namespace mjcf } // namespace importer -} // namespace omni +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/omni.importer.mjcf/plugins/UsdPCH.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/UsdPCH.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/UsdPCH.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/UsdPCH.h index f0090a8..da05907 100644 --- a/source/extensions/omni.importer.mjcf/plugins/UsdPCH.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/UsdPCH.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.cpp new file mode 100644 index 0000000..5da91f8 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.cpp @@ -0,0 +1,687 @@ +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mesh.h" + +#include "platform.h" + +#include +#include +#include + +using namespace std; + +void Mesh::DuplicateVertex(uint32_t i) +{ + assert(m_positions.size() > i); + m_positions.push_back(m_positions[i]); + + if (m_normals.size() > i) + m_normals.push_back(m_normals[i]); + + if (m_colours.size() > i) + m_colours.push_back(m_colours[i]); + + if (m_texcoords.size() > i) + m_texcoords.push_back(m_texcoords[i]); +} + +void Mesh::Normalize(float s) +{ + Vec3 lower, upper; + GetBounds(lower, upper); + Vec3 edges = upper - lower; + + Transform(TranslationMatrix(Point3(-lower))); + + float maxEdge = max(edges.x, max(edges.y, edges.z)); + Transform(ScaleMatrix(s / maxEdge)); +} + +void Mesh::CalculateFaceNormals() +{ + Mesh m; + + int numTris = int(GetNumFaces()); + + for (int i = 0; i < numTris; ++i) + { + int a = m_indices[i * 3 + 0]; + int b = m_indices[i * 3 + 1]; + int c = m_indices[i * 3 + 2]; + + int start = int(m.m_positions.size()); + + m.m_positions.push_back(m_positions[a]); + m.m_positions.push_back(m_positions[b]); + m.m_positions.push_back(m_positions[c]); + + if (!m_texcoords.empty()) + { + m.m_texcoords.push_back(m_texcoords[a]); + m.m_texcoords.push_back(m_texcoords[b]); + m.m_texcoords.push_back(m_texcoords[c]); + } + + if (!m_colours.empty()) + { + m.m_colours.push_back(m_colours[a]); + m.m_colours.push_back(m_colours[b]); + m.m_colours.push_back(m_colours[c]); + } + + m.m_indices.push_back(start + 0); + m.m_indices.push_back(start + 1); + m.m_indices.push_back(start + 2); + } + + m.CalculateNormals(); + m.m_materials = this->m_materials; + m.m_materialAssignments = this->m_materialAssignments; + m.m_usdMeshPrims = this->m_usdMeshPrims; + + *this = m; +} + +void Mesh::CalculateNormals() +{ + m_normals.resize(0); + m_normals.resize(m_positions.size()); + + int numTris = int(GetNumFaces()); + + for (int i = 0; i < numTris; ++i) + { + int a = m_indices[i * 3 + 0]; + int b = m_indices[i * 3 + 1]; + int c = m_indices[i * 3 + 2]; + + Vec3 n = Cross(m_positions[b] - m_positions[a], m_positions[c] - m_positions[a]); + + m_normals[a] += n; + m_normals[b] += n; + m_normals[c] += n; + } + + int numVertices = int(GetNumVertices()); + + for (int i = 0; i < numVertices; ++i) + m_normals[i] = ::Normalize(m_normals[i]); +} + +namespace +{ + +enum PlyFormat +{ + eAscii, + eBinaryBigEndian +}; + +template +T PlyRead(ifstream& s, PlyFormat format) +{ + T data = eAscii; + + switch (format) + { + case eAscii: + { + s >> data; + break; + } + case eBinaryBigEndian: + { + char c[sizeof(T)]; + s.read(c, sizeof(T)); + reverse(c, c + sizeof(T)); + data = *(T*)c; + break; + } + default: + assert(0); + } + + return data; +} + +} // namespace + + +void ExportMeshToBin(const char* path, const Mesh* m) +{ + FILE* f = fopen(path, "wb"); + + if (f) + { + int numVertices = int(m->m_positions.size()); + int numIndices = int(m->m_indices.size()); + + fwrite(&numVertices, sizeof(numVertices), 1, f); + fwrite(&numIndices, sizeof(numIndices), 1, f); + + // write data blocks + fwrite(&m->m_positions[0], sizeof(Vec3) * numVertices, 1, f); + fwrite(&m->m_normals[0], sizeof(Vec3) * numVertices, 1, f); + fwrite(&m->m_indices[0], sizeof(int) * numIndices, 1, f); + + fclose(f); + } +} + + +// map of Material name to Material +struct VertexKey +{ + VertexKey() : v(0), vt(0), vn(0) + { + } + + uint32_t v, vt, vn; + + bool operator==(const VertexKey& rhs) const + { + return v == rhs.v && vt == rhs.vt && vn == rhs.vn; + } + + bool operator<(const VertexKey& rhs) const + { + if (v != rhs.v) + return v < rhs.v; + else if (vt != rhs.vt) + return vt < rhs.vt; + else + return vn < rhs.vn; + } +}; + + +void ExportToObj(const char* path, const Mesh& m) +{ + ofstream file(path); + + if (!file) + return; + + file << "# positions" << endl; + + for (uint32_t i = 0; i < m.m_positions.size(); ++i) + { + Point3 v = m.m_positions[i]; + file << "v " << v.x << " " << v.y << " " << v.z << endl; + } + + file << "# texcoords" << endl; + + for (uint32_t i = 0; i < m.m_texcoords.size(); ++i) + { + Vec2 t = m.m_texcoords[0][i]; + file << "vt " << t.x << " " << t.y << endl; + } + + file << "# normals" << endl; + + for (uint32_t i = 0; i < m.m_normals.size(); ++i) + { + Vec3 n = m.m_normals[0][i]; + file << "vn " << n.x << " " << n.y << " " << n.z << endl; + } + + file << "# faces" << endl; + + for (uint32_t i = 0; i < m.m_indices.size() / 3; ++i) + { + // uint32_t j = i+1; + + // no sharing, assumes there is a unique position, texcoord and normal for + // each vertex + file << "f " << m.m_indices[i * 3] + 1 << " " << m.m_indices[i * 3 + 1] + 1 << " " << m.m_indices[i * 3 + 2] + 1 + << endl; + } +} + +void Mesh::AddMesh(const Mesh& m) +{ + uint32_t offset = uint32_t(m_positions.size()); + + // add new vertices + m_positions.insert(m_positions.end(), m.m_positions.begin(), m.m_positions.end()); + m_normals.insert(m_normals.end(), m.m_normals.begin(), m.m_normals.end()); + m_colours.insert(m_colours.end(), m.m_colours.begin(), m.m_colours.end()); + + // add new indices with offset + for (uint32_t i = 0; i < m.m_indices.size(); ++i) + { + m_indices.push_back(m.m_indices[i] + offset); + } +} + +void Mesh::Flip() +{ + for (int i = 0; i < int(GetNumFaces()); ++i) + { + swap(m_indices[i * 3 + 0], m_indices[i * 3 + 1]); + } + + for (int i = 0; i < (int)m_normals.size(); ++i) + m_normals[i] *= -1.0f; +} + +void Mesh::Transform(const Matrix44& m) +{ + for (uint32_t i = 0; i < m_positions.size(); ++i) + { + m_positions[i] = m * m_positions[i]; + m_normals[i] = m * m_normals[i]; + } +} + +void Mesh::GetBounds(Vector3& outMinExtents, Vector3& outMaxExtents) const +{ + Point3 minExtents(FLT_MAX); + Point3 maxExtents(-FLT_MAX); + + // calculate face bounds + for (uint32_t i = 0; i < m_positions.size(); ++i) + { + const Point3& a = m_positions[i]; + + minExtents = Min(a, minExtents); + maxExtents = Max(a, maxExtents); + } + + outMinExtents = Vector3(minExtents); + outMaxExtents = Vector3(maxExtents); +} + +Mesh* CreateTriMesh(float size, float y) +{ + uint32_t indices[] = { 0, 1, 2 }; + Point3 positions[3]; + Vector3 normals[3]; + + positions[0] = Point3(-size, y, size); + positions[1] = Point3(size, y, size); + positions[2] = Point3(size, y, -size); + + normals[0] = Vector3(0.0f, 1.0f, 0.0f); + normals[1] = Vector3(0.0f, 1.0f, 0.0f); + normals[2] = Vector3(0.0f, 1.0f, 0.0f); + + Mesh* m = new Mesh(); + m->m_indices.insert(m->m_indices.begin(), indices, indices + 3); + m->m_positions.insert(m->m_positions.begin(), positions, positions + 3); + m->m_normals.insert(m->m_normals.begin(), normals, normals + 3); + + return m; +} + +Mesh* CreateCubeMesh() +{ + const Point3 vertices[24] = { Point3(0.5, 0.5, 0.5), Point3(-0.5, 0.5, 0.5), Point3(0.5, -0.5, 0.5), + Point3(-0.5, -0.5, 0.5), Point3(0.5, 0.5, -0.5), Point3(-0.5, 0.5, -0.5), + Point3(0.5, -0.5, -0.5), Point3(-0.5, -0.5, -0.5), Point3(0.5, 0.5, 0.5), + Point3(0.5, -0.5, 0.5), Point3(0.5, 0.5, 0.5), Point3(0.5, 0.5, -0.5), + Point3(-0.5, 0.5, 0.5), Point3(-0.5, 0.5, -0.5), Point3(0.5, -0.5, -0.5), + Point3(0.5, 0.5, -0.5), Point3(-0.5, -0.5, -0.5), Point3(0.5, -0.5, -0.5), + Point3(-0.5, -0.5, 0.5), Point3(0.5, -0.5, 0.5), Point3(-0.5, -0.5, -0.5), + Point3(-0.5, -0.5, 0.5), Point3(-0.5, 0.5, -0.5), Point3(-0.5, 0.5, 0.5) }; + + const Vec3 normals[24] = { Vec3(0.0f, 0.0f, 1.0f), Vec3(0.0f, 0.0f, 1.0f), Vec3(0.0f, 0.0f, 1.0f), + Vec3(0.0f, 0.0f, 1.0f), Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), + Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f), + Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), + Vec3(0.0f, 1.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(0.0f, 0.0f, -1.0f), + Vec3(-0.0f, -0.0f, -1.0f), Vec3(0.0f, -1.0f, 0.0f), Vec3(0.0f, -1.0f, 0.0f), + Vec3(0.0f, -1.0f, 0.0f), Vec3(-0.0f, -1.0f, -0.0f), Vec3(-1.0f, 0.0f, 0.0f), + Vec3(-1.0f, 0.0f, 0.0f), Vec3(-1.0f, 0.0f, 0.0f), Vec3(-1.0f, -0.0f, -0.0f) }; + + const int indices[36] = { 0, 1, 2, 3, 2, 1, 8, 9, 4, 6, 4, 9, 10, 11, 12, 5, 12, 11, + 7, 13, 14, 15, 14, 13, 16, 17, 18, 19, 18, 17, 20, 21, 22, 23, 22, 21 }; + + Mesh* m = new Mesh(); + m->m_positions.assign(vertices, vertices + 24); + m->m_normals.assign(normals, normals + 24); + m->m_indices.assign(indices, indices + 36); + + return m; +} + +Mesh* CreateQuadMesh(float sizex, float sizez, int gridx, int gridz) +{ + Mesh* m = new Mesh(); + + float cellx = sizex / gridz; + float cellz = sizez / gridz; + + Vec3 start = Vec3(-sizex, 0.0f, sizez) * 0.5f; + + for (int z = 0; z <= gridz; ++z) + { + for (int x = 0; x <= gridx; ++x) + { + Point3 p = Point3(cellx * x, 0.0f, -cellz * z) + start; + + m->m_positions.push_back(p); + m->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); + m->m_texcoords.push_back(Vec2(float(x) / gridx, float(z) / gridz)); + + if (z > 0 && x > 0) + { + int index = int(m->m_positions.size()) - 1; + + m->m_indices.push_back(index); + m->m_indices.push_back(index - 1); + m->m_indices.push_back(index - gridx - 1); + + m->m_indices.push_back(index - 1); + m->m_indices.push_back(index - 1 - gridx - 1); + m->m_indices.push_back(index - gridx - 1); + } + } + } + + return m; +} + +Mesh* CreateDiscMesh(float radius, uint32_t segments) +{ + const uint32_t numVerts = 1 + segments; + + Mesh* m = new Mesh(); + m->m_positions.resize(numVerts); + m->m_normals.resize(numVerts, Vec3(0.0f, 1.0f, 0.0f)); + + m->m_positions[0] = Point3(0.0f); + m->m_positions[1] = Point3(0.0f, 0.0f, radius); + + for (uint32_t i = 1; i <= segments; ++i) + { + uint32_t nextVert = (i + 1) % numVerts; + + if (nextVert == 0) + nextVert = 1; + + m->m_positions[nextVert] = + Point3(radius * Sin((float(i) / segments) * k2Pi), 0.0f, radius * Cos((float(i) / segments) * k2Pi)); + + m->m_indices.push_back(0); + m->m_indices.push_back(i); + m->m_indices.push_back(nextVert); + } + + return m; +} + +Mesh* CreateTetrahedron(float ground, float height) +{ + Mesh* m = new Mesh(); + + const float dimValue = 1.0f / sqrtf(2.0f); + const Point3 vertices[4] = { Point3(-1.0f, ground, -dimValue), Point3(1.0f, ground, -dimValue), + Point3(0.0f, ground + height, dimValue), Point3(0.0f, ground, dimValue) }; + + const int indices[12] = { // winding order is counter-clockwise + 0, 2, 1, 2, 3, 1, 2, 0, 3, 3, 0, 1 + }; + + m->m_positions.assign(vertices, vertices + 4); + m->m_indices.assign(indices, indices + 12); + + m->CalculateNormals(); + + return m; +} + +Mesh* CreateCylinder(int slices, float radius, float halfHeight, bool cap) +{ + Mesh* mesh = new Mesh(); + + for (int i = 0; i <= slices; ++i) + { + float theta = (k2Pi / slices) * i; + + Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); + Vec3 n = p; + + mesh->m_positions.push_back(Point3(p * radius - Vec3(0.0f, halfHeight, 0.0f))); + mesh->m_positions.push_back(Point3(p * radius + Vec3(0.0f, halfHeight, 0.0f))); + + mesh->m_normals.push_back(n); + mesh->m_normals.push_back(n); + + mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); + mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 1.0f)); + + if (i > 0) + { + int a = (i - 1) * 2 + 0; + int b = (i - 1) * 2 + 1; + int c = i * 2 + 0; + int d = i * 2 + 1; + + // quad between last two vertices and these two + mesh->m_indices.push_back(a); + mesh->m_indices.push_back(c); + mesh->m_indices.push_back(b); + + mesh->m_indices.push_back(c); + mesh->m_indices.push_back(d); + mesh->m_indices.push_back(b); + } + } + if (cap) + { + // Create cap + int st = int(mesh->m_positions.size()); + + mesh->m_positions.push_back(-Point3(0.0f, halfHeight, 0.0f)); + mesh->m_texcoords.push_back(Vec2(0.0f, 0.0f)); + mesh->m_normals.push_back(-Vec3(0.0f, 1.0f, 0.0f)); + for (int i = 0; i <= slices; ++i) + { + float theta = -(k2Pi / slices) * i; + + Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); + mesh->m_positions.push_back(Point3(p * radius - Vec3(0.0f, halfHeight, 0.0f))); + mesh->m_normals.push_back(-Vec3(0.0f, 1.0f, 0.0f)); + mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); + if (i > 0) + { + mesh->m_indices.push_back(st); + mesh->m_indices.push_back(st + 1 + i - 1); + mesh->m_indices.push_back(st + 1 + i % slices); + } + } + + st = int(mesh->m_positions.size()); + mesh->m_positions.push_back(Point3(0.0f, halfHeight, 0.0f)); + mesh->m_texcoords.push_back(Vec2(0.0f, 0.0f)); + mesh->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); + for (int i = 0; i <= slices; ++i) + { + float theta = (k2Pi / slices) * i; + + Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); + mesh->m_positions.push_back(Point3(p * radius + Vec3(0.0f, halfHeight, 0.0f))); + mesh->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); + mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); + + if (i > 0) + { + mesh->m_indices.push_back(st); + mesh->m_indices.push_back(st + 1 + i - 1); + mesh->m_indices.push_back(st + 1 + i % slices); + } + } + } + return mesh; +} + +Mesh* CreateSphere(int slices, int segments, float radius) +{ + float dTheta = kPi / slices; + float dPhi = k2Pi / segments; + + int vertsPerRow = segments + 1; + + Mesh* mesh = new Mesh(); + + for (int i = 0; i <= slices; ++i) + { + for (int j = 0; j <= segments; ++j) + { + float u = float(i) / slices; + float v = float(j) / segments; + + float theta = dTheta * i; + float phi = dPhi * j; + + float x = sinf(theta) * cosf(phi); + float y = cosf(theta); + float z = sinf(theta) * sinf(phi); + + mesh->m_positions.push_back(Point3(x, y, z) * radius); + mesh->m_normals.push_back(Vec3(x, y, z)); + mesh->m_texcoords.push_back(Vec2(u, v)); + + if (i > 0 && j > 0) + { + int a = i * vertsPerRow + j; + int b = (i - 1) * vertsPerRow + j; + int c = (i - 1) * vertsPerRow + j - 1; + int d = i * vertsPerRow + j - 1; + + // add a quad for this slice + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(a); + mesh->m_indices.push_back(d); + + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(d); + mesh->m_indices.push_back(c); + } + } + } + + return mesh; +} + +Mesh* CreateEllipsoid(int slices, int segments, Vec3 radiis) +{ + float dTheta = kPi / slices; + float dPhi = k2Pi / segments; + + int vertsPerRow = segments + 1; + + Mesh* mesh = new Mesh(); + + for (int i = 0; i <= slices; ++i) + { + for (int j = 0; j <= segments; ++j) + { + float u = float(i) / slices; + float v = float(j) / segments; + + float theta = dTheta * i; + float phi = dPhi * j; + + float x = sinf(theta) * cosf(phi); + float y = cosf(theta); + float z = sinf(theta) * sinf(phi); + + mesh->m_positions.push_back(Point3(x * radiis.x, y * radiis.y, z * radiis.z)); + mesh->m_normals.push_back(Normalize(Vec3(x / radiis.x, y / radiis.y, z / radiis.z))); + mesh->m_texcoords.push_back(Vec2(u, v)); + + if (i > 0 && j > 0) + { + int a = i * vertsPerRow + j; + int b = (i - 1) * vertsPerRow + j; + int c = (i - 1) * vertsPerRow + j - 1; + int d = i * vertsPerRow + j - 1; + + // add a quad for this slice + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(a); + mesh->m_indices.push_back(d); + + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(d); + mesh->m_indices.push_back(c); + } + } + } + + return mesh; +} +Mesh* CreateCapsule(int slices, int segments, float radius, float halfHeight) +{ + float dTheta = kPi / (slices * 2); + float dPhi = k2Pi / segments; + + int vertsPerRow = segments + 1; + + Mesh* mesh = new Mesh(); + + float theta = 0.0f; + + for (int i = 0; i <= 2 * slices + 1; ++i) + { + for (int j = 0; j <= segments; ++j) + { + float phi = dPhi * j; + + float x = sinf(theta) * cosf(phi); + float y = cosf(theta); + float z = sinf(theta) * sinf(phi); + + // add y offset based on which hemisphere we're in + float yoffset = (i < slices) ? halfHeight : -halfHeight; + + Point3 p = Point3(x, y, z) * radius + Vec3(0.0f, yoffset, 0.0f); + + float u = float(j) / segments; + float v = (halfHeight + radius + float(p.y)) / fabsf(halfHeight + radius); + + mesh->m_positions.push_back(p); + mesh->m_normals.push_back(Vec3(x, y, z)); + mesh->m_texcoords.push_back(Vec2(u, v)); + + if (i > 0 && j > 0) + { + int a = i * vertsPerRow + j; + int b = (i - 1) * vertsPerRow + j; + int c = (i - 1) * vertsPerRow + j - 1; + int d = i * vertsPerRow + j - 1; + + // add a quad for this slice + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(a); + mesh->m_indices.push_back(d); + + mesh->m_indices.push_back(b); + mesh->m_indices.push_back(d); + mesh->m_indices.push_back(c); + } + } + + // don't update theta for the middle slice + if (i != slices) + theta += dTheta; + } + + return mesh; +} diff --git a/source/extensions/omni.importer.mjcf/plugins/core/mesh.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.h similarity index 89% rename from source/extensions/omni.importer.mjcf/plugins/core/mesh.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.h index d41976e..ad9022c 100644 --- a/source/extensions/omni.importer.mjcf/plugins/core/mesh.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/mesh.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ #include "../math/core/core.h" #include "../math/core/maths.h" -#include "assimp/scene.h" +#include "omniverse_asset_converter.h" #include #include @@ -135,20 +135,11 @@ struct Mesh std::vector m_materialAssignments; std::vector m_usdMeshPrims; + std::string m_convertedUsdMesh; + Vec3 scale = { 1.0f, 1.0f, 1.0f }; + OmniConverterFuture* m_assetConvertStatus = nullptr; }; -// Create mesh from Assimp import -void addAssimpNodeToMesh(const aiScene* scene, const aiNode* node, aiMatrix4x4 xform, UVInfo& uvInfo, Mesh* mesh); -Mesh* ImportMeshAssimp(const char* path); - -// create mesh from file -Mesh* ImportMeshFromObj(const char* path); -Mesh* ImportMeshFromPly(const char* path); -Mesh* ImportMeshFromBin(const char* path); -Mesh* ImportMeshFromStl(const char* path); - -// just switches on filename -Mesh* ImportMesh(const char* path); // save a mesh in a flat binary format void ExportMeshToBin(const char* path, const Mesh* m); diff --git a/source/extensions/omni.importer.mjcf/plugins/core/platform.cpp b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.cpp similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/core/platform.cpp rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.cpp index dadd107..725d74f 100644 --- a/source/extensions/omni.importer.mjcf/plugins/core/platform.cpp +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,7 +26,6 @@ #include #include -using namespace std; #if defined(_WIN32) || defined(_WIN64) @@ -178,7 +177,7 @@ double GetSeconds() } #endif - +using namespace std; uint8_t* LoadFileToBuffer(const char* filename, uint32_t* sizeRead) { FILE* file = fopen(filename, "rb"); diff --git a/source/extensions/omni.importer.mjcf/plugins/core/platform.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/core/platform.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.h index 2d81749..db05aed 100644 --- a/source/extensions/omni.importer.mjcf/plugins/core/platform.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/core/platform.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/common_math.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/common_math.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/math/core/common_math.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/common_math.h index 1724092..cbc15d0 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/common_math.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/common_math.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/core.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/core.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/math/core/core.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/core.h index 5326135..59be5cd 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/core.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/core.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/mat22.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat22.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/math/core/mat22.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat22.h index 130fb79..5b069fd 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/mat22.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat22.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/mat33.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat33.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/mat33.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat33.h index 02de602..5622cdf 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/mat33.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat33.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/mat44.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat44.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/mat44.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat44.h index b9840ce..bf762cf 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/mat44.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/mat44.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/maths.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/maths.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/maths.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/maths.h index 6a4a5ca..cb0d5cb 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/maths.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/maths.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/matnn.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/matnn.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/matnn.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/matnn.h index 2973392..326cc6a 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/matnn.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/matnn.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/point3.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/point3.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/math/core/point3.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/point3.h index af19b2f..5830836 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/point3.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/point3.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/quat.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/quat.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/quat.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/quat.h index 606013b..091acfa 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/quat.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/quat.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/types.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/types.h similarity index 91% rename from source/extensions/omni.importer.mjcf/plugins/math/core/types.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/types.h index 0e5f780..b13a30d 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/types.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/types.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/vec2.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec2.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/vec2.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec2.h index a9bdf83..8368f51 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/vec2.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec2.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/vec3.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec3.h similarity index 99% rename from source/extensions/omni.importer.mjcf/plugins/math/core/vec3.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec3.h index d9652d5..3d4ea57 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/vec3.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec3.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/omni.importer.mjcf/plugins/math/core/vec4.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec4.h similarity index 98% rename from source/extensions/omni.importer.mjcf/plugins/math/core/vec4.h rename to source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec4.h index 5cef174..dc07649 100644 --- a/source/extensions/omni.importer.mjcf/plugins/math/core/vec4.h +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/math/core/vec4.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Path.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Path.h new file mode 100644 index 0000000..3e32431 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Path.h @@ -0,0 +1,323 @@ +// SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +// clang-format off +#include "../UsdPCH.h" +// clang-format on + +#include + +#include +#include + + +// Platform-specific headers +#ifdef _WIN32 +# include +#else +# include +#endif + +namespace isaacsim +{ +namespace asset +{ +namespace utils +{ +namespace path +{ +inline bool isFile(const std::string& path) +{ +#ifdef _WIN32 + namespace fs = std::filesystem; + + return fs::is_regular_file(path); // Checks if the path is a regular file + +#else + // POSIX/Unix-like systems implementation + struct stat pathStat; + if (stat(path.c_str(), &pathStat) != 0) + { + // Path does not exist + return false; + } + // Check if it's a regular file + return S_ISREG(pathStat.st_mode); +#endif +} + + +inline std::string normalizeUrl(const char* url) +{ + std::string ret; + char stringBuffer[1024]; + std::unique_ptr stringBufferHeap; + size_t bufferSize = sizeof(stringBuffer); + const char* normalizedUrl = omniClientNormalizeUrl(url, stringBuffer, &bufferSize); + if (!normalizedUrl) + { + stringBufferHeap = std::unique_ptr(new char[bufferSize]); + normalizedUrl = omniClientNormalizeUrl(url, stringBufferHeap.get(), &bufferSize); + if (!normalizedUrl) + { + normalizedUrl = ""; + CARB_LOG_ERROR("Cannot normalize %s", url); + } + } + + ret = normalizedUrl; + for (auto& c : ret) + { + if (c == '\\') + { + c = '/'; + } + } + return ret; +} + +inline std::string resolve_absolute(std::string parent, std::string relative) +{ + size_t bufferSize = parent.size() + relative.size(); + std::unique_ptr stringBuffer = std::unique_ptr(new char[bufferSize]); + std::string combined_url = normalizeUrl((parent + "/" + relative).c_str()); + return combined_url; +} + + +// Helper function to split a path into components +inline std::vector split_path(const std::string& path) +{ + std::vector components; + size_t start = 0; + size_t end = path.find('/'); + while (end != std::string::npos) + { + components.push_back(path.substr(start, end - start)); + start = end + 1; + end = path.find('/', start); + } + components.push_back(path.substr(start)); + return components; +} + +/** + * Calculates the relative path of target relative to base. + * + * @param base The base path. + * @param target The target path. + * @return The relative path of target relative to base. + * @throws std::invalid_argument If base or target is not a valid path. + */ +inline std::string resolve_relative(const std::string& base, const std::string& target) +{ + + if (!isFile(target)) + { + return target; + } + // Normalize both paths to use '/' as the separator + std::string base_normalized = normalizeUrl(base.c_str()); + std::string target_normalized = normalizeUrl(target.c_str()); + + // Split both paths into components + std::vector base_components = split_path(base_normalized); + std::vector target_components = split_path(target_normalized); + + if (isFile(base_normalized)) + { + base_components.pop_back(); + } + + // Find the common prefix + size_t common_prefix_length = 0; + while (common_prefix_length < base_components.size() && common_prefix_length < target_components.size() && + base_components[common_prefix_length] == target_components[common_prefix_length]) + { + common_prefix_length++; + } + + // Calculate the relative path + std::string relative_path; + for (size_t i = common_prefix_length; i < base_components.size(); i++) + { + relative_path += "../"; + } + for (size_t i = common_prefix_length; i < target_components.size(); i++) + { + relative_path += target_components[i] + "/"; + } + + // Remove the trailing '/' + if (!relative_path.empty() && relative_path.back() == '/') + { + relative_path.pop_back(); + } + + return relative_path; +} + +/** + * Calculates the final path by resolving the relative path and removing any unnecessary components. + * + * @param path The input path string. + * @return The computed final path. + * @throws std::invalid_argument If the path is not a valid path. + */ +inline std::string resolve_path(const std::string& path) +{ + // Normalize the path to use '/' as the separator + std::string normalized_path = normalizeUrl(path.c_str()); + + // Split the path into components + std::vector components = split_path(normalized_path); + + // Resolve the relative path + std::vector resolved_components; + for (const std::string& component : components) + { + if (component == "..") + { + if (!resolved_components.empty()) + { + resolved_components.pop_back(); + } + } + else if (component != "." && component != "") + { + resolved_components.push_back(component); + } + } + + // Reconstruct the final path + std::string final_path; + if (path[0] == '/') + { + final_path += "/"; + } + for (const std::string& component : resolved_components) + { + final_path += component + "/"; + } + + // Remove the trailing '/' + if (!final_path.empty() && final_path.back() == '/') + { + final_path.pop_back(); + } + + return final_path; +} + +// given the path of one file it strips the filename and appends the relative +// path onto it +inline void MakeRelativePath(const char* filePath, const char* fileRelativePath, char* fullPath) +{ + // get base path of file + const char* lastSlash = nullptr; + + if (!lastSlash) + lastSlash = strrchr(filePath, '\\'); + if (!lastSlash) + lastSlash = strrchr(filePath, '/'); + + int baseLength = 0; + + if (lastSlash) + { + baseLength = int(lastSlash - filePath) + 1; + + // copy base path (including slash to relative path) + memcpy(fullPath, filePath, baseLength); + } + + // if (fileRelativePath[0] == '.') + //++fileRelativePath; + if (fileRelativePath[0] == '\\' || fileRelativePath[0] == '/') + ++fileRelativePath; + + // append mesh filename + strcpy(fullPath + baseLength, fileRelativePath); +} + +inline std::string pathJoin(const std::string& path1, const std::string& path2) +{ + if (path1.empty()) + { + return path2; + } + else + { + auto last = path1.rbegin(); +#ifdef _WIN32 + if (*last != '/' && *last != '\\') +#else + if (*last != '/') +#endif + { + return path1 + '/' + path2; + } + else + { + return path1 + path2; + } + } +} + + +inline std::string getPathStem(const char* path) +{ + if (!path || !*path) + { + return ""; + } + + const char* p = strrchr(path, '/'); +#ifdef _WIN32 + const char* q = strrchr(path, '\\'); + if (q > p) + { + p = q; + } +#endif + + const char* fnameStart = p ? p + 1 : path; + const char* ext = strrchr(fnameStart, '.'); + if (ext) + { + return std::string(fnameStart, ext); + } + else + { + return fnameStart; + } +} + +inline std::string getParent(const std::string& filePath) +{ + size_t found = filePath.find_last_of("/\\"); + if (found != std::string::npos) + { + return filePath.substr(0, found); + } + return ""; +} + +} // namespace path +} // namespace utils +} // namespace isaac +} // namespace omni diff --git a/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Usd.h b/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Usd.h new file mode 100644 index 0000000..43498ef --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/plugins/utils/Usd.h @@ -0,0 +1,112 @@ +// SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +// clang-format off +#include +#include +// clang-format on + +/** + * Select a existing layer as edit target. + * + * @param stage The stage of the operation. + * @param layerIdentifier Layer identifier. + * @return true if the layer is selected, false otherwise. + * + **/ +namespace isaacsim +{ +namespace asset +{ +namespace importer +{ +namespace mjcf +{ +namespace usd +{ + +// Make a path name that is not already used. +inline std::string GetNewSdfPathString(pxr::UsdStageWeakPtr stage, std::string path, int nameClashNum = 0) +{ + bool appendedNumber = false; + int numberAppended = std::max(nameClashNum, 0); + size_t indexOfNumber = 0; + if (stage->GetPrimAtPath(pxr::SdfPath(path))) + { + appendedNumber = true; + std::string name = pxr::SdfPath(path).GetName(); + size_t last_ = name.find_last_of('_'); + indexOfNumber = path.length() + 1; + if (last_ == std::string::npos) + { + // no '_' found, so just tack on the end. + path += "_" + std::to_string(numberAppended); + } + else + { + // There was a _, if the last part of that is a number + // then replace that number with one higher or nameClashNum, + // or just tack on the number if it is last character. + if (last_ == name.length() - 1) + { + path += "_" + std::to_string(numberAppended); + } + else + { + char* p; + std::string after_ = name.substr(last_ + 1, name.length()); + long converted = strtol(after_.c_str(), &p, 10); + if (*p) + { + // not a number + path += "_" + std::to_string(numberAppended); + } + else + { + + numberAppended = nameClashNum == -1 ? converted + 1 : nameClashNum; + indexOfNumber = path.length() - name.length() + last_ + 1; + path = path.substr(0, indexOfNumber); + path += std::to_string(numberAppended); + } + } + } + } + if (appendedNumber) + { + // we just added a number, so we have to make sure the new path is unique. + while (stage->GetPrimAtPath(pxr::SdfPath(path))) + { + path = path.substr(0, indexOfNumber); + numberAppended += 1; + path += std::to_string(numberAppended); + } + } +#if 0 + else + { + while (stage->GetPrimAtPath(pxr::SdfPath(path))) path += ":" + std::to_string(nameClashNum); + } +#endif + return path; +} + +} // namespace usd +} // namespace mjcf +} // namespace importer +} // namespace asset +} // namespace isaacsim diff --git a/source/extensions/isaacsim.asset.importer.mjcf/premake5.lua b/source/extensions/isaacsim.asset.importer.mjcf/premake5.lua new file mode 100644 index 0000000..6ffd3d2 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/premake5.lua @@ -0,0 +1,92 @@ +local ext = get_current_extension_info() +project_ext (ext) + +-- C++ Carbonite plugin +project_ext_plugin(ext, "isaacsim.asset.importer.mjcf.plugin") + symbols "On" + exceptionhandling "On" + rtti "On" + staticruntime "On" + + cppdialect "C++17" + + flags { "FatalCompileWarnings", "MultiProcessorCompile", "NoPCH", "NoIncrementalLink" } + removeflags { "FatalCompileWarnings", "UndefinedIdentifiers" } + + add_files("impl", "plugins") + + includedirs { + target_deps.."/pybind11/include", + target_deps.."/nv_usd/%{cfg.buildcfg}/include", + target_deps.."/usd_ext_physics/%{cfg.buildcfg}/include", + target_deps.."/python/include", + target_deps.."/tinyxml2/include", + target_deps.."/omni_client_library/include", + target_deps.."/omniverse_asset_converter/include", + } + + libdirs { + target_deps.."/nv_usd/%{cfg.buildcfg}/lib", + target_deps.."/usd_ext_physics/%{cfg.buildcfg}/lib", + target_deps.."/tinyxml2/lib", + target_deps.."/omni_client_library/%{cfg.buildcfg}", + extsbuild_dir.."/omni.usd.core/bin", + target_deps.."/omniverse_asset_converter/lib", + } + + links { + "gf", "tf", "sdf", "vt","usd", "usdGeom", "usdUtils", "usdShade", "usdImaging", + "usdPhysics", "physicsSchemaTools", "physxSchema", "omni.usd", "tinyxml2", "tbb", "omniclient", "omniverse_asset_converter", + } + + if os.target() == "linux" then + includedirs { + target_deps.."/nv_usd/%{cfg.buildcfg}/include/boost", + target_deps.."/python/include/python3.10", + } + libdirs { + + } + links { + "stdc++fs" + } + else + filter { "system:windows", "platforms:x86_64" } + link_boost_for_windows({"boost_python310"}) + filter {} + libdirs { + target_deps.."/tbb/lib/intel64/vc14", + } + end + +-- Python Bindings for Carobnite Plugin +project_ext_bindings { + ext = ext, + project_name = "isaacsim.asset.importer.mjcf.python", + module = "_mjcf", + src = "bindings", + target_subdir = "isaacsim/asset/importer/mjcf" +} + +repo_build.prebuild_link { + { "python/scripts", ext.target_dir.."/isaacsim/asset/importer/mjcf/scripts" }, + { "python/tests", ext.target_dir.."/isaacsim/asset/importer/mjcf/tests" }, + { "docs", ext.target_dir.."/docs" }, + { "data", ext.target_dir.."/data" }, + { "icons", ext.target_dir.."/icons" }, +} + +if os.target() == "linux" then + repo_build.prebuild_copy { + { target_deps.."/tinyxml2/lib/lib**", ext.target_dir.."/bin" }, + } +else + repo_build.prebuild_copy { + { target_deps.."/tinyxml2/bin/*.dll", ext.target_dir.."/bin" }, + } +end + +repo_build.prebuild_copy { + + { "python/*.py", ext.target_dir.."/isaacsim/asset/importer/mjcf" }, +} diff --git a/source/extensions/omni.importer.mjcf/python/__init__.py b/source/extensions/isaacsim.asset.importer.mjcf/python/__init__.py similarity index 100% rename from source/extensions/omni.importer.mjcf/python/__init__.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/__init__.py diff --git a/source/extensions/omni.importer.mjcf/python/scripts/__init__.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/__init__.py similarity index 100% rename from source/extensions/omni.importer.mjcf/python/scripts/__init__.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/scripts/__init__.py diff --git a/source/extensions/omni.importer.mjcf/python/scripts/commands.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/commands.py similarity index 90% rename from source/extensions/omni.importer.mjcf/python/scripts/commands.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/scripts/commands.py index 7352474..99653c7 100644 --- a/source/extensions/omni.importer.mjcf/python/scripts/commands.py +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/commands.py @@ -11,10 +11,10 @@ import omni.client import omni.kit.commands +from isaacsim.asset.importer.mjcf import _mjcf # import omni.kit.utils -from omni.client._omniclient import Result -from omni.importer.mjcf import _mjcf +from omni.client import Result from pxr import Usd @@ -24,7 +24,7 @@ class MJCFCreateImportConfig(omni.kit.commands.Command): Should be used with the `MJCFCreateAsset` command Returns: - :obj:`omni.importer.mjcf._mjcf.ImportConfig`: Parsed MJCF stored in an internal structure. + :obj:`isaacsim.asset.importer.mjcf._mjcf.ImportConfig`: Parsed MJCF stored in an internal structure. """ @@ -45,7 +45,7 @@ class MJCFCreateAsset(omni.kit.commands.Command): Args: arg0 (:obj:`str`): The absolute path the mjcf file - arg1 (:obj:`omni.importer.mjcf._mjcf.ImportConfig`): Import configuration + arg1 (:obj:`isaacsim.asset.importer.mjcf._mjcf.ImportConfig`): Import configuration arg2 (:obj:`str`): Path to the robot on the USD stage diff --git a/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/extension.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/extension.py new file mode 100644 index 0000000..aacf152 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/extension.py @@ -0,0 +1,497 @@ +# Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +# + +import asyncio +import gc +import os +import weakref +from collections import namedtuple +from pathlib import Path + +import carb +import omni.client +import omni.ext +import omni.kit.tool.asset_importer as ai +import omni.ui as ui +from isaacsim.asset.importer.mjcf import _mjcf +from omni.kit.helper.file_utils import asset_types +from omni.kit.menu.utils import MenuItemDescription, add_menu_items, remove_menu_items +from omni.kit.notification_manager import NotificationStatus, post_notification +from omni.kit.viewport.utility import get_active_viewport +from omni.kit.window.filepicker import FilePickerDialog +from pxr import Sdf, Usd, UsdGeom, UsdPhysics + +from .option_widget import OptionWidget + +# from omni.isaac.ui.menu import make_menu_item_description +from .ui_utils import ( + btn_builder, + cb_builder, + dropdown_builder, + float_builder, + str_builder, +) + +EXTENSION_NAME = "MJCF Importer" + +import omni.ext +from omni.kit.menu.utils import MenuItemDescription + + +def make_menu_item_description(ext_id: str, name: str, onclick_fun, action_name: str = "") -> None: + """Easily replace the onclick_fn with onclick_action when creating a menu description + + Args: + ext_id (str): The extension you are adding the menu item to. + name (str): Name of the menu item displayed in UI. + onclick_fun (Function): The function to run when clicking the menu item. + action_name (str): name for the action, in case ext_id+name don't make a unique string + + Note: + ext_id + name + action_name must concatenate to a unique identifier. + + """ + # TODO, fix errors when reloading extensions + # action_unique = f'{ext_id.replace(" ", "_")}{name.replace(" ", "_")}{action_name.replace(" ", "_")}' + action_registry = omni.kit.actions.core.get_action_registry() + action_id = "open_mjcf_importer" + action_registry.register_action(ext_id, action_id, onclick_fun) + return MenuItemDescription(name=name, onclick_fn=onclick_fun) + + +def is_mjcf_file(path: str): + _, ext = os.path.splitext(path.lower()) + return ext == ".xml" + + +def on_filter_item(item) -> bool: + if not item or item.is_folder: + return not (item.name == "Omniverse" or item.path.startswith("omniverse:")) + return is_mjcf_file(item.path) + + +class Extension(omni.ext.IExt): + def on_startup(self, ext_id): + + self._mjcf_interface = _mjcf.acquire_mjcf_interface() + self._usd_context = omni.usd.get_context() + # self._window = omni.ui.Window( + # EXTENSION_NAME, width=600, height=400, visible=False, dockPreference=ui.DockPreference.LEFT_BOTTOM + # ) + # self._window.deferred_dock_in("Console", omni.ui.DockPolicy.DO_NOTHING) + # self._window.set_visibility_changed_fn(self._on_window) + # self._window.frame.set_build_fn(self.build_ui) + # menu_items = [ + # make_menu_item_description(ext_id, EXTENSION_NAME, lambda a=weakref.proxy(self): a._menu_callback()) + # ] + # self._menu_items = [MenuItemDescription(name="Workflows", sub_menu=menu_items)] + # add_menu_items(self._menu_items, "Isaac Utils") + + self._models = {} + result, self._config = omni.kit.commands.execute("MJCFCreateImportConfig") + self._filepicker = None + self._last_folder = None + self._content_browser = None + self._extension_path = omni.kit.app.get_app().get_extension_manager().get_extension_path(ext_id) + self._imported_robot = None + self.reset_config() + self._option_builder = OptionWidget(self._models, self._config) + self._delegate = MjcfImporterDelegate( + "Mjcf Importer", + ["(.*\\.xml$)|(.*\\.XML$)"], + ["Mjcf Files (*.xml, *.XML)"], + ) + self._delegate.set_importer(self) + ai.register_importer(self._delegate) + + def build_new_optons(self): + self._option_builder.build_options() + + def reset_config(self): + # Set defaults + # self._config.set_merge_fixed_joints(False) + # self._config.set_convex_decomp(False) + self._config.set_fix_base(False) + self._config.set_import_inertia_tensor(False) + self._config.set_distance_scale(1.0) + self._config.set_density(0.0) + # self._config.set_default_drive_type(1) + # self._config.set_default_drive_strength(1e7) + # self._config.set_default_position_drive_damping(1e5) + self._config.set_self_collision(False) + self._config.set_make_default_prim(True) + self._config.set_create_physics_scene(True) + self._config.set_import_sites(True) + self._config.set_visualize_collision_geoms(False) + + def build_ui(self): + with ui.VStack(spacing=20, height=0): + with ui.HStack(spacing=10): + with ui.VStack(spacing=2, height=0): + # cb_builder( + # label="Merge Fixed Joints", + # tooltip="Check this box to skip adding articulation on fixed joints", + # on_clicked_fn=lambda m, config=self._config: config.set_merge_fixed_joints(m), + # ) + self.build_options_frame_left_top() + with ui.VStack(spacing=2, height=0): + self.build_options_frame_right_bottom() + + with ui.VStack(height=0): + with ui.HStack(spacing=20): + btn_builder("Import MJCF", text="Select and Import", on_clicked_fn=self._parse_mjcf) + + def build_options_frame_left_top(self): + cb_builder( + "Fix Base Link", + tooltip="If true, enables the fix base property on the root of the articulation.", + default_val=False, + on_clicked_fn=lambda m, config=self._config: config.set_fix_base(m), + ) + cb_builder( + "Import Inertia Tensor", + tooltip="If True, inertia will be loaded from mjcf, if the mjcf does not specify inertia tensor, identity will be used and scaled by the scaling factor. If false physx will compute automatically", + on_clicked_fn=lambda m, config=self._config: config.set_import_inertia_tensor(m), + ) + cb_builder( + "Import Sites", + tooltip="If True, sites will be imported from mjcf.", + default_val=True, + on_clicked_fn=lambda m, config=self._config: config.set_import_sites(m), + ) + cb_builder( + "Visualize Collision Geoms", + tooltip="If True, collision geoms will also be imported as visual geoms", + default_val=True, + on_clicked_fn=lambda m, config=self._config: config.set_visualize_collision_geoms(m), + ) + self._models["scale"] = float_builder( + "Stage Units Per Meter", + default_val=1.0, + tooltip="[1.0 / stage_units] Set the distance units the robot is imported as, default is 1.0 corresponding to m", + ) + self._models["scale"].add_value_changed_fn( + lambda m, config=self._config: config.set_distance_scale(m.get_value_as_float()) + ) + # self._models["density"] = float_builder( + # "Link Density", + # default_val=0.0, + # tooltip="[kg/stage_units^3] If a link doesn't have mass, use this density as backup, A density of 0.0 results in the physics engine automatically computing a default density", + # ) + # self._models["density"].add_value_changed_fn( + # lambda m, config=self._config: config.set_density(m.get_value_as_float()) + # ) + # dropdown_builder( + # "Joint Drive Type", + # items=["None", "Position", "Velocity"], + # default_val=1, + # on_clicked_fn=lambda i, config=self._config: i, + # #config.set_default_drive_type(0 if i == "None" else (1 if i == "Position" else 2) + # tooltip="Set the default drive configuration, None: stiffness and damping are zero, Position/Velocity: use default specified below.", + # ) + # self._models["drive_strength"] = float_builder( + # "Joint Drive Strength", + # default_val=1e7, + # tooltip="Corresponds to stiffness for position or damping for velocity, set to -1 to prevent this value from getting used", + # ) + # self._models["drive_strength"].add_value_changed_fn( + # lambda m, config=self._config: m + # # config.set_default_drive_strength(m.get_value_as_float()) + # ) + # self._models["position_drive_damping"] = float_builder( + # "Joint Position Drive Damping", + # default_val=1e5, + # tooltip="If the drive type is set to position, this will be used as a default damping for the drive, set to -1 to prevent this from getting used", + # ) + # self._models["position_drive_damping"].add_value_changed_fn( + # lambda m, config=self._config: m + # #config.set_default_position_drive_damping(m.get_value_as_float() + # ) + + def build_options_frame_right_bottom(self): + self._models["clean_stage"] = cb_builder( + label="Clean Stage", tooltip="Check this box to load MJCF on a clean stage" + ) + # cb_builder( + # "Convex Decomposition", + # tooltip="If true, non-convex meshes will be decomposed into convex collision shapes, if false a convex hull will be used.", + # on_clicked_fn=lambda m, config=self._config: config.set_convex_decomp(m), + # ) + cb_builder( + "Self Collision", + tooltip="If true, allows self intersection between links in the robot, can cause instability if collision meshes between links are self intersecting", + on_clicked_fn=lambda m, config=self._config: config.set_self_collision(m), + ) + cb_builder( + "Create Physics Scene", + tooltip="If true, creates a default physics scene if one does not already exist in the stage", + default_val=True, + on_clicked_fn=lambda m, config=self._config: config.set_create_physics_scene(m), + ), + cb_builder( + "Make Default Prim", + tooltip="If true, makes imported robot the default prim for the stage", + default_val=True, + on_clicked_fn=lambda m, config=self._config: config.set_make_default_prim(m), + ) + cb_builder( + "Create Instanceable Asset", + tooltip="If true, creates an instanceable version of the asset. Meshes will be saved in a separate USD file", + default_val=False, + on_clicked_fn=lambda m, config=self._config: config.set_make_instanceable(m), + ) + self._models["instanceable_usd_path"] = str_builder( + "Instanceable USD Path", + tooltip="USD file to store instanceable meshes in", + default_val="./instanceable_meshes.usd", + use_folder_picker=True, + folder_dialog_title="Select Output File", + folder_button_title="Select File", + ) + self._models["instanceable_usd_path"].add_value_changed_fn( + lambda m, config=self._config: config.set_instanceable_usd_path(m.get_value_as_string()) + ) + + # def _menu_callback(self): + # self._window.visible = not self._window.visible + + # def _on_window(self, visible): + # if self._window.visible: + # self._events = self._usd_context.get_stage_event_stream() + # else: + # self._events = None + # self._stage_event_sub = None + + def _refresh_filebrowser(self): + parent = None + selection_name = None + if len(self._filebrowser.get_selections()): + parent = self._filebrowser.get_selections()[0].parent + selection_name = self._filebrowser.get_selections()[0].name + + self._filebrowser.refresh_ui(parent) + if selection_name: + selection = [child for child in parent.children.values() if child.name == selection_name] + if len(selection): + self._filebrowser.select_and_center(selection[0]) + + def _parse_mjcf(self): + self._filepicker = FilePickerDialog( + "Import MJCF", + allow_multi_selection=False, + apply_button_label="Import", + click_apply_handler=lambda filename, path, c=weakref.proxy(self): c._select_picked_file_callback( + self._filepicker, filename, path + ), + click_cancel_handler=lambda a, b, c=weakref.proxy(self): c._filepicker.hide(), + item_filter_fn=on_filter_item, + enable_versioning_pane=True, + ) + if self._last_folder: + self._filepicker.set_current_directory(self._last_folder) + self._filepicker.navigate_to(self._last_folder) + self._filepicker.refresh_current_directory() + self._filepicker.toggle_bookmark_from_path("Built In MJCF Files", (self._extension_path + "/data/mjcf"), True) + self._filepicker.show() + + def _load_robot(self, path=None, **kargs): + export_folder = ( + self._models["instanceable_usd_path"].get_value_as_string() if self._models["instanceable_usd_path"] else "" + ) + if export_folder == "Same as Imported Model(Default)": + export_folder = "" + if path: + base_path = path[: path.rfind("/")] + basename = path[path.rfind("/") + 1 :] + basename = basename[: basename.rfind(".")] + if path.rfind("/") < 0: + base_path = path[: path.rfind("\\")] + basename = path[path.rfind("\\") + 1] + + # sanitize basename + if basename[0].isdigit(): + basename = "_" + basename + + if export_folder: + base_path = export_folder + + full_path = os.path.abspath(os.path.join(self.root_path, self.filename)) + dest_path = "{}/{}/{}.usd".format(base_path, basename, basename) + if not self._models.get("import_as_reference", False): + dest_path = "" + current_stage = omni.usd.get_context().get_stage() + prim_path = omni.usd.get_stage_next_free_path(current_stage, "/" + basename, False) + + omni.kit.commands.execute( + "MJCFCreateAsset", + mjcf_path=full_path, + import_config=self._config, + prim_path=prim_path, + dest_path=dest_path, + ) + stage = Usd.Stage.Open(dest_path) + prim_name = str(stage.GetDefaultPrim().GetName()) + + def add_reference_to_stage(): + current_stage = omni.usd.get_context().get_stage() + if current_stage: + prim_path = omni.usd.get_stage_next_free_path( + current_stage, str(current_stage.GetDefaultPrim().GetPath()) + "/" + prim_name, False + ) + robot_prim = current_stage.OverridePrim(prim_path) + if "anon:" in current_stage.GetRootLayer().identifier: + robot_prim.GetReferences().AddReference(dest_path) + else: + robot_prim.GetReferences().AddReference( + omni.client.make_relative_url(current_stage.GetRootLayer().identifier, dest_path) + ) + if self._config.create_physics_scene: + UsdPhysics.Scene.Define(current_stage, Sdf.Path("/physicsScene")) + + async def import_with_clean_stage(): + await omni.usd.get_context().new_stage_async() + await omni.kit.app.get_app().next_update_async() + current_stage = omni.usd.get_context().get_stage() + UsdGeom.SetStageUpAxis(current_stage, UsdGeom.Tokens.z) + UsdGeom.SetStageMetersPerUnit(stage, 1) + add_reference_to_stage() + await omni.kit.app.get_app().next_update_async() + + if self._models["clean_stage"].get_value_as_bool(): + asyncio.ensure_future(import_with_clean_stage()) + else: + upAxis = UsdGeom.GetStageUpAxis(current_stage) + if upAxis == "Y": + carb.log_error("The stage Up-Axis must be Z to use the MJCF importer") + add_reference_to_stage() + return prim_path + + def _select_picked_file_callback(self, dialog: FilePickerDialog, filename=None, path=None): + if not path.startswith("omniverse://"): + self.root_path = path + self.filename = filename + if path and filename: + self._last_folder = path + prim_path = self._load_robot(path + "/" + filename) + task = asyncio.ensure_future(omni.kit.app.get_app().next_update_async()) + asyncio.ensure_future(task) + viewport_api = get_active_viewport() + stage = viewport_api.stage + mpu = UsdGeom.GetStageMetersPerUnit(stage) + cam_path = viewport_api.camera_path + omni.kit.commands.execute( + "FramePrimsCommand", + prim_to_move=cam_path, + prims_to_frame=[prim_path], + aspect_ratio=1, + zoom=0.05 * (self._models["scale"].get_value_as_float()), + ) + else: + carb.log_error("path and filename not specified") + else: + carb.log_error("Only Local Paths supported") + dialog.hide() + + def on_shutdown(self): + _mjcf.release_mjcf_interface(self._mjcf_interface) + if self._filepicker: + self._filepicker.toggle_bookmark_from_path( + "Built In MJCF Files", (self._extension_path + "/data/mjcf"), False + ) + self._filepicker.destroy() + self._filepicker = None + + # remove_menu_items(self._menu_items, "Isaac Utils") + # if self._window: + # self._window = None + + self._delegate.destroy() + ai.remove_importer(self._delegate) + gc.collect() + + +class MjcfImporterDelegate(ai.AbstractImporterDelegate): + """ + Mjcf importer delegate implementation for Asset Importer AbstractImporterDelegate. + """ + + def __init__(self, name, filters, descriptions): + super().__init__() + self._name = name + self._filters = filters + self._descriptions = descriptions + self._importer = None + # register the mjcf icon to asset types + ext_path = omni.kit.app.get_app().get_extension_manager().get_extension_path_by_module(__name__) + icon_path = Path(ext_path).joinpath("icons").absolute() + AssetTypeDef = namedtuple("AssetTypeDef", "glyph thumbnail matching_exts") + known_asset_types = asset_types.known_asset_types() + known_asset_types["mjcf"] = AssetTypeDef( + f"{icon_path}/icoFileMJCF.png", + f"{icon_path}/icoFileMJCF.png", + [".xml", ".XML"], + ) + + def set_importer(self, importer): + self._importer = importer + + def show_destination_frame(self): + return False + + def destroy(self): + self._importer = None + + def _on_import_complete(self, file_paths): + pass + + @property + def name(self): + return self._name + + @property + def filter_regexes(self): + return self._filters + + @property + def filter_descriptions(self): + return self._descriptions + + def build_options(self, paths): + # self._importer.reset_config() + # self._importer.build_options_frame_left_top() + # self._importer.build_options_frame_right_bottom() + self._importer.build_new_optons() + + async def convert_assets(self, paths, **kargs): + if not paths: + post_notification( + "No file selected", + "Please select a file to import", + NotificationStatus.ERROR, + ) + return None + for path in paths: + self._importer.root_path = os.path.dirname(path) + self._importer.filename = os.path.basename(path) + prim_path = self._importer._load_robot(path, **kargs) + task = asyncio.ensure_future(omni.kit.app.get_app().next_update_async()) + asyncio.ensure_future(task) + viewport_api = get_active_viewport() + stage = viewport_api.stage + mpu = UsdGeom.GetStageMetersPerUnit(stage) + cam_path = viewport_api.camera_path + omni.kit.commands.execute( + "FramePrimsCommand", + prim_to_move=cam_path, + prims_to_frame=[prim_path], + aspect_ratio=1, + zoom=0.05, + ) + # Don't need to return dest path here, _load_robot do the insertion to stage + return {} diff --git a/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/option_widget.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/option_widget.py new file mode 100644 index 0000000..0927cf6 --- /dev/null +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/option_widget.py @@ -0,0 +1,301 @@ +# Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. +# +import omni.ui as ui + +from .style import get_option_style +from .ui_utils import add_folder_picker_icon, format_tt + + +def checkbox_builder(label="", type="checkbox", default_val=False, tooltip="", on_clicked_fn=None): + """Creates a Stylized Checkbox + + Args: + label (str, optional): Label to the left of the UI element. Defaults to "". + type (str, optional): Type of UI element. Defaults to "checkbox". + default_val (bool, optional): Checked is True, Unchecked is False. Defaults to False. + tooltip (str, optional): Tooltip to display over the Label. Defaults to "". + on_clicked_fn (Callable, optional): Call-back function when clicked. Defaults to None. + + Returns: + ui.SimpleBoolModel: model + """ + + with ui.HStack(): + check_box = ui.CheckBox(width=10, height=0) + ui.Spacer(width=8) + check_box.model.set_value(default_val) + + def on_click(value_model): + on_clicked_fn(value_model.get_value_as_bool()) + + if on_clicked_fn: + check_box.model.add_value_changed_fn(on_click) + ui.Label(label, width=0, height=0, tooltip=tooltip) + return check_box.model + + +def float_field_builder(label="", default_val=0, tooltip="", format="%.2f"): + """Creates a Stylized Floatfield Widget + + Args: + label (str, optional): Label to the left of the UI element. Defaults to "". + default_val (int, optional): Default Value of UI element. Defaults to 0. + tooltip (str, optional): Tooltip to display over the UI elements. Defaults to "". + + Returns: + AbstractValueModel: model + """ + with ui.HStack(spacing=10, style=get_option_style()): + ui.Label(label, width=ui.Fraction(0.5), alignment=ui.Alignment.LEFT_CENTER, tooltip=format_tt(tooltip)) + with ui.ZStack(): + float_field = ui.FloatDrag( + name="FloatDrag", + width=ui.Fraction(0), + height=0, + alignment=ui.Alignment.LEFT, + format=format, + min=0, + ).model + float_field.set_value(default_val) + with ui.HStack(): + ui.Spacer() + ui.Label("Kg/m", name="density", alignment=ui.Alignment.RIGHT_CENTER) + ui.Label("3", name="exponent", alignment=ui.Alignment.RIGHT_TOP, width=0) + ui.Spacer(width=1) + return float_field + + +def string_filed_builder( + default_val=" ", + tooltip="", + read_only=False, + item_filter_fn=None, + folder_dialog_title="Select Output Folder", + folder_button_title="Select Folder", +): + """Creates a Stylized Stringfield Widget + + Args: + default_val (str, optional): Text to initialize in Stringfield. Defaults to " ". + tooltip (str, optional): Tooltip to display over the UI elements. Defaults to "". + read_only (bool, optional): Prevents editing. Defaults to False. + item_filter_fn (Callable, optional): filter function to pass to the FilePicker + bookmark_label (str, optional): bookmark label to pass to the FilePicker + bookmark_path (str, optional): bookmark path to pass to the FilePicker + Returns: + AbstractValueModel: model of Stringfield + """ + with ui.HStack(): + str_field = ui.StringField( + name="StringField", + tooltip=format_tt(tooltip), + width=ui.Fraction(1), + height=0, + alignment=ui.Alignment.LEFT_CENTER, + read_only=read_only, + ) + str_field.enabled = False + str_field.model.set_value(default_val) + + def update_field(filename, path): + if filename == "": + val = path + elif filename[0] != "/" and path[-1] != "/": + val = path + "/" + filename + elif filename[0] == "/" and path[-1] == "/": + val = path + filename[1:] + else: + val = path + filename + str_field.model.set_value(val) + + ui.Spacer(width=4) + file_pick_fn = add_folder_picker_icon( + update_field, item_filter_fn, dialog_title=folder_dialog_title, button_title=folder_button_title, size=16 + ) + ui.Spacer(width=2) + str_field.set_mouse_pressed_fn(lambda a, b, c, d: file_pick_fn()) + return str_field.model + + +def option_header(collapsed, title): + with ui.HStack(height=22): + ui.Spacer(width=4) + with ui.VStack(width=10): + ui.Spacer() + if collapsed: + triangle = ui.Triangle(height=7, width=5) + triangle.alignment = ui.Alignment.RIGHT_CENTER + else: + triangle = ui.Triangle(height=5, width=7) + triangle.alignment = ui.Alignment.CENTER_BOTTOM + ui.Spacer() + ui.Spacer(width=4) + ui.Label(title, name="collapsable_header", width=0) + ui.Spacer(width=3) + ui.Line() + + +def option_frame(title, build_content_fn, collapse_fn=None): + with ui.CollapsableFrame( + title, name="option", height=0, collapsed=False, build_header_fn=option_header, collapsed_changed_fn=collapse_fn + ): + with ui.HStack(): + ui.Spacer(width=2) + build_content_fn() + ui.Spacer(width=2) + + +class OptionWidget: + def __init__(self, models, config): + self._models = models + self._config = config + + @property + def models(self): + return self._models + + @property + def config(self): + return self._config + + def build_options(self): + with ui.VStack(style=get_option_style()): + self._build_model_frame() + self._build_links_frame() + self._build_colliders_frame() + + def _build_model_frame(self): + def build_model_content(): + with ui.VStack(spacing=4): + with ui.HStack(height=26): + self._import_collection = ui.RadioCollection() + with ui.VStack(width=0, alignment=ui.Alignment.LEFT_CENTER): + ui.Spacer() + ui.RadioButton( + width=20, + height=20, + radio_collection=self._import_collection, + alignment=ui.Alignment.LEFT_CENTER, + ) + ui.Spacer() + ui.Spacer(width=4) + ui.Label("Create in Stage", width=90) + ui.Spacer(width=10) + with ui.VStack(width=0): + ui.Spacer() + ui.RadioButton( + width=20, + height=20, + radio_collection=self._import_collection, + alignment=ui.Alignment.LEFT_CENTER, + ) + ui.Spacer() + ui.Spacer(width=4) + ui.Label("Referenced Model") + ui.Spacer(width=50) + self._import_collection.model.set_value(1) + self._import_collection.model.add_value_changed_fn(lambda m: self._update_import_option(m)) + self._models["import_as_reference"] = True + self._add_as_reference_frame = ui.VStack() + with self._add_as_reference_frame: + ui.Label("USD Output") + self._models["instanceable_usd_path"] = string_filed_builder( + tooltip="USD file to store instanceable meshes in", + default_val="Same as Imported Model(Default)", + folder_dialog_title="Select Output File", + folder_button_title="Select File", + read_only=True, + ) + self._add_to_stage_frame = ui.VStack() + with self._add_to_stage_frame: + # TODO: when change this to False, will raise a 'not found default prim' error in _load_robot + checkbox_builder( + "Set as Default Prim", + tooltip="If true, makes imported robot the default prim for the stage", + default_val=self._config.make_default_prim, + on_clicked_fn=lambda m, config=self._config: config.set_make_default_prim(m), + ) + + self._models["clean_stage"] = checkbox_builder( + "Clear Stage on Import", + tooltip="Check this box to load URDF on a clean stage", + default_val=False, + ) + self._add_to_stage_frame.visible = False + checkbox_builder( + "Import Sites", + tooltip="If True, sites will be imported from mjcf.", + default_val=True, + on_clicked_fn=lambda m, config=self._config: config.set_import_sites(m), + ) + + option_frame("Model", build_model_content) + + def _build_links_frame(self): + def build_links_content(): + with ui.VStack(spacing=4): + with ui.HStack(height=24): + ui.Spacer(width=0) + self._base_collection = ui.RadioCollection() + with ui.VStack(width=0): + ui.Spacer() + ui.RadioButton(width=20, height=20, radio_collection=self._base_collection) + ui.Spacer() + ui.Spacer(width=4) + ui.Label("Moveable Base", width=90) + ui.Spacer(width=10) + with ui.VStack(width=0): + ui.Spacer() + ui.RadioButton(width=20, height=20, radio_collection=self._base_collection) + ui.Spacer() + ui.Spacer(width=4) + ui.Label("Static Base") + index = 1 if self._config.fix_base else 0 + self._base_collection.model.set_value(index) + self._base_collection.model.add_value_changed_fn(lambda m: self._update_fix_base(m)) + self._models["density"] = float_field_builder( + "Default Density", + default_val=self._config.density, + tooltip="[kg/stage_units^3] If a link doesn't have mass, use this density as backup, A density of 0.0 results in the physics engine automatically computing a default density", + ) + self._models["density"].add_value_changed_fn( + lambda m, config=self._config: config.set_density(m.get_value_as_float()) + ) + + option_frame("Links", build_links_content) + + def _update_fix_base(self, model): + value = model.get_value_as_bool() + self._config.set_fix_base(value) + self._config.set_visualize_collision_geoms(False) + + def _build_colliders_frame(self): + def build_colliders_content(): + with ui.VStack(spacing=4): + checkbox_builder( + "Visualize Collision Geometry", + tooltip="If True, collision geoms will also be imported as visual geoms", + default_val=False, + on_clicked_fn=lambda m, config=self._config: config.set_visualize_collision_geoms(m), + ) + + checkbox_builder( + "Self Collision", + tooltip="If true, allows self intersection between links in the robot, can cause instability if collision meshes between links are self intersecting", + default_val=self._config.self_collision, + on_clicked_fn=lambda m, config=self._config: config.set_self_collision(m), + ) + + option_frame("Colliders", build_colliders_content) + + def _update_import_option(self, model): + value = bool(model.get_value_as_int() == 1) + self._add_as_reference_frame.visible = value + self._add_to_stage_frame.visible = not value + self._models["import_as_reference"] = value diff --git a/source/extensions/omni.importer.mjcf/python/scripts/style.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/style.py similarity index 88% rename from source/extensions/omni.importer.mjcf/python/scripts/style.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/scripts/style.py index bafe12b..0fa81d5 100644 --- a/source/extensions/omni.importer.mjcf/python/scripts/style.py +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/style.py @@ -7,9 +7,13 @@ # license agreement from NVIDIA CORPORATION is strictly prohibited. # +import pathlib + import carb.settings +import omni.kit.app import omni.ui as ui from omni.kit.window.extensions.common import get_icons_path +from omni.ui import color as cl # Pilaged from omni.kit.widnow.property style.py @@ -658,3 +662,106 @@ def get_style(): } return style + + +## -------------------------------new options start-------------------------------- + +EXTENSION_FOLDER_PATH = pathlib.Path( + omni.kit.app.get_app().get_extension_manager().get_extension_path_by_module(__name__) +) + +## colors +BUTTON_BG_COLOR = 0xFF24211F +FRAME_BG_COLOR = 0xFF343433 +FRAME_HEAD_COLOR = 0xFF8F8F8F +STRING_FIELD_LABEL_COLOR = 0xFF8F8F8F +LABEL_COLOR = 0xFFD8D8D8 +LABEL_TITLE_COLOR = 0xFFCCCCCC +DISABLED_LABEL_COLOR = 0xFF6E6E6E +UNIT_COLOR = 0xFF6E6E6E +LINE_COLOR = 0xFF8F8F8F +TRIANGLE_COLOR = 0xFF8F8F8F +TREEVIEW_ITEM_FONT = 14 +HEADER_FONT_SIZE = 16 +FONT_SIZE = 14 + + +def get_option_style(): + style = { + "CheckBox": {"border_radius": 2, "font_size": 12}, + "CollapsableFrame": {"background_color": FRAME_BG_COLOR, "secondary_color": FRAME_BG_COLOR}, + "CollapsableFrame:hovered": {"background_color": FRAME_BG_COLOR, "secondary_color": FRAME_BG_COLOR}, + "Field::StringField": { + "background_color": BUTTON_BG_COLOR, + "color": STRING_FIELD_LABEL_COLOR, + "font_size": FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_It.ttf", + }, + "Field::FloatField": { + "color": LABEL_COLOR, + "font_size": FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Rg.ttf", + }, + "Field::FloatDrag": { + "color": LABEL_COLOR, + "font_size": FONT_SIZE, + "alignment": ui.Alignment.LEFT, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Rg.ttf", + }, + "Field::resetable": { + "background_color": 0x0, + "color": LABEL_COLOR, + "font_size": 16, + "padding": 4, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Rg.ttf", + }, + "Line": {"color": LINE_COLOR}, + "Label": { + "color": LABEL_COLOR, + "font_size": FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Md.ttf", + }, + "Label::header": { + "color": FRAME_HEAD_COLOR, + "font_size": FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Md.ttf", + }, + "Label::collapsable_header": { + "color": FRAME_HEAD_COLOR, + "font_size": HEADER_FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Rg.ttf", + }, + "Label::index": { + "color": LABEL_COLOR, + "font_size": TREEVIEW_ITEM_FONT, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Rg.ttf", + }, + "Label::density": { + "color": UNIT_COLOR, + "font_size": FONT_SIZE, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Lt.ttf", + }, + "Label::exponent": { + "color": UNIT_COLOR, + "font_size": 8, + "font": f"{EXTENSION_FOLDER_PATH}/data/fonts/NVIDIASans_Lt.ttf", + }, + "RadioButton": {"background_color": cl.transparent, "padding": 0}, + "RadioButton:checked": {"background_color": cl.transparent, "padding": 0}, + "RadioButton:hovered": {"background_color": cl.transparent, "padding": 0}, + "RadioButton.Image": { + "image_url": f"{EXTENSION_FOLDER_PATH}/icons/radio_off.svg", + "color": LABEL_COLOR, + }, + "RadioButton.Image:hovered": { + "image_url": f"{EXTENSION_FOLDER_PATH}/icons/radio_off.svg", + "color": LABEL_COLOR, + }, + "RadioButton.Image:checked": {"image_url": f"{EXTENSION_FOLDER_PATH}/icons/radio_on.svg", "color": LABEL_COLOR}, + "RadioButton:pressed": {"background_color": cl.transparent}, + "Triangle": {"background_color": TRIANGLE_COLOR, "color": TRIANGLE_COLOR}, + "Rectangle::reset_invalid": {"background_color": 0xFF505050, "border_radius": 1}, + "Rectangle::reset": {"background_color": 0xFFA07D4F, "border_radius": 1}, + "ScrollingFrame": {"background_color": FRAME_BG_COLOR}, + } + return style diff --git a/source/extensions/omni.importer.mjcf/python/scripts/ui_utils.py b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/ui_utils.py similarity index 97% rename from source/extensions/omni.importer.mjcf/python/scripts/ui_utils.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/scripts/ui_utils.py index 7f61d2d..a066408 100644 --- a/source/extensions/omni.importer.mjcf/python/scripts/ui_utils.py +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/scripts/ui_utils.py @@ -24,7 +24,15 @@ from omni.kit.window.property.templates import LABEL_HEIGHT, LABEL_WIDTH # from .callbacks import on_copy_to_clipboard, on_docs_link_clicked, on_open_folder_clicked, on_open_IDE_clicked -from .style import BUTTON_WIDTH, COLOR_W, COLOR_X, COLOR_Y, COLOR_Z, get_style +from .style import ( + BUTTON_WIDTH, + COLOR_W, + COLOR_X, + COLOR_Y, + COLOR_Z, + get_option_style, + get_style, +) def add_line_rect_flourish(draw_line=True): @@ -66,6 +74,7 @@ def add_folder_picker_icon( bookmark_path=None, dialog_title="Select Output Folder", button_title="Select Folder", + size=24, ): def open_file_picker(): def on_selected(filename, path): @@ -90,11 +99,11 @@ def on_canceled(a, b): with ui.Frame(width=0, tooltip=button_title): ui.Button( name="IconButton", - width=24, - height=24, + width=size, + height=size, clicked_fn=open_file_picker, style=get_style()["IconButton.Image::FolderPicker"], - alignment=ui.Alignment.RIGHT_TOP, + alignment=ui.Alignment.RIGHT_CENTER, ) diff --git a/source/extensions/omni.importer.mjcf/python/tests/__init__.py b/source/extensions/isaacsim.asset.importer.mjcf/python/tests/__init__.py similarity index 93% rename from source/extensions/omni.importer.mjcf/python/tests/__init__.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/tests/__init__.py index 6ab6247..e18b7e9 100644 --- a/source/extensions/omni.importer.mjcf/python/tests/__init__.py +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/tests/__init__.py @@ -7,4 +7,4 @@ # license agreement from NVIDIA CORPORATION is strictly prohibited. # -from .test_mjcf import * +scan_for_test_modules = True diff --git a/source/extensions/omni.importer.mjcf/python/tests/test_mjcf.py b/source/extensions/isaacsim.asset.importer.mjcf/python/tests/test_mjcf.py similarity index 95% rename from source/extensions/omni.importer.mjcf/python/tests/test_mjcf.py rename to source/extensions/isaacsim.asset.importer.mjcf/python/tests/test_mjcf.py index e0dc39f..b9e5f12 100644 --- a/source/extensions/omni.importer.mjcf/python/tests/test_mjcf.py +++ b/source/extensions/isaacsim.asset.importer.mjcf/python/tests/test_mjcf.py @@ -30,7 +30,7 @@ async def setUp(self): self._timeline = omni.timeline.get_timeline_interface() ext_manager = omni.kit.app.get_app().get_extension_manager() - ext_id = ext_manager.get_enabled_extension_id("omni.importer.mjcf") + ext_id = ext_manager.get_enabled_extension_id("isaacsim.asset.importer.mjcf") self._extension_path = ext_manager.get_extension_path(ext_id) await omni.usd.get_context().new_stage_async() await omni.kit.app.get_app().next_update_async() @@ -41,7 +41,7 @@ async def tearDown(self): print("tearDown, assets still loading, waiting to finish...") await asyncio.sleep(1.0) await omni.kit.app.get_app().next_update_async() - await omni.usd.get_context().new_stage_async() + # await omni.usd.get_context().new_stage_async() async def test_mjcf_ant(self): stage = omni.usd.get_context().get_stage() @@ -61,7 +61,7 @@ async def test_mjcf_ant(self): self.assertNotEqual(prim.GetPath(), Sdf.Path.emptyPath) # make sure the joints and links exist - front_left_leg_joint = stage.GetPrimAtPath("/ant/torso/joints/hip_1") + front_left_leg_joint = stage.GetPrimAtPath("/ant/joints/hip_1") self.assertNotEqual(front_left_leg_joint.GetPath(), Sdf.Path.emptyPath) self.assertEqual(front_left_leg_joint.GetTypeName(), "PhysicsRevoluteJoint") self.assertAlmostEqual(front_left_leg_joint.GetAttribute("physics:upperLimit").Get(), 40) @@ -71,7 +71,7 @@ async def test_mjcf_ant(self): self.assertAlmostEqual(front_left_leg.GetAttribute("physics:diagonalInertia").Get()[0], 0.0) self.assertAlmostEqual(front_left_leg.GetAttribute("physics:mass").Get(), 0.0) - front_left_foot_joint = stage.GetPrimAtPath("/ant/torso/joints/ankle_1") + front_left_foot_joint = stage.GetPrimAtPath("/ant/joints/ankle_1") self.assertNotEqual(front_left_foot_joint.GetPath(), Sdf.Path.emptyPath) self.assertEqual(front_left_foot_joint.GetTypeName(), "PhysicsRevoluteJoint") self.assertAlmostEqual(front_left_foot_joint.GetAttribute("physics:upperLimit").Get(), 100) @@ -107,16 +107,16 @@ async def test_mjcf_humanoid(self): self.assertNotEqual(prim.GetPath(), Sdf.Path.emptyPath) # make sure the joints and link exist - root_joint = stage.GetPrimAtPath("/humanoid/torso/joints/rootJoint_torso") + root_joint = stage.GetPrimAtPath("/humanoid/joints/rootJoint_torso") self.assertNotEqual(root_joint.GetPath(), Sdf.Path.emptyPath) - pelvis_joint = stage.GetPrimAtPath("/humanoid/torso/joints/abdomen_x") + pelvis_joint = stage.GetPrimAtPath("/humanoid/joints/abdomen_x") self.assertNotEqual(pelvis_joint.GetPath(), Sdf.Path.emptyPath) self.assertEqual(pelvis_joint.GetTypeName(), "PhysicsRevoluteJoint") self.assertAlmostEqual(pelvis_joint.GetAttribute("physics:upperLimit").Get(), 35) self.assertAlmostEqual(pelvis_joint.GetAttribute("physics:lowerLimit").Get(), -35) - lower_waist_joint = stage.GetPrimAtPath("/humanoid/torso/joints/lower_waist") + lower_waist_joint = stage.GetPrimAtPath("/humanoid/joints/lower_waist") self.assertNotEqual(lower_waist_joint.GetPath(), Sdf.Path.emptyPath) self.assertEqual(lower_waist_joint.GetTypeName(), "PhysicsJoint") self.assertAlmostEqual(lower_waist_joint.GetAttribute("limit:rotX:physics:high").Get(), 45) @@ -151,7 +151,7 @@ async def test_doc_sample(self): # Get path to extension data: ext_manager = omni.kit.app.get_app().get_extension_manager() - ext_id = ext_manager.get_enabled_extension_id("omni.importer.mjcf") + ext_id = ext_manager.get_enabled_extension_id("isaacsim.asset.importer.mjcf") extension_path = ext_manager.get_extension_path(ext_id) # import MJCF @@ -266,7 +266,7 @@ async def test_mjcf_visualize_collision_geom(self): ) await omni.kit.app.get_app().next_update_async() - prim = stage.GetPrimAtPath("/shadow_hand/robot0_hand_mount/robot0_forearm/visuals/robot0_C_forearm") + prim = stage.GetPrimAtPath("/shadow_hand/robot0_hand_mount/robot0_forearm/collisions") self.assertNotEqual(prim.GetPath(), Sdf.Path.emptyPath) imageable = UsdGeom.Imageable(prim) diff --git a/source/extensions/omni.importer.mjcf/plugins/MeshImporter.h b/source/extensions/omni.importer.mjcf/plugins/MeshImporter.h deleted file mode 100644 index 82361a3..0000000 --- a/source/extensions/omni.importer.mjcf/plugins/MeshImporter.h +++ /dev/null @@ -1,232 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "core/mesh.h" - -#include - -namespace mesh -{ - -class MeshImporter -{ -private: - // std::map> - // gymGraphicsMeshCache; std::map, - // carb::gym::TriangleMeshHandle> cylinderCache; std::map - // simulationMeshCache; - -public: - MeshImporter() - { - } - - std::string resolveMeshPath(const std::string& filePath) - { - // noop for now - return filePath; - } - - Mesh* loadMeshAssimp(std::string relativeMeshPath, const Vec3& scale, GymMeshNormalMode normalMode, bool flip = false) - { - std::string meshPath = resolveMeshPath(relativeMeshPath); - - Mesh* mesh = ImportMeshAssimp(meshPath.c_str()); - if (mesh == nullptr) - { - return nullptr; - } - if (mesh->m_positions.size() == 0) - { - return nullptr; - } - - if (normalMode == GymMeshNormalMode::eFromAsset) - { - // asset normals should already be in the mesh - if (mesh->m_normals.size() != mesh->m_positions.size()) - { - // fall back to vertex norms - mesh->CalculateNormals(); - } - } - else if (normalMode == GymMeshNormalMode::eComputePerVertex) - { - mesh->CalculateNormals(); - } - else if (normalMode == GymMeshNormalMode::eComputePerFace) - { - mesh->CalculateFaceNormals(); - } - - // Use normals to generate missing texcoords - for (unsigned int i = 0; i < mesh->m_texcoords.size(); ++i) - { - Vector2& uv = mesh->m_texcoords[i]; - if (uv.x < 0 && uv.y < 0) - { - Vector3& n = mesh->m_normals[i]; - uv.x = std::atan2(n.z, n.x) / k2Pi; - uv.y = std::atan2(std::sqrt(n.x * n.x + n.z * n.z), n.y) / kPi; - } - } - - if (flip) - { - Matrix44 flip; - flip(0, 0) = 1.0f; - flip(2, 1) = 1.0f; - flip(1, 2) = -1.0f; - flip(3, 3) = 1.0f; - mesh->Transform(flip); - } - - mesh->Transform(ScaleMatrix(scale)); - - return mesh; - } - - Mesh* loadMeshFromObj(std::string relativeMeshPath, const Vec3& scale, bool flip = false) - { - std::string meshPath = resolveMeshPath(relativeMeshPath); - - size_t extensionPosition = meshPath.find_last_of("."); - meshPath.replace(extensionPosition, std::string::npos, ".obj"); - - Mesh* mesh = ImportMeshFromObj(meshPath.c_str()); - if (mesh == nullptr) - { - return nullptr; - } - if (mesh->m_positions.size() == 0) - { - // Memory leak? `Mesh` has no `delete` mechanism - return nullptr; - } - if (flip) - { - Matrix44 flip; - flip(0, 0) = 1.0f; - flip(2, 1) = 1.0f; - flip(1, 2) = -1.0f; - flip(3, 3) = 1.0f; - mesh->Transform(flip); - } - - mesh->Transform(ScaleMatrix(scale)); - - // use flat normals on collision shapes - mesh->CalculateFaceNormals(); - - return mesh; - } - - Mesh* loadMeshFromWrl(std::string relativeMeshPath, const Vec3& scale) - { - std::string meshPath = resolveMeshPath(relativeMeshPath); - - size_t extensionPosition = meshPath.find_last_of("."); - meshPath.replace(extensionPosition, std::string::npos, ".wrl"); - - std::ifstream inf(meshPath); - if (!inf) - { - printf("File %s not found!\n", meshPath.c_str()); - return nullptr; - } - - // TODO Avoid! - Mesh* mesh = new Mesh(); - std::string str; - while (inf >> str) - { - if (str == "point") - { - std::vector points; - std::string tmp; - inf >> tmp; - while (tmp != "]") - { - float x, y, z; - std::string ss; - inf >> ss; - if (ss == "]") - { - break; - } - x = (float)atof(ss.c_str()); - inf >> y >> z; - points.push_back(Vec3(x * scale.x, y * scale.y, z * scale.z)); - inf >> tmp; - } - - while (inf >> str) - { - if (str == "coordIndex") - { - std::vector indices; - inf >> tmp; - inf >> tmp; - while (tmp != "]") - { - int i0, i1, i2; - - if (tmp == "]") - { - break; - } - - sscanf(tmp.c_str(), "%d", &i0); - - std::string s1, s2, s3; - inf >> s1 >> s2 >> s3; - sscanf(s1.c_str(), "%d", &i1); - sscanf(s2.c_str(), "%d", &i2); - - indices.push_back(i0); - indices.push_back(i1); - indices.push_back(i2); - - inf >> tmp; - } - - // Now found triangles too, create convex - - mesh->m_positions.resize(points.size()); - mesh->m_indices.resize(indices.size()); - for (size_t i = 0; i < points.size(); i++) - { - mesh->m_positions[i].x = points[i].x; - mesh->m_positions[i].y = points[i].y; - mesh->m_positions[i].z = points[i].z; - } - - memcpy(&mesh->m_indices[0], &indices[0], sizeof(int) * indices.size()); - mesh->CalculateNormals(); - - break; - } - } - } - } - inf.close(); - - return mesh; - } -}; - -} // namespace mesh diff --git a/source/extensions/omni.importer.mjcf/plugins/Mjcf.cpp b/source/extensions/omni.importer.mjcf/plugins/Mjcf.cpp deleted file mode 100644 index 1235913..0000000 --- a/source/extensions/omni.importer.mjcf/plugins/Mjcf.cpp +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#define CARB_EXPORTS - -// clang-format off -#include "UsdPCH.h" -// clang-format on - -#include "Mjcf.h" - -#include "MjcfImporter.h" -#include "stdio.h" - -#include -#include - -#include -#include -#include - -#define EXTENSION_NAME "omni.importer.mjcf.plugin" - -using namespace carb; - -const struct carb::PluginImplDesc kPluginImpl = { EXTENSION_NAME, "MJCF Utilities", "NVIDIA", - carb::PluginHotReload::eEnabled, "dev" }; - -CARB_PLUGIN_IMPL(kPluginImpl, omni::importer::mjcf::Mjcf) -CARB_PLUGIN_IMPL_DEPS(omni::kit::IApp, carb::logging::ILogging) - -namespace -{ - -// passed in from python -void createAssetFromMJCF(const char* fileName, - const char* primName, - omni::importer::mjcf::ImportConfig& config, - const std::string& stage_identifier = "") -{ - omni::importer::mjcf::MJCFImporter mjcf(fileName, config); - if (!mjcf.isLoaded) - { - printf("cannot load mjcf xml file\n"); - } - Transform trans = Transform(); - - bool save_stage = true; - pxr::UsdStageRefPtr _stage; - if (stage_identifier != "" && pxr::UsdStage::IsSupportedFile(stage_identifier)) - { - _stage = pxr::UsdStage::Open(stage_identifier); - if (!_stage) - { - CARB_LOG_INFO("Creating Stage: %s", stage_identifier.c_str()); - _stage = pxr::UsdStage::CreateNew(stage_identifier); - } - else - { - for (const auto& p : _stage->GetPrimAtPath(pxr::SdfPath("/")).GetChildren()) - { - _stage->RemovePrim(p.GetPath()); - } - } - config.makeDefaultPrim = true; - pxr::UsdGeomSetStageUpAxis(_stage, pxr::UsdGeomTokens->z); - } - if (!_stage) // If all else fails, import on current stage - { - CARB_LOG_INFO("Importing URDF to Current Stage"); - // Get the 'active' USD stage from the USD stage cache. - const std::vector allStages = pxr::UsdUtilsStageCache::Get().GetAllStages(); - if (allStages.size() != 1) - { - CARB_LOG_ERROR( - "Cannot determine the 'active' USD stage (%zu stages " - "present in the USD stage cache).", - allStages.size()); - return; - } - - _stage = allStages[0]; - save_stage = false; - } - std::string result = ""; - if (_stage) - { - pxr::UsdGeomSetStageMetersPerUnit(_stage, 1.0 / config.distanceScale); - if (!mjcf.AddPhysicsEntities(_stage, trans, primName, config)) - { - printf("no physics entities found!\n"); - } - // CARB_LOG_WARN("Import Done, saving"); - if (save_stage) - { - // CARB_LOG_WARN("Saving Stage %s", - // _stage->GetRootLayer()->GetIdentifier().c_str()); - _stage->Save(); - } - } -} - -} // namespace - -CARB_EXPORT void carbOnPluginStartup() -{ - CARB_LOG_INFO("Startup MJCF Extension"); -} - -CARB_EXPORT void carbOnPluginShutdown() -{ -} - -void fillInterface(omni::importer::mjcf::Mjcf& iface) -{ - using namespace omni::importer::mjcf; - memset(&iface, 0, sizeof(iface)); - // iface.helloWorld = helloWorld; - iface.createAssetFromMJCF = createAssetFromMJCF; - // iface.importRobot = importRobot; -} diff --git a/source/extensions/omni.importer.mjcf/plugins/core/mesh.cpp b/source/extensions/omni.importer.mjcf/plugins/core/mesh.cpp deleted file mode 100644 index 02e8bf5..0000000 --- a/source/extensions/omni.importer.mjcf/plugins/core/mesh.cpp +++ /dev/null @@ -1,1545 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "mesh.h" - -#include "assimp/Importer.hpp" -#include "assimp/postprocess.h" -#include "assimp/scene.h" -#include "platform.h" - -#include -#include -#include - -using namespace std; - -void Mesh::DuplicateVertex(uint32_t i) -{ - assert(m_positions.size() > i); - m_positions.push_back(m_positions[i]); - - if (m_normals.size() > i) - m_normals.push_back(m_normals[i]); - - if (m_colours.size() > i) - m_colours.push_back(m_colours[i]); - - if (m_texcoords.size() > i) - m_texcoords.push_back(m_texcoords[i]); -} - -void Mesh::Normalize(float s) -{ - Vec3 lower, upper; - GetBounds(lower, upper); - Vec3 edges = upper - lower; - - Transform(TranslationMatrix(Point3(-lower))); - - float maxEdge = max(edges.x, max(edges.y, edges.z)); - Transform(ScaleMatrix(s / maxEdge)); -} - -void Mesh::CalculateFaceNormals() -{ - Mesh m; - - int numTris = int(GetNumFaces()); - - for (int i = 0; i < numTris; ++i) - { - int a = m_indices[i * 3 + 0]; - int b = m_indices[i * 3 + 1]; - int c = m_indices[i * 3 + 2]; - - int start = int(m.m_positions.size()); - - m.m_positions.push_back(m_positions[a]); - m.m_positions.push_back(m_positions[b]); - m.m_positions.push_back(m_positions[c]); - - if (!m_texcoords.empty()) - { - m.m_texcoords.push_back(m_texcoords[a]); - m.m_texcoords.push_back(m_texcoords[b]); - m.m_texcoords.push_back(m_texcoords[c]); - } - - if (!m_colours.empty()) - { - m.m_colours.push_back(m_colours[a]); - m.m_colours.push_back(m_colours[b]); - m.m_colours.push_back(m_colours[c]); - } - - m.m_indices.push_back(start + 0); - m.m_indices.push_back(start + 1); - m.m_indices.push_back(start + 2); - } - - m.CalculateNormals(); - m.m_materials = this->m_materials; - m.m_materialAssignments = this->m_materialAssignments; - m.m_usdMeshPrims = this->m_usdMeshPrims; - - *this = m; -} - -void Mesh::CalculateNormals() -{ - m_normals.resize(0); - m_normals.resize(m_positions.size()); - - int numTris = int(GetNumFaces()); - - for (int i = 0; i < numTris; ++i) - { - int a = m_indices[i * 3 + 0]; - int b = m_indices[i * 3 + 1]; - int c = m_indices[i * 3 + 2]; - - Vec3 n = Cross(m_positions[b] - m_positions[a], m_positions[c] - m_positions[a]); - - m_normals[a] += n; - m_normals[b] += n; - m_normals[c] += n; - } - - int numVertices = int(GetNumVertices()); - - for (int i = 0; i < numVertices; ++i) - m_normals[i] = ::Normalize(m_normals[i]); -} - -namespace -{ - -enum PlyFormat -{ - eAscii, - eBinaryBigEndian -}; - -template -T PlyRead(ifstream& s, PlyFormat format) -{ - T data = eAscii; - - switch (format) - { - case eAscii: - { - s >> data; - break; - } - case eBinaryBigEndian: - { - char c[sizeof(T)]; - s.read(c, sizeof(T)); - reverse(c, c + sizeof(T)); - data = *(T*)c; - break; - } - default: - assert(0); - } - - return data; -} - -} // namespace - -static pxr::GfVec3f AiVector3dToGfVector3f(const aiVector3D& vector) -{ - return pxr::GfVec3f(vector.x, vector.y, vector.z); -} - -static pxr::GfVec2f AiVector3dToGfVector2f(const aiVector3D& vector) -{ - return pxr::GfVec2f(vector.x, vector.y); -} - -pxr::GfVec3f AiColor4DToGfVector3f(const aiColor4D& color) -{ - return pxr::GfVec3f(color.r, color.g, color.b); -} - -void addAssimpNodeToMesh(const aiScene* scene, const aiNode* node, aiMatrix4x4 xform, UVInfo& uvInfo, Mesh* mesh) -{ - unsigned int triOffset = static_cast(mesh->m_indices.size() / 3); - unsigned int pointOffset = static_cast(mesh->m_positions.size()); - unsigned int nodeTriOffset = 0; - unsigned int nodePointOffset = 0; - - for (unsigned int m = 0; m < node->mNumMeshes; ++m) - { - const aiMesh* assimpMesh = scene->mMeshes[node->mMeshes[m]]; - USDMesh usdmesh; - - for (unsigned int j = 0; j < assimpMesh->mNumVertices; ++j) - { - const aiVector3D& p = xform * assimpMesh->mVertices[j]; - mesh->m_positions.push_back(Point3{ p.x, p.y, p.z }); - usdmesh.points.push_back(AiVector3dToGfVector3f(p)); - } - - unsigned int numColourChannels = assimpMesh->GetNumColorChannels(); - usdmesh.colors.resize(numColourChannels); - if (numColourChannels > 0) - { - if (numColourChannels > 1) - { - std::cout << "Multiple colour channels not supported. Using first channel." << std::endl; - } - unsigned int colourChannel = 0; - for (; colourChannel < AI_MAX_NUMBER_OF_COLOR_SETS; ++colourChannel) - { - if (assimpMesh->HasVertexColors(colourChannel)) - break; - } - for (unsigned int j = 0; j < assimpMesh->mNumVertices; ++j) - { - const aiColor4D& c = assimpMesh->mColors[colourChannel][j]; - mesh->m_colours.push_back(Colour{ c.r, c.g, c.b, c.a }); - } - } - - unsigned int numUVChannels = assimpMesh->GetNumUVChannels(); - usdmesh.uvs.resize(numUVChannels); - if (numUVChannels > 0) - { - if (numUVChannels > 1) - { - std::cout << "Multiple UV channels not supported. Using first channel." << std::endl; - } - unsigned int UVChannel = 0; - for (; UVChannel < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++UVChannel) - { - if (assimpMesh->HasTextureCoords(UVChannel) && assimpMesh->mNumUVComponents[UVChannel] <= 2) - break; - } - - uvInfo.uvs.emplace_back(); - auto& currentUV = uvInfo.uvs.back(); - uvInfo.uvStartIndices.push_back(pointOffset + nodePointOffset); - - for (unsigned int j = 0; j < assimpMesh->mNumVertices; ++j) - { - const aiVector3D& uv = assimpMesh->mTextureCoords[UVChannel][j]; - mesh->m_texcoords.push_back(Vector2{ uv.x, uv.y }); - - currentUV.push_back(Vector2{ uv.x, uv.y }); - } - } - - for (size_t j = 0; j < assimpMesh->mNumFaces; j++) - { - const aiFace& face = assimpMesh->mFaces[j]; - if (face.mNumIndices >= 3) - { - for (size_t k = 0; k < face.mNumIndices; k++) - { - if (assimpMesh->mNormals) - { - usdmesh.normals.push_back(AiVector3dToGfVector3f(assimpMesh->mNormals[face.mIndices[k]])); - } - - for (size_t m = 0; m < usdmesh.uvs.size(); m++) - { - usdmesh.uvs[m].push_back(AiVector3dToGfVector2f(assimpMesh->mTextureCoords[m][face.mIndices[k]])); - } - - for (size_t m = 0; m < usdmesh.colors.size(); m++) - { - usdmesh.colors[m].push_back(AiColor4DToGfVector3f(assimpMesh->mColors[m][face.mIndices[k]])); - } - } - usdmesh.faceVertexCounts.push_back(face.mNumIndices); - } - } - - unsigned int indexOffset = pointOffset + nodePointOffset; - - for (unsigned int j = 0; j < assimpMesh->mNumFaces; ++j) - { - const aiFace& f = assimpMesh->mFaces[j]; - if (f.mNumIndices >= 3) - { - for (size_t k = 0; k < f.mNumIndices; k++) - { - usdmesh.faceVertexIndices.push_back(f.mIndices[k]); - } - } - // assert(f.mNumIndices > 0 && f.mNumIndices <= 3); // importer should - // triangluate mesh - if (f.mNumIndices == 1) - { - mesh->m_indices.push_back(f.mIndices[0] + indexOffset); - mesh->m_indices.push_back(f.mIndices[0] + indexOffset); - mesh->m_indices.push_back(f.mIndices[0] + indexOffset); - } - else if (f.mNumIndices == 2) - { - mesh->m_indices.push_back(f.mIndices[0] + indexOffset); - mesh->m_indices.push_back(f.mIndices[1] + indexOffset); - mesh->m_indices.push_back(f.mIndices[1] + indexOffset); - } - else if (f.mNumIndices == 3) - { - mesh->m_indices.push_back(f.mIndices[0] + indexOffset); - mesh->m_indices.push_back(f.mIndices[1] + indexOffset); - mesh->m_indices.push_back(f.mIndices[2] + indexOffset); - } - } - - if (assimpMesh->HasNormals()) - { - for (unsigned int j = 0; j < assimpMesh->mNumVertices; ++j) - { - const aiVector3D& n = xform * assimpMesh->mNormals[j]; - mesh->m_normals.push_back(SafeNormalize(Vector3{ n.x, n.y, n.z })); - } - } - - MaterialAssignment matAssign; - matAssign.startTri = triOffset + nodeTriOffset; - matAssign.endTri = triOffset + nodeTriOffset + assimpMesh->mNumFaces; - matAssign.material = static_cast(assimpMesh->mMaterialIndex); - mesh->m_materialAssignments.push_back(matAssign); - - nodeTriOffset += assimpMesh->mNumFaces; - nodePointOffset += assimpMesh->mNumVertices; - - mesh->m_usdMeshPrims.push_back(usdmesh); - } -} - -Mesh* ImportMeshAssimp(const char* path) -{ - Assimp::Importer importer; - const aiScene* scene = importer.ReadFile(std::string(path), aiProcess_Triangulate | aiProcess_JoinIdenticalVertices); - - if (!scene) - { - return nullptr; - } - - Mesh* mesh = new Mesh; - for (unsigned int i = 0; i < scene->mNumMaterials; ++i) - { - aiMaterial* assimpMaterial = scene->mMaterials[i]; - Material mat; - mat.name = std::string{ assimpMaterial->GetName().C_Str() }; - - aiColor3D Ka; - if (assimpMaterial->Get(AI_MATKEY_COLOR_AMBIENT, Ka) == AI_SUCCESS) - { - mat.Ka = Vec3{ Ka.r, Ka.g, Ka.b }; - } - - aiColor3D Kd; - if (assimpMaterial->Get(AI_MATKEY_COLOR_DIFFUSE, Kd) == AI_SUCCESS) - { - mat.Kd = Vec3{ Kd.r, Kd.g, Kd.b }; - mat.hasDiffuse = true; - } - - aiColor3D Ks; - if (assimpMaterial->Get(AI_MATKEY_COLOR_SPECULAR, Ks) == AI_SUCCESS) - { - mat.Ks = Vec3{ Ks.r, Ks.g, Ks.b }; - } - - float specular; - if (assimpMaterial->Get(AI_MATKEY_SPECULAR_FACTOR, specular) == AI_SUCCESS) - { - mat.specular = specular; - mat.hasSpecular = true; - } - - float Ns; - if (assimpMaterial->Get(AI_MATKEY_SHININESS, Ns) == AI_SUCCESS) - { - mat.Ns = Ns; - mat.hasShininess = true; - } - - float metallic; - if (assimpMaterial->Get(AI_MATKEY_METALLIC_FACTOR, metallic) == AI_SUCCESS) - { - mat.metallic = metallic; - mat.hasMetallic = true; - } - - aiColor3D emissive; - if (assimpMaterial->Get(AI_MATKEY_COLOR_EMISSIVE, emissive) == AI_SUCCESS) - { - mat.emissive = Vec3{ emissive.r, emissive.g, emissive.b }; - mat.hasEmissive = true; - } - - aiString path; - if (assimpMaterial->GetTexture(aiTextureType_DIFFUSE, 0, &path) == aiReturn_SUCCESS) - { - mat.mapKd = std::string(path.C_Str()); - } - if (assimpMaterial->GetTexture(aiTextureType_HEIGHT, 0, &path) == aiReturn_SUCCESS) - { - mat.mapBump = std::string(path.C_Str()); - } - if (assimpMaterial->GetTexture(aiTextureType_REFLECTION, 0, &path) == aiReturn_SUCCESS) - { - mat.mapMetallic = std::string(path.C_Str()); - } - if (assimpMaterial->GetTexture(aiTextureType_EMISSIVE, 0, &path) == aiReturn_SUCCESS) - { - mat.mapEnv = std::string(path.C_Str()); - } - if (assimpMaterial->GetTexture(aiTextureType_SHININESS, 0, &path) == aiReturn_SUCCESS) - { - mat.mapKs = std::string(path.C_Str()); - } - - mesh->m_materials.push_back(mat); - } - - UVInfo uvInfo; - std::vector> nodeStack; - - const aiNode* root = scene->mRootNode; - nodeStack.push_back(std::make_pair(root, root->mTransformation)); - - while (!nodeStack.empty()) - { - auto nodeAndTransform = nodeStack.back(); - const aiNode* node = nodeAndTransform.first; - aiMatrix4x4 xform = nodeAndTransform.second; - - nodeStack.pop_back(); - - addAssimpNodeToMesh(scene, node, xform, uvInfo, mesh); - - for (unsigned int c = 0; c < node->mNumChildren; ++c) - { - const aiNode* child = node->mChildren[c]; - nodeStack.push_back(std::make_pair(child, xform * child->mTransformation)); - } - } - - return mesh; -} - -Mesh* ImportMesh(const char* path) -{ - std::string ext = GetExtension(path); - - Mesh* mesh = nullptr; - - if (ext == "ply") - mesh = ImportMeshFromPly(path); - else if (ext == "obj") - mesh = ImportMeshFromObj(path); - else if (ext == "stl") - mesh = ImportMeshFromStl(path); - - return mesh; -} - -Mesh* ImportMeshFromBin(const char* path) -{ - // double start = GetSeconds(); - - FILE* f = fopen(path, "rb"); - - if (f) - { - int numVertices; - int numIndices; - - size_t len; - len = fread(&numVertices, sizeof(numVertices), 1, f); - len = fread(&numIndices, sizeof(numIndices), 1, f); - - Mesh* m = new Mesh(); - m->m_positions.resize(numVertices); - m->m_normals.resize(numVertices); - m->m_indices.resize(numIndices); - - len = fread(&m->m_positions[0], sizeof(Vec3) * numVertices, 1, f); - len = fread(&m->m_normals[0], sizeof(Vec3) * numVertices, 1, f); - len = fread(&m->m_indices[0], sizeof(int) * numIndices, 1, f); - - (void)len; - - fclose(f); - - // double end = GetSeconds(); - - // printf("Imported mesh %s in %f ms\n", path, (end - start) * 1000.0f); - - return m; - } - - return nullptr; -} - -void ExportMeshToBin(const char* path, const Mesh* m) -{ - FILE* f = fopen(path, "wb"); - - if (f) - { - int numVertices = int(m->m_positions.size()); - int numIndices = int(m->m_indices.size()); - - fwrite(&numVertices, sizeof(numVertices), 1, f); - fwrite(&numIndices, sizeof(numIndices), 1, f); - - // write data blocks - fwrite(&m->m_positions[0], sizeof(Vec3) * numVertices, 1, f); - fwrite(&m->m_normals[0], sizeof(Vec3) * numVertices, 1, f); - fwrite(&m->m_indices[0], sizeof(int) * numIndices, 1, f); - - fclose(f); - } -} - -Mesh* ImportMeshFromPly(const char* path) -{ - ifstream file(path, ios_base::in | ios_base::binary); - - if (!file) - return nullptr; - - // some scratch memory - const uint32_t kMaxLineLength = 1024; - char buffer[kMaxLineLength]; - - // double startTime = GetSeconds(); - - file >> buffer; - if (strcmp(buffer, "ply") != 0) - return nullptr; - - PlyFormat format = eAscii; - - uint32_t numFaces = 0; - uint32_t numVertices = 0; - - const uint32_t kMaxProperties = 16; - uint32_t numProperties = 0; - float properties[kMaxProperties]; - - bool vertexElement = false; - - while (file) - { - file >> buffer; - - if (strcmp(buffer, "element") == 0) - { - file >> buffer; - - if (strcmp(buffer, "face") == 0) - { - vertexElement = false; - file >> numFaces; - } - - else if (strcmp(buffer, "vertex") == 0) - { - vertexElement = true; - file >> numVertices; - } - } - else if (strcmp(buffer, "format") == 0) - { - file >> buffer; - if (strcmp(buffer, "ascii") == 0) - { - format = eAscii; - } - else if (strcmp(buffer, "binary_big_endian") == 0) - { - format = eBinaryBigEndian; - } - else - { - printf("Ply: unknown format\n"); - return nullptr; - } - } - else if (strcmp(buffer, "property") == 0) - { - if (vertexElement) - ++numProperties; - } - else if (strcmp(buffer, "end_header") == 0) - { - break; - } - } - - // eat newline - char nl; - file.read(&nl, 1); - - // debug -#if ENABLE_VERBOSE_OUTPUT - printf( - "Loaded mesh: %s numFaces: %d numVertices: %d format: %d " - "numProperties: %d\n", - path, numFaces, numVertices, format, numProperties); -#endif - - Mesh* mesh = new Mesh; - - mesh->m_positions.resize(numVertices); - mesh->m_normals.resize(numVertices); - mesh->m_colours.resize(numVertices, Colour(1.0f, 1.0f, 1.0f, 1.0f)); - - mesh->m_indices.reserve(numFaces * 3); - - // read vertices - for (uint32_t v = 0; v < numVertices; ++v) - { - for (uint32_t i = 0; i < numProperties; ++i) - { - properties[i] = PlyRead(file, format); - } - - mesh->m_positions[v] = Point3(properties[0], properties[1], properties[2]); - mesh->m_normals[v] = Vector3(0.0f, 0.0f, 0.0f); - } - - // read indices - for (uint32_t f = 0; f < numFaces; ++f) - { - uint32_t numIndices = (format == eAscii) ? PlyRead(file, format) : PlyRead(file, format); - uint32_t indices[4]; - - for (uint32_t i = 0; i < numIndices; ++i) - { - indices[i] = PlyRead(file, format); - } - - switch (numIndices) - { - case 3: - mesh->m_indices.push_back(indices[0]); - mesh->m_indices.push_back(indices[1]); - mesh->m_indices.push_back(indices[2]); - break; - case 4: - mesh->m_indices.push_back(indices[0]); - mesh->m_indices.push_back(indices[1]); - mesh->m_indices.push_back(indices[2]); - - mesh->m_indices.push_back(indices[2]); - mesh->m_indices.push_back(indices[3]); - mesh->m_indices.push_back(indices[0]); - break; - - default: - assert(!"invalid number of indices, only support tris and quads"); - break; - }; - - // calculate vertex normals as we go - Point3& v0 = mesh->m_positions[indices[0]]; - Point3& v1 = mesh->m_positions[indices[1]]; - Point3& v2 = mesh->m_positions[indices[2]]; - - Vector3 n = SafeNormalize(Cross(v1 - v0, v2 - v0), Vector3(0.0f, 1.0f, 0.0f)); - - for (uint32_t i = 0; i < numIndices; ++i) - { - mesh->m_normals[indices[i]] += n; - } - } - - for (uint32_t i = 0; i < numVertices; ++i) - { - mesh->m_normals[i] = SafeNormalize(mesh->m_normals[i], Vector3(0.0f, 1.0f, 0.0f)); - } - - // cout << "Imported mesh " << path << " in " << - // (GetSeconds()-startTime)*1000.f << "ms" << endl; - - return mesh; -} - -// map of Material name to Material -struct VertexKey -{ - VertexKey() : v(0), vt(0), vn(0) - { - } - - uint32_t v, vt, vn; - - bool operator==(const VertexKey& rhs) const - { - return v == rhs.v && vt == rhs.vt && vn == rhs.vn; - } - - bool operator<(const VertexKey& rhs) const - { - if (v != rhs.v) - return v < rhs.v; - else if (vt != rhs.vt) - return vt < rhs.vt; - else - return vn < rhs.vn; - } -}; - -void ImportFromMtlLib(const char* path, std::vector& materials) -{ - FILE* f = fopen(path, "r"); - - const int kMaxLineLength = 1024; - - if (f) - { - char line[kMaxLineLength]; - - while (fgets(line, kMaxLineLength, f)) - { - char name[kMaxLineLength]; - - if (sscanf(line, " newmtl %s", name) == 1) - { - Material mat; - mat.name = name; - - materials.push_back(mat); - } - - if (materials.size()) - { - Material& mat = materials.back(); - - sscanf(line, " Ka %f %f %f", &mat.Ka.x, &mat.Ka.y, &mat.Ka.z); - sscanf(line, " Kd %f %f %f", &mat.Kd.x, &mat.Kd.y, &mat.Kd.z); - sscanf(line, " Ks %f %f %f", &mat.Ks.x, &mat.Ks.y, &mat.Ks.z); - sscanf(line, " Ns %f", &mat.Ns); - sscanf(line, " metallic %f", &mat.metallic); - - char map[kMaxLineLength]; - if (sscanf(line, " map_Kd %s", map) == 1) - mat.mapKd = map; - - if (sscanf(line, " map_Ks %s", map) == 1) - mat.mapKs = map; - - if (sscanf(line, " map_bump %s", map) == 1) - mat.mapBump = map; - - if (sscanf(line, " map_env %s", map) == 1) - mat.mapEnv = map; - } - } - - fclose(f); - } -} - -Mesh* ImportMeshFromObj(const char* meshPath) -{ - ifstream file(meshPath); - - if (!file) - return nullptr; - - Mesh* m = new Mesh(); - - vector positions; - vector normals; - vector texcoords; - vector colors; - vector& indices = m->m_indices; - - // typedef unordered_map > - // VertexMap; - typedef map VertexMap; - VertexMap vertexLookup; - - // some scratch memory - const uint32_t kMaxLineLength = 1024; - char buffer[kMaxLineLength]; - - // double startTime = GetSeconds(); - - file >> buffer; - while (!file.eof()) - { - if (strcmp(buffer, "vn") == 0) - { - // normals - float x, y, z; - file >> x >> y >> z; - - normals.push_back(Vector3(x, y, z)); - } - else if (strcmp(buffer, "vt") == 0) - { - // texture coords - float u, v; - file >> u >> v; - - texcoords.push_back(Vector2(u, v)); - } - else if (buffer[0] == 'v') - { - // positions - float x, y, z; - file >> x >> y >> z; - - positions.push_back(Point3(x, y, z)); - } - else if (buffer[0] == 's' || buffer[0] == 'g' || buffer[0] == 'o') - { - // ignore smoothing groups, groups and objects - char linebuf[256]; - file.getline(linebuf, 256); - } - else if (strcmp(buffer, "mtllib") == 0) - { - std::string materialFile; - file >> materialFile; - - char materialPath[2048]; - MakeRelativePath(meshPath, materialFile.c_str(), materialPath); - - ImportFromMtlLib(materialPath, m->m_materials); - } - else if (strcmp(buffer, "usemtl") == 0) - { - // read Material name, ignored right now - std::string materialName; - file >> materialName; - - // if there was a previous assignment then close it - if (m->m_materialAssignments.size()) - m->m_materialAssignments.back().endTri = int(indices.size() / 3); - - // generate assignment - MaterialAssignment batch; - batch.startTri = int(indices.size() / 3); - batch.material = -1; - - for (int i = 0; i < (int)m->m_materials.size(); ++i) - { - if (m->m_materials[i].name == materialName) - { - batch.material = i; - break; - } - } - - if (batch.material == -1) - printf(".obj references material not found in .mtl library, %s\n", materialName.c_str()); - else - { - // push back assignment - m->m_materialAssignments.push_back(batch); - } - } - else if (buffer[0] == 'f') - { - // faces - uint32_t faceIndices[4]; - uint32_t faceIndexCount = 0; - - for (int i = 0; i < 4; ++i) - { - VertexKey key; - file >> key.v; - - // failed to read another index continue on - if (file.fail()) - { - file.clear(); - break; - } - - if (file.peek() == '/') - { - file.ignore(); - - if (file.peek() != '/') - { - file >> key.vt; - } - - if (file.peek() == '/') - { - file.ignore(); - file >> key.vn; - } - } - - // find / add vertex, index - VertexMap::iterator iter = vertexLookup.find(key); - - if (iter != vertexLookup.end()) - { - faceIndices[faceIndexCount++] = iter->second; - } - else - { - // add vertex - uint32_t newIndex = uint32_t(m->m_positions.size()); - faceIndices[faceIndexCount++] = newIndex; - - vertexLookup.insert(make_pair(key, newIndex)); - - // push back vertex data - assert(key.v > 0); - - m->m_positions.push_back(positions[key.v - 1]); - - // obj format doesn't support mesh colours so add default value - m->m_colours.push_back(Colour(1.0f, 1.0f, 1.0f)); - - // normal - if (key.vn) - { - m->m_normals.push_back(normals[key.vn - 1]); - } - else - { - m->m_normals.push_back(0.0f); - } - - // texcoord - if (key.vt) - { - m->m_texcoords.push_back(texcoords[key.vt - 1]); - } - else - { - m->m_texcoords.push_back(0.0f); - } - } - } - - if (faceIndexCount < 3) - { - cout << "File contains face(s) with less than 3 vertices" << endl; - } - else if (faceIndexCount == 3) - { - // a triangle - indices.insert(indices.end(), faceIndices, faceIndices + 3); - } - else if (faceIndexCount == 4) - { - // a quad, triangulate clockwise - indices.insert(indices.end(), faceIndices, faceIndices + 3); - - indices.push_back(faceIndices[2]); - indices.push_back(faceIndices[3]); - indices.push_back(faceIndices[0]); - } - else - { - cout << "Face with more than 4 vertices are not supported" << endl; - } - } - else if (buffer[0] == '#') - { - // comment - char linebuf[256]; - file.getline(linebuf, 256); - } - - file >> buffer; - } - - // calculate normals if none specified in file - m->m_normals.resize(m->m_positions.size()); - - const uint32_t numFaces = uint32_t(indices.size()) / 3; - for (uint32_t i = 0; i < numFaces; ++i) - { - uint32_t a = indices[i * 3 + 0]; - uint32_t b = indices[i * 3 + 1]; - uint32_t c = indices[i * 3 + 2]; - - Point3& v0 = m->m_positions[a]; - Point3& v1 = m->m_positions[b]; - Point3& v2 = m->m_positions[c]; - - Vector3 n = SafeNormalize(Cross(v1 - v0, v2 - v0), Vector3(0.0f, 1.0f, 0.0f)); - - m->m_normals[a] += n; - m->m_normals[b] += n; - m->m_normals[c] += n; - } - - for (uint32_t i = 0; i < m->m_normals.size(); ++i) - { - m->m_normals[i] = SafeNormalize(m->m_normals[i], Vector3(0.0f, 1.0f, 0.0f)); - } - - // close final material assignment - if (m->m_materialAssignments.size()) - m->m_materialAssignments.back().endTri = int(indices.size()) / 3; - - // cout << "Imported mesh " << meshPath << " in " << - // (GetSeconds()-startTime)*1000.f << "ms" << endl; - - return m; -} - -void ExportToObj(const char* path, const Mesh& m) -{ - ofstream file(path); - - if (!file) - return; - - file << "# positions" << endl; - - for (uint32_t i = 0; i < m.m_positions.size(); ++i) - { - Point3 v = m.m_positions[i]; - file << "v " << v.x << " " << v.y << " " << v.z << endl; - } - - file << "# texcoords" << endl; - - for (uint32_t i = 0; i < m.m_texcoords.size(); ++i) - { - Vec2 t = m.m_texcoords[0][i]; - file << "vt " << t.x << " " << t.y << endl; - } - - file << "# normals" << endl; - - for (uint32_t i = 0; i < m.m_normals.size(); ++i) - { - Vec3 n = m.m_normals[0][i]; - file << "vn " << n.x << " " << n.y << " " << n.z << endl; - } - - file << "# faces" << endl; - - for (uint32_t i = 0; i < m.m_indices.size() / 3; ++i) - { - // uint32_t j = i+1; - - // no sharing, assumes there is a unique position, texcoord and normal for - // each vertex - file << "f " << m.m_indices[i * 3] + 1 << " " << m.m_indices[i * 3 + 1] + 1 << " " << m.m_indices[i * 3 + 2] + 1 - << endl; - } -} - -Mesh* ImportMeshFromStl(const char* path) -{ - // double start = GetSeconds(); - - FILE* f = fopen(path, "rb"); - - if (f) - { - - char header[80]; - fread(header, 80, 1, f); - - int numTriangles; - fread(&numTriangles, sizeof(int), 1, f); - - Mesh* m = new Mesh(); - m->m_positions.resize(numTriangles * 3); - m->m_normals.resize(numTriangles * 3); - m->m_indices.resize(numTriangles * 3); - - Point3* vertexPtr = m->m_positions.data(); - Vector3* normalPtr = m->m_normals.data(); - uint32_t* indexPtr = m->m_indices.data(); - - for (int t = 0; t < numTriangles; ++t) - { - Vector3 n; - Point3 v0, v1, v2; - uint16_t attributeByteCount; - - fread(&n, sizeof(Vector3), 1, f); - fread(&v0, sizeof(Point3), 1, f); - fread(&v1, sizeof(Point3), 1, f); - fread(&v2, sizeof(Point3), 1, f); - fread(&attributeByteCount, sizeof(uint16_t), 1, f); - - *(normalPtr++) = n; - *(normalPtr++) = n; - *(normalPtr++) = n; - *(vertexPtr++) = v0; - *(vertexPtr++) = v1; - *(vertexPtr++) = v2; - *(indexPtr++) = t * 3 + 0; - *(indexPtr++) = t * 3 + 1; - *(indexPtr++) = t * 3 + 2; - } - - fclose(f); - - // double end = GetSeconds(); - - // printf("Imported mesh %s in %f ms\n", path, (end - start) * 1000.0f); - - return m; - } - - return nullptr; -} - -void Mesh::AddMesh(const Mesh& m) -{ - uint32_t offset = uint32_t(m_positions.size()); - - // add new vertices - m_positions.insert(m_positions.end(), m.m_positions.begin(), m.m_positions.end()); - m_normals.insert(m_normals.end(), m.m_normals.begin(), m.m_normals.end()); - m_colours.insert(m_colours.end(), m.m_colours.begin(), m.m_colours.end()); - - // add new indices with offset - for (uint32_t i = 0; i < m.m_indices.size(); ++i) - { - m_indices.push_back(m.m_indices[i] + offset); - } -} - -void Mesh::Flip() -{ - for (int i = 0; i < int(GetNumFaces()); ++i) - { - swap(m_indices[i * 3 + 0], m_indices[i * 3 + 1]); - } - - for (int i = 0; i < (int)m_normals.size(); ++i) - m_normals[i] *= -1.0f; -} - -void Mesh::Transform(const Matrix44& m) -{ - for (uint32_t i = 0; i < m_positions.size(); ++i) - { - m_positions[i] = m * m_positions[i]; - m_normals[i] = m * m_normals[i]; - } -} - -void Mesh::GetBounds(Vector3& outMinExtents, Vector3& outMaxExtents) const -{ - Point3 minExtents(FLT_MAX); - Point3 maxExtents(-FLT_MAX); - - // calculate face bounds - for (uint32_t i = 0; i < m_positions.size(); ++i) - { - const Point3& a = m_positions[i]; - - minExtents = Min(a, minExtents); - maxExtents = Max(a, maxExtents); - } - - outMinExtents = Vector3(minExtents); - outMaxExtents = Vector3(maxExtents); -} - -Mesh* CreateTriMesh(float size, float y) -{ - uint32_t indices[] = { 0, 1, 2 }; - Point3 positions[3]; - Vector3 normals[3]; - - positions[0] = Point3(-size, y, size); - positions[1] = Point3(size, y, size); - positions[2] = Point3(size, y, -size); - - normals[0] = Vector3(0.0f, 1.0f, 0.0f); - normals[1] = Vector3(0.0f, 1.0f, 0.0f); - normals[2] = Vector3(0.0f, 1.0f, 0.0f); - - Mesh* m = new Mesh(); - m->m_indices.insert(m->m_indices.begin(), indices, indices + 3); - m->m_positions.insert(m->m_positions.begin(), positions, positions + 3); - m->m_normals.insert(m->m_normals.begin(), normals, normals + 3); - - return m; -} - -Mesh* CreateCubeMesh() -{ - const Point3 vertices[24] = { Point3(0.5, 0.5, 0.5), Point3(-0.5, 0.5, 0.5), Point3(0.5, -0.5, 0.5), - Point3(-0.5, -0.5, 0.5), Point3(0.5, 0.5, -0.5), Point3(-0.5, 0.5, -0.5), - Point3(0.5, -0.5, -0.5), Point3(-0.5, -0.5, -0.5), Point3(0.5, 0.5, 0.5), - Point3(0.5, -0.5, 0.5), Point3(0.5, 0.5, 0.5), Point3(0.5, 0.5, -0.5), - Point3(-0.5, 0.5, 0.5), Point3(-0.5, 0.5, -0.5), Point3(0.5, -0.5, -0.5), - Point3(0.5, 0.5, -0.5), Point3(-0.5, -0.5, -0.5), Point3(0.5, -0.5, -0.5), - Point3(-0.5, -0.5, 0.5), Point3(0.5, -0.5, 0.5), Point3(-0.5, -0.5, -0.5), - Point3(-0.5, -0.5, 0.5), Point3(-0.5, 0.5, -0.5), Point3(-0.5, 0.5, 0.5) }; - - const Vec3 normals[24] = { Vec3(0.0f, 0.0f, 1.0f), Vec3(0.0f, 0.0f, 1.0f), Vec3(0.0f, 0.0f, 1.0f), - Vec3(0.0f, 0.0f, 1.0f), Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), - Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f), - Vec3(1.0f, 0.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), Vec3(0.0f, 1.0f, 0.0f), - Vec3(0.0f, 1.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(0.0f, 0.0f, -1.0f), - Vec3(-0.0f, -0.0f, -1.0f), Vec3(0.0f, -1.0f, 0.0f), Vec3(0.0f, -1.0f, 0.0f), - Vec3(0.0f, -1.0f, 0.0f), Vec3(-0.0f, -1.0f, -0.0f), Vec3(-1.0f, 0.0f, 0.0f), - Vec3(-1.0f, 0.0f, 0.0f), Vec3(-1.0f, 0.0f, 0.0f), Vec3(-1.0f, -0.0f, -0.0f) }; - - const int indices[36] = { 0, 1, 2, 3, 2, 1, 8, 9, 4, 6, 4, 9, 10, 11, 12, 5, 12, 11, - 7, 13, 14, 15, 14, 13, 16, 17, 18, 19, 18, 17, 20, 21, 22, 23, 22, 21 }; - - Mesh* m = new Mesh(); - m->m_positions.assign(vertices, vertices + 24); - m->m_normals.assign(normals, normals + 24); - m->m_indices.assign(indices, indices + 36); - - return m; -} - -Mesh* CreateQuadMesh(float sizex, float sizez, int gridx, int gridz) -{ - Mesh* m = new Mesh(); - - float cellx = sizex / gridz; - float cellz = sizez / gridz; - - Vec3 start = Vec3(-sizex, 0.0f, sizez) * 0.5f; - - for (int z = 0; z <= gridz; ++z) - { - for (int x = 0; x <= gridx; ++x) - { - Point3 p = Point3(cellx * x, 0.0f, -cellz * z) + start; - - m->m_positions.push_back(p); - m->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); - m->m_texcoords.push_back(Vec2(float(x) / gridx, float(z) / gridz)); - - if (z > 0 && x > 0) - { - int index = int(m->m_positions.size()) - 1; - - m->m_indices.push_back(index); - m->m_indices.push_back(index - 1); - m->m_indices.push_back(index - gridx - 1); - - m->m_indices.push_back(index - 1); - m->m_indices.push_back(index - 1 - gridx - 1); - m->m_indices.push_back(index - gridx - 1); - } - } - } - - return m; -} - -Mesh* CreateDiscMesh(float radius, uint32_t segments) -{ - const uint32_t numVerts = 1 + segments; - - Mesh* m = new Mesh(); - m->m_positions.resize(numVerts); - m->m_normals.resize(numVerts, Vec3(0.0f, 1.0f, 0.0f)); - - m->m_positions[0] = Point3(0.0f); - m->m_positions[1] = Point3(0.0f, 0.0f, radius); - - for (uint32_t i = 1; i <= segments; ++i) - { - uint32_t nextVert = (i + 1) % numVerts; - - if (nextVert == 0) - nextVert = 1; - - m->m_positions[nextVert] = - Point3(radius * Sin((float(i) / segments) * k2Pi), 0.0f, radius * Cos((float(i) / segments) * k2Pi)); - - m->m_indices.push_back(0); - m->m_indices.push_back(i); - m->m_indices.push_back(nextVert); - } - - return m; -} - -Mesh* CreateTetrahedron(float ground, float height) -{ - Mesh* m = new Mesh(); - - const float dimValue = 1.0f / sqrtf(2.0f); - const Point3 vertices[4] = { Point3(-1.0f, ground, -dimValue), Point3(1.0f, ground, -dimValue), - Point3(0.0f, ground + height, dimValue), Point3(0.0f, ground, dimValue) }; - - const int indices[12] = { // winding order is counter-clockwise - 0, 2, 1, 2, 3, 1, 2, 0, 3, 3, 0, 1 - }; - - m->m_positions.assign(vertices, vertices + 4); - m->m_indices.assign(indices, indices + 12); - - m->CalculateNormals(); - - return m; -} - -Mesh* CreateCylinder(int slices, float radius, float halfHeight, bool cap) -{ - Mesh* mesh = new Mesh(); - - for (int i = 0; i <= slices; ++i) - { - float theta = (k2Pi / slices) * i; - - Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); - Vec3 n = p; - - mesh->m_positions.push_back(Point3(p * radius - Vec3(0.0f, halfHeight, 0.0f))); - mesh->m_positions.push_back(Point3(p * radius + Vec3(0.0f, halfHeight, 0.0f))); - - mesh->m_normals.push_back(n); - mesh->m_normals.push_back(n); - - mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); - mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 1.0f)); - - if (i > 0) - { - int a = (i - 1) * 2 + 0; - int b = (i - 1) * 2 + 1; - int c = i * 2 + 0; - int d = i * 2 + 1; - - // quad between last two vertices and these two - mesh->m_indices.push_back(a); - mesh->m_indices.push_back(c); - mesh->m_indices.push_back(b); - - mesh->m_indices.push_back(c); - mesh->m_indices.push_back(d); - mesh->m_indices.push_back(b); - } - } - if (cap) - { - // Create cap - int st = int(mesh->m_positions.size()); - - mesh->m_positions.push_back(-Point3(0.0f, halfHeight, 0.0f)); - mesh->m_texcoords.push_back(Vec2(0.0f, 0.0f)); - mesh->m_normals.push_back(-Vec3(0.0f, 1.0f, 0.0f)); - for (int i = 0; i <= slices; ++i) - { - float theta = -(k2Pi / slices) * i; - - Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); - mesh->m_positions.push_back(Point3(p * radius - Vec3(0.0f, halfHeight, 0.0f))); - mesh->m_normals.push_back(-Vec3(0.0f, 1.0f, 0.0f)); - mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); - if (i > 0) - { - mesh->m_indices.push_back(st); - mesh->m_indices.push_back(st + 1 + i - 1); - mesh->m_indices.push_back(st + 1 + i % slices); - } - } - - st = int(mesh->m_positions.size()); - mesh->m_positions.push_back(Point3(0.0f, halfHeight, 0.0f)); - mesh->m_texcoords.push_back(Vec2(0.0f, 0.0f)); - mesh->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); - for (int i = 0; i <= slices; ++i) - { - float theta = (k2Pi / slices) * i; - - Vec3 p = Vec3(sinf(theta), 0.0f, cosf(theta)); - mesh->m_positions.push_back(Point3(p * radius + Vec3(0.0f, halfHeight, 0.0f))); - mesh->m_normals.push_back(Vec3(0.0f, 1.0f, 0.0f)); - mesh->m_texcoords.push_back(Vec2(2.0f * float(i) / slices, 0.0f)); - - if (i > 0) - { - mesh->m_indices.push_back(st); - mesh->m_indices.push_back(st + 1 + i - 1); - mesh->m_indices.push_back(st + 1 + i % slices); - } - } - } - return mesh; -} - -Mesh* CreateSphere(int slices, int segments, float radius) -{ - float dTheta = kPi / slices; - float dPhi = k2Pi / segments; - - int vertsPerRow = segments + 1; - - Mesh* mesh = new Mesh(); - - for (int i = 0; i <= slices; ++i) - { - for (int j = 0; j <= segments; ++j) - { - float u = float(i) / slices; - float v = float(j) / segments; - - float theta = dTheta * i; - float phi = dPhi * j; - - float x = sinf(theta) * cosf(phi); - float y = cosf(theta); - float z = sinf(theta) * sinf(phi); - - mesh->m_positions.push_back(Point3(x, y, z) * radius); - mesh->m_normals.push_back(Vec3(x, y, z)); - mesh->m_texcoords.push_back(Vec2(u, v)); - - if (i > 0 && j > 0) - { - int a = i * vertsPerRow + j; - int b = (i - 1) * vertsPerRow + j; - int c = (i - 1) * vertsPerRow + j - 1; - int d = i * vertsPerRow + j - 1; - - // add a quad for this slice - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(a); - mesh->m_indices.push_back(d); - - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(d); - mesh->m_indices.push_back(c); - } - } - } - - return mesh; -} - -Mesh* CreateEllipsoid(int slices, int segments, Vec3 radiis) -{ - float dTheta = kPi / slices; - float dPhi = k2Pi / segments; - - int vertsPerRow = segments + 1; - - Mesh* mesh = new Mesh(); - - for (int i = 0; i <= slices; ++i) - { - for (int j = 0; j <= segments; ++j) - { - float u = float(i) / slices; - float v = float(j) / segments; - - float theta = dTheta * i; - float phi = dPhi * j; - - float x = sinf(theta) * cosf(phi); - float y = cosf(theta); - float z = sinf(theta) * sinf(phi); - - mesh->m_positions.push_back(Point3(x * radiis.x, y * radiis.y, z * radiis.z)); - mesh->m_normals.push_back(Normalize(Vec3(x / radiis.x, y / radiis.y, z / radiis.z))); - mesh->m_texcoords.push_back(Vec2(u, v)); - - if (i > 0 && j > 0) - { - int a = i * vertsPerRow + j; - int b = (i - 1) * vertsPerRow + j; - int c = (i - 1) * vertsPerRow + j - 1; - int d = i * vertsPerRow + j - 1; - - // add a quad for this slice - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(a); - mesh->m_indices.push_back(d); - - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(d); - mesh->m_indices.push_back(c); - } - } - } - - return mesh; -} -Mesh* CreateCapsule(int slices, int segments, float radius, float halfHeight) -{ - float dTheta = kPi / (slices * 2); - float dPhi = k2Pi / segments; - - int vertsPerRow = segments + 1; - - Mesh* mesh = new Mesh(); - - float theta = 0.0f; - - for (int i = 0; i <= 2 * slices + 1; ++i) - { - for (int j = 0; j <= segments; ++j) - { - float phi = dPhi * j; - - float x = sinf(theta) * cosf(phi); - float y = cosf(theta); - float z = sinf(theta) * sinf(phi); - - // add y offset based on which hemisphere we're in - float yoffset = (i < slices) ? halfHeight : -halfHeight; - - Point3 p = Point3(x, y, z) * radius + Vec3(0.0f, yoffset, 0.0f); - - float u = float(j) / segments; - float v = (halfHeight + radius + float(p.y)) / fabsf(halfHeight + radius); - - mesh->m_positions.push_back(p); - mesh->m_normals.push_back(Vec3(x, y, z)); - mesh->m_texcoords.push_back(Vec2(u, v)); - - if (i > 0 && j > 0) - { - int a = i * vertsPerRow + j; - int b = (i - 1) * vertsPerRow + j; - int c = (i - 1) * vertsPerRow + j - 1; - int d = i * vertsPerRow + j - 1; - - // add a quad for this slice - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(a); - mesh->m_indices.push_back(d); - - mesh->m_indices.push_back(b); - mesh->m_indices.push_back(d); - mesh->m_indices.push_back(c); - } - } - - // don't update theta for the middle slice - if (i != slices) - theta += dTheta; - } - - return mesh; -} diff --git a/source/extensions/omni.importer.mjcf/plugins/utils/Path.h b/source/extensions/omni.importer.mjcf/plugins/utils/Path.h deleted file mode 100644 index de8fac3..0000000 --- a/source/extensions/omni.importer.mjcf/plugins/utils/Path.h +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -// clang-format off -#include "../UsdPCH.h" -// clang-format on - -#include - -#include -#include - -namespace omni -{ -namespace isaac -{ -namespace utils -{ -namespace path -{ - -inline std::string normalizeUrl(const char* url) -{ - std::string ret; - char stringBuffer[1024]; - std::unique_ptr stringBufferHeap; - size_t bufferSize = sizeof(stringBuffer); - const char* normalizedUrl = omniClientNormalizeUrl(url, stringBuffer, &bufferSize); - if (!normalizedUrl) - { - stringBufferHeap = std::unique_ptr(new char[bufferSize]); - normalizedUrl = omniClientNormalizeUrl(url, stringBufferHeap.get(), &bufferSize); - if (!normalizedUrl) - { - normalizedUrl = ""; - CARB_LOG_ERROR("Cannot normalize %s", url); - } - } - - ret = normalizedUrl; - for (auto& c : ret) - { - if (c == '\\') - { - c = '/'; - } - } - return ret; -} - -std::string resolve_absolute(std::string parent, std::string relative) -{ - size_t bufferSize = parent.size() + relative.size(); - std::unique_ptr stringBuffer = std::unique_ptr(new char[bufferSize]); - std::string combined_url = normalizeUrl((parent + "/" + relative).c_str()); - return combined_url; -} - -} // namespace path -} // namespace utils -} // namespace isaac -} // namespace omni diff --git a/source/extensions/omni.importer.mjcf/premake5.lua b/source/extensions/omni.importer.mjcf/premake5.lua deleted file mode 100644 index 3979124..0000000 --- a/source/extensions/omni.importer.mjcf/premake5.lua +++ /dev/null @@ -1,140 +0,0 @@ -function include_physx() - - defines { "PX_PHYSX_STATIC_LIB"} - - filter { "system:windows" } - libdirs { "%{root}/_build/target-deps/nvtx/lib/x64" } - filter {} - filter { "system:linux" } - libdirs { "%{root}/_build/target-deps/nvtx/lib64" } - filter {} - - filter { "configurations:debug" } - defines { "_DEBUG" } - filter { "configurations:release" } - defines { "NDEBUG" } - filter {} - - filter { "system:windows", "platforms:x86_64", "configurations:debug" } - libdirs { - "%{root}/_build/target-deps/physx/bin/win.x86_64.vc142.md/debug", - } - filter { "system:windows", "platforms:x86_64", "configurations:release" } - libdirs { - "%{root}/_build/target-deps/physx/bin/win.x86_64.vc142.md/checked", - } - filter {} - - filter { "system:linux", "platforms:x86_64","configurations:debug" } - libdirs { - "%{root}/_build/target-deps/physx/bin/linux.clang/debug", - } - filter { "system:linux", "platforms:x86_64","configurations:release" } - libdirs { - "%{root}/_build/target-deps/physx/bin/linux.clang/checked", - } - filter {} - - links { "PhysXExtensions_static_64", "PhysX_static_64", "PhysXPvdSDK_static_64","PhysXCooking_static_64","PhysXCommon_static_64", "PhysXFoundation_static_64", "PhysXVehicle_static_64"} - - includedirs { - "%{root}/_build/target-deps/physx/include", - "%{root}/_build/target-deps/usd_ext_physics/%{cfg.buildcfg}/include", - } - -end - - -local ext = get_current_extension_info() -project_ext (ext) - --- C++ Carbonite plugin -project_ext_plugin(ext, "omni.importer.mjcf.plugin") - symbols "On" - exceptionhandling "On" - rtti "On" - staticruntime "On" - - flags { "FatalCompileWarnings", "MultiProcessorCompile", "NoPCH", "NoIncrementalLink" } - removeflags { "FatalCompileWarnings", "UndefinedIdentifiers" } - - add_files("impl", "plugins") - - include_physx() - includedirs { - "%{root}/_build/target-deps/pybind11/include", - "%{root}/_build/target-deps/nv_usd/%{cfg.buildcfg}/include", - "%{root}/_build/target-deps/usd_ext_physics/%{cfg.buildcfg}/include", - "%{root}/_build/target-deps/assimp/include", - "%{root}/_build/target-deps/python/include", - "%{root}/_build/target-deps/tinyxml2/include", - "%{root}/_build/target-deps/omni_client_library/include", - } - - libdirs { - "%{root}/_build/target-deps/nv_usd/%{cfg.buildcfg}/lib", - "%{root}/_build/target-deps/usd_ext_physics/%{cfg.buildcfg}/lib", - "%{root}/_build/target-deps/tinyxml2/lib", - "%{root}/_build/target-deps/assimp/lib64", - "%{root}/_build/target-deps/omni_client_library/%{cfg.buildcfg}", - "%{kit_sdk_bin_dir}/exts/omni.usd.core/bin" - } - - links { - "gf", "tf", "sdf", "vt","usd", "usdGeom", "usdUtils", "usdShade", "usdImaging", - "usdPhysics", "physicsSchemaTools", "physxSchema", "omni.usd", "tinyxml2", "assimp", "tbb", "omniclient" - } - - if os.target() == "linux" then - includedirs { - "%{root}/_build/target-deps/nv_usd/%{cfg.buildcfg}/include/boost", - "%{root}/_build/target-deps/python/include/python3.10", - } - libdirs { - "%{root}/_build/target-deps/assimp/lib64", - } - links { - "stdc++fs" - } - else - filter { "system:windows", "platforms:x86_64" } - link_boost_for_windows({"boost_python310"}) - filter {} - libdirs { - "%{root}/_build/target-deps/tbb/lib/intel64/vc14", - "%{root}/_build/target-deps/assimp/lib", - } - end - --- Python Bindings for Carobnite Plugin -project_ext_bindings { - ext = ext, - project_name = "omni.importer.mjcf.python", - module = "_mjcf", - src = "bindings", - target_subdir = "omni/importer/mjcf" -} - -repo_build.prebuild_link { - { "python/scripts", ext.target_dir.."/omni/importer/mjcf/scripts" }, - { "python/tests", ext.target_dir.."/omni/importer/mjcf/tests" }, - { "docs", ext.target_dir.."/docs" }, - { "data", ext.target_dir.."/data" }, -} - -if os.target() == "linux" then - repo_build.prebuild_copy { - { "%{root}/_build/target-deps/assimp/lib64/lib**", ext.target_dir.."/bin" }, - { "%{root}/_build/target-deps/tinyxml2/lib/lib**", ext.target_dir.."/bin" }, - } -else - repo_build.prebuild_copy { - { "%{root}/_build/target-deps/assimp/bin/*.dll", ext.target_dir.."/bin" }, - { "%{root}/_build/target-deps/tinyxml2/bin/*.dll", ext.target_dir.."/bin" }, - } -end - -repo_build.prebuild_copy { - - { "python/*.py", ext.target_dir.."/omni/importer/mjcf" }, -} diff --git a/source/extensions/omni.importer.mjcf/python/scripts/extension.py b/source/extensions/omni.importer.mjcf/python/scripts/extension.py deleted file mode 100644 index 98c283b..0000000 --- a/source/extensions/omni.importer.mjcf/python/scripts/extension.py +++ /dev/null @@ -1,380 +0,0 @@ -# Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. -# - -import asyncio -import gc -import os -import weakref - -import carb -import omni.client -import omni.ext -import omni.ui as ui -from omni.client._omniclient import Result -from omni.importer.mjcf import _mjcf -from omni.kit.menu.utils import MenuItemDescription, add_menu_items, remove_menu_items -from omni.kit.viewport.utility import get_active_viewport -from omni.kit.window.filepicker import FilePickerDialog -from pxr import Sdf, Usd, UsdGeom, UsdPhysics - -# from omni.isaac.ui.menu import make_menu_item_description -from .ui_utils import ( - btn_builder, - cb_builder, - dropdown_builder, - float_builder, - str_builder, -) - -EXTENSION_NAME = "MJCF Importer" - -import omni.ext -from omni.kit.menu.utils import MenuItemDescription - - -def make_menu_item_description(ext_id: str, name: str, onclick_fun, action_name: str = "") -> None: - """Easily replace the onclick_fn with onclick_action when creating a menu description - - Args: - ext_id (str): The extension you are adding the menu item to. - name (str): Name of the menu item displayed in UI. - onclick_fun (Function): The function to run when clicking the menu item. - action_name (str): name for the action, in case ext_id+name don't make a unique string - - Note: - ext_id + name + action_name must concatenate to a unique identifier. - - """ - # TODO, fix errors when reloading extensions - # action_unique = f'{ext_id.replace(" ", "_")}{name.replace(" ", "_")}{action_name.replace(" ", "_")}' - # action_registry = omni.kit.actions.core.get_action_registry() - # action_registry.register_action(ext_id, action_unique, onclick_fun) - return MenuItemDescription(name=name, onclick_fn=onclick_fun) - - -def is_mjcf_file(path: str): - _, ext = os.path.splitext(path.lower()) - return ext == ".xml" - - -def on_filter_item(item) -> bool: - if not item or item.is_folder: - return not (item.name == "Omniverse" or item.path.startswith("omniverse:")) - return is_mjcf_file(item.path) - - -class Extension(omni.ext.IExt): - def on_startup(self, ext_id): - - self._mjcf_interface = _mjcf.acquire_mjcf_interface() - self._usd_context = omni.usd.get_context() - self._window = omni.ui.Window( - EXTENSION_NAME, width=600, height=400, visible=False, dockPreference=ui.DockPreference.LEFT_BOTTOM - ) - self._window.deferred_dock_in("Console", omni.ui.DockPolicy.DO_NOTHING) - self._window.set_visibility_changed_fn(self._on_window) - menu_items = [ - make_menu_item_description(ext_id, EXTENSION_NAME, lambda a=weakref.proxy(self): a._menu_callback()) - ] - self._menu_items = [MenuItemDescription(name="Workflows", sub_menu=menu_items)] - add_menu_items(self._menu_items, "Isaac Utils") - - self._models = {} - result, self._config = omni.kit.commands.execute("MJCFCreateImportConfig") - self._filepicker = None - self._last_folder = None - self._content_browser = None - self._extension_path = omni.kit.app.get_app().get_extension_manager().get_extension_path(ext_id) - self._imported_robot = None - - # Set defaults - # self._config.set_merge_fixed_joints(False) - # self._config.set_convex_decomp(False) - self._config.set_fix_base(False) - self._config.set_import_inertia_tensor(False) - self._config.set_distance_scale(1.0) - self._config.set_density(0.0) - # self._config.set_default_drive_type(1) - # self._config.set_default_drive_strength(1e7) - # self._config.set_default_position_drive_damping(1e5) - self._config.set_self_collision(False) - self._config.set_make_default_prim(True) - self._config.set_create_physics_scene(True) - self._config.set_import_sites(True) - self._config.set_visualize_collision_geoms(True) - - def build_ui(self): - with self._window.frame: - with ui.VStack(spacing=20, height=0): - with ui.HStack(spacing=10): - with ui.VStack(spacing=2, height=0): - # cb_builder( - # label="Merge Fixed Joints", - # tooltip="Check this box to skip adding articulation on fixed joints", - # on_clicked_fn=lambda m, config=self._config: config.set_merge_fixed_joints(m), - # ) - cb_builder( - "Fix Base Link", - tooltip="If true, enables the fix base property on the root of the articulation.", - default_val=False, - on_clicked_fn=lambda m, config=self._config: config.set_fix_base(m), - ) - cb_builder( - "Import Inertia Tensor", - tooltip="If True, inertia will be loaded from mjcf, if the mjcf does not specify inertia tensor, identity will be used and scaled by the scaling factor. If false physx will compute automatically", - on_clicked_fn=lambda m, config=self._config: config.set_import_inertia_tensor(m), - ) - cb_builder( - "Import Sites", - tooltip="If True, sites will be imported from mjcf.", - default_val=True, - on_clicked_fn=lambda m, config=self._config: config.set_import_sites(m), - ) - cb_builder( - "Visualize Collision Geoms", - tooltip="If True, collision geoms will also be imported as visual geoms", - default_val=True, - on_clicked_fn=lambda m, config=self._config: config.set_visualize_collision_geoms(m), - ) - self._models["scale"] = float_builder( - "Stage Units Per Meter", - default_val=1.0, - tooltip="[1.0 / stage_units] Set the distance units the robot is imported as, default is 1.0 corresponding to m", - ) - self._models["scale"].add_value_changed_fn( - lambda m, config=self._config: config.set_distance_scale(m.get_value_as_float()) - ) - self._models["density"] = float_builder( - "Link Density", - default_val=0.0, - tooltip="[kg/stage_units^3] If a link doesn't have mass, use this density as backup, A density of 0.0 results in the physics engine automatically computing a default density", - ) - self._models["density"].add_value_changed_fn( - lambda m, config=self._config: config.set_density(m.get_value_as_float()) - ) - # dropdown_builder( - # "Joint Drive Type", - # items=["None", "Position", "Velocity"], - # default_val=1, - # on_clicked_fn=lambda i, config=self._config: i, - # #config.set_default_drive_type(0 if i == "None" else (1 if i == "Position" else 2) - # tooltip="Set the default drive configuration, None: stiffness and damping are zero, Position/Velocity: use default specified below.", - # ) - # self._models["drive_strength"] = float_builder( - # "Joint Drive Strength", - # default_val=1e7, - # tooltip="Corresponds to stiffness for position or damping for velocity, set to -1 to prevent this value from getting used", - # ) - # self._models["drive_strength"].add_value_changed_fn( - # lambda m, config=self._config: m - # # config.set_default_drive_strength(m.get_value_as_float()) - # ) - # self._models["position_drive_damping"] = float_builder( - # "Joint Position Drive Damping", - # default_val=1e5, - # tooltip="If the drive type is set to position, this will be used as a default damping for the drive, set to -1 to prevent this from getting used", - # ) - # self._models["position_drive_damping"].add_value_changed_fn( - # lambda m, config=self._config: m - # #config.set_default_position_drive_damping(m.get_value_as_float() - # ) - - with ui.VStack(spacing=2, height=0): - self._models["clean_stage"] = cb_builder( - label="Clean Stage", tooltip="Check this box to load MJCF on a clean stage" - ) - # cb_builder( - # "Convex Decomposition", - # tooltip="If true, non-convex meshes will be decomposed into convex collision shapes, if false a convex hull will be used.", - # on_clicked_fn=lambda m, config=self._config: config.set_convex_decomp(m), - # ) - cb_builder( - "Self Collision", - tooltip="If true, allows self intersection between links in the robot, can cause instability if collision meshes between links are self intersecting", - on_clicked_fn=lambda m, config=self._config: config.set_self_collision(m), - ) - cb_builder( - "Create Physics Scene", - tooltip="If true, creates a default physics scene if one does not already exist in the stage", - default_val=True, - on_clicked_fn=lambda m, config=self._config: config.set_create_physics_scene(m), - ), - cb_builder( - "Make Default Prim", - tooltip="If true, makes imported robot the default prim for the stage", - default_val=True, - on_clicked_fn=lambda m, config=self._config: config.set_make_default_prim(m), - ) - cb_builder( - "Create Instanceable Asset", - tooltip="If true, creates an instanceable version of the asset. Meshes will be saved in a separate USD file", - default_val=False, - on_clicked_fn=lambda m, config=self._config: config.set_make_instanceable(m), - ) - self._models["instanceable_usd_path"] = str_builder( - "Instanceable USD Path", - tooltip="USD file to store instanceable meshes in", - default_val="./instanceable_meshes.usd", - use_folder_picker=True, - folder_dialog_title="Select Output File", - folder_button_title="Select File", - ) - self._models["instanceable_usd_path"].add_value_changed_fn( - lambda m, config=self._config: config.set_instanceable_usd_path(m.get_value_as_string()) - ) - - with ui.VStack(height=0): - with ui.HStack(spacing=20): - btn_builder("Import MJCF", text="Select and Import", on_clicked_fn=self._parse_mjcf) - - def _menu_callback(self): - self._window.visible = not self._window.visible - - def _on_window(self, visible): - if self._window.visible: - self.build_ui() - self._events = self._usd_context.get_stage_event_stream() - else: - self._events = None - self._stage_event_sub = None - - def _refresh_filebrowser(self): - parent = None - selection_name = None - if len(self._filebrowser.get_selections()): - parent = self._filebrowser.get_selections()[0].parent - selection_name = self._filebrowser.get_selections()[0].name - - self._filebrowser.refresh_ui(parent) - if selection_name: - selection = [child for child in parent.children.values() if child.name == selection_name] - if len(selection): - self._filebrowser.select_and_center(selection[0]) - - def _parse_mjcf(self): - self._filepicker = FilePickerDialog( - "Import MJCF", - allow_multi_selection=False, - apply_button_label="Import", - click_apply_handler=lambda filename, path, c=weakref.proxy(self): c._select_picked_file_callback( - self._filepicker, filename, path - ), - click_cancel_handler=lambda a, b, c=weakref.proxy(self): c._filepicker.hide(), - item_filter_fn=on_filter_item, - enable_versioning_pane=True, - ) - if self._last_folder: - self._filepicker.set_current_directory(self._last_folder) - self._filepicker.navigate_to(self._last_folder) - self._filepicker.refresh_current_directory() - self._filepicker.toggle_bookmark_from_path("Built In MJCF Files", (self._extension_path + "/data/mjcf"), True) - self._filepicker.show() - - def _load_robot(self, path=None): - if path: - base_path = path[: path.rfind("/")] - basename = path[path.rfind("/") + 1 :] - basename = basename[: basename.rfind(".")] - if path.rfind("/") < 0: - base_path = path[: path.rfind("\\")] - basename = path[path.rfind("\\") + 1] - - # sanitize basename - if basename[0].isdigit(): - basename = "_" + basename - - full_path = os.path.abspath(os.path.join(self.root_path, self.filename)) - dest_path = "{}/{}/{}.usd".format(base_path, basename, basename) - current_stage = omni.usd.get_context().get_stage() - prim_path = omni.usd.get_stage_next_free_path(current_stage, "/" + basename, False) - - omni.kit.commands.execute( - "MJCFCreateAsset", - mjcf_path=full_path, - import_config=self._config, - prim_path=prim_path, - dest_path=dest_path, - ) - stage = Usd.Stage.Open(dest_path) - prim_name = str(stage.GetDefaultPrim().GetName()) - - def add_reference_to_stage(): - current_stage = omni.usd.get_context().get_stage() - if current_stage: - prim_path = omni.usd.get_stage_next_free_path( - current_stage, str(current_stage.GetDefaultPrim().GetPath()) + "/" + prim_name, False - ) - robot_prim = current_stage.OverridePrim(prim_path) - if "anon:" in current_stage.GetRootLayer().identifier: - robot_prim.GetReferences().AddReference(dest_path) - else: - robot_prim.GetReferences().AddReference( - omni.client.make_relative_url(current_stage.GetRootLayer().identifier, dest_path) - ) - if self._config.create_physics_scene: - UsdPhysics.Scene.Define(current_stage, Sdf.Path("/physicsScene")) - - async def import_with_clean_stage(): - await omni.usd.get_context().new_stage_async() - await omni.kit.app.get_app().next_update_async() - current_stage = omni.usd.get_context().get_stage() - UsdGeom.SetStageUpAxis(current_stage, UsdGeom.Tokens.z) - UsdGeom.SetStageMetersPerUnit(stage, 1) - add_reference_to_stage() - await omni.kit.app.get_app().next_update_async() - - if self._models["clean_stage"].get_value_as_bool(): - asyncio.ensure_future(import_with_clean_stage()) - else: - upAxis = UsdGeom.GetStageUpAxis(current_stage) - if upAxis == "Y": - carb.log_error("The stage Up-Axis must be Z to use the MJCF importer") - add_reference_to_stage() - return prim_path - - def _select_picked_file_callback(self, dialog: FilePickerDialog, filename=None, path=None): - if not path.startswith("omniverse://"): - self.root_path = path - self.filename = filename - if path and filename: - self._last_folder = path - prim_path = self._load_robot(path + "/" + filename) - task = asyncio.ensure_future(omni.kit.app.get_app().next_update_async()) - asyncio.ensure_future(task) - print("update") - viewport_api = get_active_viewport() - stage = viewport_api.stage - mpu = UsdGeom.GetStageMetersPerUnit(stage) - cam_path = viewport_api.camera_path - omni.kit.commands.execute( - "FramePrimsCommand", - prim_to_move=cam_path, - prims_to_frame=[prim_path], - aspect_ratio=1, - zoom=0.05 * (self._models["scale"].get_value_as_float()), - ) - else: - carb.log_error("path and filename not specified") - else: - carb.log_error("Only Local Paths supported") - dialog.hide() - - def on_shutdown(self): - _mjcf.release_mjcf_interface(self._mjcf_interface) - if self._filepicker: - self._filepicker.toggle_bookmark_from_path( - "Built In MJCF Files", (self._extension_path + "/data/mjcf"), False - ) - self._filepicker.destroy() - self._filepicker = None - - remove_menu_items(self._menu_items, "Isaac Utils") - if self._window: - self._window = None - gc.collect() diff --git a/tools/packman/bootstrap/configure.bat b/tools/packman/bootstrap/configure.bat old mode 100644 new mode 100755 index 13fa6ca..abf85ed --- a/tools/packman/bootstrap/configure.bat +++ b/tools/packman/bootstrap/configure.bat @@ -4,7 +4,7 @@ :: you may not use this file except in compliance with the License. :: You may obtain a copy of the License at :: -:: https://www.apache.org/licenses/LICENSE-2.0 +:: http://www.apache.org/licenses/LICENSE-2.0 :: :: Unless required by applicable law or agreed to in writing, software :: distributed under the License is distributed on an "AS IS" BASIS, @@ -12,7 +12,7 @@ :: See the License for the specific language governing permissions and :: limitations under the License. -set PM_PACKMAN_VERSION=7.6 +set PM_PACKMAN_VERSION=7.24.2 :: Specify where packman command is rooted set PM_INSTALL_PATH=%~dp0.. @@ -48,15 +48,15 @@ echo. :: that may be needed in the path :ENSURE_DIR if not exist "%PM_PACKAGES_ROOT%" ( - echo Creating packman packages cache at %PM_PACKAGES_ROOT% - mkdir "%PM_PACKAGES_ROOT%" + echo Creating packman packages cache at %PM_PACKAGES_ROOT% + mkdir "%PM_PACKAGES_ROOT%" ) if %errorlevel% neq 0 ( goto ERROR_MKDIR_PACKAGES_ROOT ) :: The Python interpreter may already be externally configured if defined PM_PYTHON_EXT ( - set PM_PYTHON=%PM_PYTHON_EXT% - goto PACKMAN + set PM_PYTHON=%PM_PYTHON_EXT% + goto PACKMAN ) set PM_PYTHON_VERSION=3.10.5-1-windows-x86_64 @@ -95,7 +95,7 @@ if exist "%PM_PYTHON%" ( if exist "%PM_PYTHON_DIR%" ( rd /s /q "%PM_PYTHON_DIR%" > nul ) ) -:: Perform atomic move (allowing ovewrite, /y) +:: Perform atomic move (allowing overwrite, /y) move /y "%TEMP_FOLDER_NAME%" "%PM_PYTHON_DIR%" 1> nul :: Verify that python.exe is now where we expect if exist "%PM_PYTHON%" goto PACKMAN @@ -112,7 +112,7 @@ if %errorlevel% neq 0 ( :PACKMAN :: The packman module may already be externally configured if defined PM_MODULE_DIR_EXT ( - set PM_MODULE_DIR=%PM_MODULE_DIR_EXT% + set PM_MODULE_DIR=%PM_MODULE_DIR_EXT% ) else ( set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman-common\%PM_PACKMAN_VERSION% ) diff --git a/tools/packman/bootstrap/download_file_from_url.ps1 b/tools/packman/bootstrap/download_file_from_url.ps1 index ba245e5..df55745 100644 --- a/tools/packman/bootstrap/download_file_from_url.ps1 +++ b/tools/packman/bootstrap/download_file_from_url.ps1 @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd b/tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd old mode 100644 new mode 100755 index a650859..bf3a88d --- a/tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd +++ b/tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd @@ -4,7 +4,7 @@ :: you may not use this file except in compliance with the License. :: You may obtain a copy of the License at :: -:: https://www.apache.org/licenses/LICENSE-2.0 +:: http://www.apache.org/licenses/LICENSE-2.0 :: :: Unless required by applicable law or agreed to in writing, software :: distributed under the License is distributed on an "AS IS" BASIS, @@ -20,7 +20,7 @@ @echo Fetching %PACKAGE_NAME% ... @powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0download_file_from_url.ps1" ^ - -source "https://bootstrap.packman.nvidia.com/%PACKAGE_NAME%" -output %TARGET_PATH% + -source "http://bootstrap.packman.nvidia.com/%PACKAGE_NAME%" -output %TARGET_PATH% :: A bug in powershell prevents the errorlevel code from being set when using the -File execution option :: We must therefore do our own failure analysis, basically make sure the file exists: @if not exist %TARGET_PATH% goto ERROR_DOWNLOAD_FAILED diff --git a/tools/packman/bootstrap/generate_temp_folder.ps1 b/tools/packman/bootstrap/generate_temp_folder.ps1 index 0e628db..d34fc9c 100644 --- a/tools/packman/bootstrap/generate_temp_folder.ps1 +++ b/tools/packman/bootstrap/generate_temp_folder.ps1 @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tools/packman/bootstrap/install_package.py b/tools/packman/bootstrap/install_package.py index 38bbc12..f223ca9 100644 --- a/tools/packman/bootstrap/install_package.py +++ b/tools/packman/bootstrap/install_package.py @@ -4,7 +4,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,8 @@ import os import stat import time -from typing import Any, Callable +import hashlib +from typing import Any, Callable, Union RENAME_RETRY_COUNT = 100 @@ -130,7 +131,24 @@ def rename_folder_with_retry(staging_dir: StagingDirectory, folder_name): ) -def install_package(package_path, install_path): +def generate_sha256_for_file(file_path: Union[str, os.PathLike]) -> str: + """Returns the SHA-256 hex digest for the file at `file_path`""" + hash = hashlib.sha256() + # Read the file in binary mode and update the hash object with data + with open(file_path, "rb") as file: + for chunk in iter(lambda: file.read(4096), b""): + hash.update(chunk) + return hash.hexdigest() + + +def install_common_module(package_path, install_path): + COMMON_SHA256 = "7397be5807841f6d6084e1fa77a4f7c8a9a29b4285b4440cf8c2865d1d9fd152" + package_sha256 = generate_sha256_for_file(package_path) + if package_sha256 != COMMON_SHA256: + raise RuntimeError( + f"Package at '{package_path}' must have a sha256 of '{COMMON_SHA256}' " + f"but was found to have '{package_sha256}'" + ) staging_path, version = os.path.split(install_path) with StagingDirectory(staging_path) as staging_dir: output_folder = staging_dir.get_temp_folder_path() @@ -151,4 +169,4 @@ def install_package(package_path, install_path): for exec_path in paths_list: if os.path.normcase(os.path.normpath(exec_path)) == target_path_np_nc: raise RuntimeError(f"packman will not install to executable path '{exec_path}'") - install_package(sys.argv[1], target_path_np) + install_common_module(sys.argv[1], target_path_np) diff --git a/tools/packman/config.packman.xml b/tools/packman/config.packman.xml index 3223a33..52cf9e4 100644 --- a/tools/packman/config.packman.xml +++ b/tools/packman/config.packman.xml @@ -1,7 +1,8 @@ - - + + + diff --git a/tools/packman/packman b/tools/packman/packman index 08c3897..9e6b810 100755 --- a/tools/packman/packman +++ b/tools/packman/packman @@ -6,7 +6,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,11 +18,13 @@ set -eu if echo ${PM_VERBOSITY-} | grep -i "debug" > /dev/null ; then set -x + PM_CURL_SILENT="" + PM_WGET_QUIET="" else PM_CURL_SILENT="-s -S" PM_WGET_QUIET="--quiet" fi -PM_PACKMAN_VERSION=7.6 +export PM_PACKMAN_VERSION=7.24.2 # This is necessary for newer macOS if [ `uname` == 'Darwin' ]; then @@ -58,17 +60,49 @@ if [ ! -d "$PM_PACKAGES_ROOT" ]; then mkdir -p -m a+rwx "$PM_PACKAGES_ROOT" fi +execute_with_retry() +{ + # Don't exit on error, we need to handle them + set +e + + local CMD="$1" + local MAX_TRIES=4 + local DELAY=2 + local TRIES=0 + local exit_code + + while [ $TRIES -lt $MAX_TRIES ] + do + ((TRIES++)) + eval $CMD + exit_code=$? + if [ $exit_code -eq 0 ]; then + return 0 + fi + + if [ $TRIES -lt $MAX_TRIES ]; then + echo "Attempt $TRIES failed. Retrying in $DELAY seconds ..." + sleep $DELAY + DELAY=$((DELAY * DELAY)) + echo "Retrying ..." + fi + done + + echo "Command failed after $MAX_TRIES attempts: $CMD" + return $exit_code +} + fetch_file_from_s3() { - SOURCE=$1 - SOURCE_URL=https://bootstrap.packman.nvidia.com/$SOURCE - TARGET=$2 + local SOURCE=$1 + local SOURCE_URL=http://bootstrap.packman.nvidia.com/$SOURCE + local TARGET=$2 echo "Fetching $SOURCE from bootstrap.packman.nvidia.com ..." + local CMD="curl -o $TARGET $SOURCE_URL $PM_CURL_SILENT" if command -v wget >/dev/null 2>&1; then - wget $PM_WGET_QUIET -O$TARGET $SOURCE_URL - else - curl -o $TARGET $SOURCE_URL $PM_CURL_SILENT + CMD="wget $PM_WGET_QUIET -O$TARGET $SOURCE_URL" fi + execute_with_retry "$CMD" } generate_temp_file_name() diff --git a/tools/packman/packman.cmd b/tools/packman/packman.cmd old mode 100644 new mode 100755 diff --git a/tools/packman/packmanconf.py b/tools/packman/packmanconf.py index 3dac03e..f2dca9e 100644 --- a/tools/packman/packmanconf.py +++ b/tools/packman/packmanconf.py @@ -1,4 +1,18 @@ -# Use this file to bootstrap packman into your Python environment (3.7.x). Simply +# Copyright 2021-2024 NVIDIA CORPORATION + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Use this file to bootstrap packman into your Python environment. Simply # add the path by doing sys.insert to where packmanconf.py is located and then execute: # # >>> import packmanconf @@ -32,11 +46,16 @@ def init(): >>> import packmanapi >>> packmanapi.set_verbosity_level(packmanapi.VERBOSITY_HIGH) """ - major = sys.version_info[0] - minor = sys.version_info[1] - if major != 3 or minor != 10: + major = sys.version_info.major + minor = sys.version_info.minor + patch = sys.version_info.micro + if major == 3 and (minor == 10 or (minor == 11 and patch <= 2)): + # we are good + pass + else: raise RuntimeError( - f"This version of packman requires Python 3.10.x, but {major}.{minor} was provided" + f"This version of packman requires Python 3.10.0 up to 3.11.2, " + f"but {major}.{minor}.{patch} was provided" ) conf_dir = os.path.dirname(os.path.abspath(__file__)) os.environ["PM_INSTALL_PATH"] = conf_dir @@ -56,7 +75,7 @@ def get_packages_root(conf_dir: str) -> str: elif platform_name == "Darwin": # macOS root = os.path.join( - os.path.expanduser("~"), "/Library/Application Support/packman-cache" + os.path.expanduser("~"), "Library/Application Support/packman-cache" ) elif platform_name == "Linux": try: @@ -79,7 +98,13 @@ def get_module_dir(conf_dir, packages_root: str, version: str) -> str: tf = tempfile.NamedTemporaryFile(delete=False) target_name = tf.name tf.close() - url = f"https://bootstrap.packman.nvidia.com/packman-common@{version}.zip" + # Using http here and not https is by design. Unfortunately SSL keeps getting revised + # which breaks old clients when servers are forced to upgrade to newer version of TLS + # and refuse to downgrade when asked. Instead of relying on SSL for transport security + # packman does SHA256 verification of the downloaded package in the `install_package` + # method. We therefore inform SonarQube to stop complaining about the line below. + # See issue #367 for more detail. + url = f"http://bootstrap.packman.nvidia.com/packman-common@{version}.zip" # NOSONAR print(f"Downloading '{url}' ...") import urllib.request @@ -90,7 +115,7 @@ def get_module_dir(conf_dir, packages_root: str, version: str) -> str: script_path = os.path.join(conf_dir, "bootstrap", "install_package.py") ip = SourceFileLoader("install_package", script_path).load_module() print("Unpacking ...") - ip.install_package(target_name, module_dir) + ip.install_common_module(target_name, module_dir) os.unlink(tf.name) return module_dir @@ -101,7 +126,7 @@ def get_version(conf_dir: str): path += ".sh" with open(path, "rt", encoding="utf8") as launch_file: for line in launch_file.readlines(): - if line.startswith("PM_PACKMAN_VERSION"): + if "PM_PACKMAN_VERSION" in line: _, value = line.split("=") return value.strip() raise RuntimeError(f"Unable to find 'PM_PACKMAN_VERSION' in '{path}'") diff --git a/tools/packman/python.bat b/tools/packman/python.bat old mode 100644 new mode 100755 index e4e6cc6..08df74f --- a/tools/packman/python.bat +++ b/tools/packman/python.bat @@ -4,7 +4,7 @@ :: you may not use this file except in compliance with the License. :: You may obtain a copy of the License at :: -:: https://www.apache.org/licenses/LICENSE-2.0 +:: http://www.apache.org/licenses/LICENSE-2.0 :: :: Unless required by applicable law or agreed to in writing, software :: distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tools/packman/python.sh b/tools/packman/python.sh index 00ab46e..74328bf 100755 --- a/tools/packman/python.sh +++ b/tools/packman/python.sh @@ -6,7 +6,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS,