From 6fc86d258c30a7ed7857b3b51ab6c7607a8e217e Mon Sep 17 00:00:00 2001 From: Alex Thiele Date: Tue, 24 Dec 2024 12:15:17 -0800 Subject: [PATCH] Add Replicator support to replay extension, augmenting previous recordings (#5) --- .gitattributes | 1 + .github/lint/lint_darglint.py | 2 +- .gitignore | 3 +- README.md | 2 +- .../Photoreal_Concrete_01-512x512.png | 3 + .../Photoreal_Concrete_02-512x512.png | 3 + .../Photoreal_Concrete_03-512x512.png | 3 + .../Photoreal_Concrete_04-512x512.png | 3 + .../Photoreal_Concrete_05-512x512.png | 3 + .../Photoreal_Concrete_06-512x512.png | 3 + .../Photoreal_Concrete_07-512x512.png | 3 + .../Photoreal_Concrete_08-512x512.png | 3 + .../Fire/Photoreal_Fire_01-512x512.png | 3 + .../Fire/Photoreal_Fire_02-512x512.png | 3 + .../Fire/Photoreal_Fire_03-512x512.png | 3 + .../Fire/Photoreal_Fire_04-512x512.png | 3 + .../Fire/Photoreal_Fire_05-512x512.png | 3 + .../Fire/Photoreal_Fire_06-512x512.png | 3 + .../Fire/Photoreal_Fire_07-512x512.png | 3 + .../Fire/Photoreal_Fire_08-512x512.png | 3 + .../Grass/Photoreal_Grass_01-512x512.png | 3 + .../Grass/Photoreal_Grass_02-512x512.png | 3 + .../Grass/Photoreal_Grass_03-512x512.png | 3 + .../Grass/Photoreal_Grass_04-512x512.png | 3 + .../Grass/Photoreal_Grass_05-512x512.png | 3 + .../Grass/Photoreal_Grass_06-512x512.png | 3 + .../Grass/Photoreal_Grass_07-512x512.png | 3 + .../Grass/Photoreal_Grass_08-512x512.png | 3 + .../Ice/Photoreal_Ice_01-512x512.png | 3 + .../Ice/Photoreal_Ice_02-512x512.png | 3 + .../Ice/Photoreal_Ice_03-512x512.png | 3 + .../Ice/Photoreal_Ice_04-512x512.png | 3 + .../Ice/Photoreal_Ice_05-512x512.png | 3 + .../Ice/Photoreal_Ice_06-512x512.png | 3 + .../Ice/Photoreal_Ice_07-512x512.png | 3 + .../Ice/Photoreal_Ice_08-512x512.png | 3 + .../Metal/Photoreal_Metal_01-512x512.png | 3 + .../Metal/Photoreal_Metal_02-512x512.png | 3 + .../Metal/Photoreal_Metal_03-512x512.png | 3 + .../Metal/Photoreal_Metal_04-512x512.png | 3 + .../Metal/Photoreal_Metal_05-512x512.png | 3 + .../Metal/Photoreal_Metal_06-512x512.png | 3 + .../Metal/Photoreal_Metal_07-512x512.png | 3 + .../Metal/Photoreal_Metal_08-512x512.png | 3 + .../Stone/Photoreal_Stone_01-512x512.png | 3 + .../Stone/Photoreal_Stone_02-512x512.png | 3 + .../Stone/Photoreal_Stone_03-512x512.png | 3 + .../Stone/Photoreal_Stone_04-512x512.png | 3 + .../Stone/Photoreal_Stone_05-512x512.png | 3 + .../Stone/Photoreal_Stone_06-512x512.png | 3 + .../Stone/Photoreal_Stone_07-512x512.png | 3 + .../Stone/Photoreal_Stone_08-512x512.png | 3 + .../Tile/Photoreal_Tile_01-512x512.png | 3 + .../Tile/Photoreal_Tile_02-512x512.png | 3 + .../Tile/Photoreal_Tile_03-512x512.png | 3 + .../Tile/Photoreal_Tile_04-512x512.png | 3 + .../Tile/Photoreal_Tile_05-512x512.png | 3 + .../Tile/Photoreal_Tile_06-512x512.png | 3 + .../Tile/Photoreal_Tile_07-512x512.png | 3 + .../Tile/Photoreal_Tile_08-512x512.png | 3 + .../Trees/Photoreal_Trees_01-512x512.png | 3 + .../Trees/Photoreal_Trees_02-512x512.png | 3 + .../Trees/Photoreal_Trees_03-512x512.png | 3 + .../Trees/Photoreal_Trees_04-512x512.png | 3 + .../Trees/Photoreal_Trees_05-512x512.png | 3 + .../Trees/Photoreal_Trees_06-512x512.png | 3 + .../Trees/Photoreal_Trees_07-512x512.png | 3 + .../Trees/Photoreal_Trees_08-512x512.png | 3 + .../Wood/Photoreal_Wood_01-512x512.png | 3 + .../Wood/Photoreal_Wood_02-512x512.png | 3 + .../Wood/Photoreal_Wood_03-512x512.png | 3 + .../Wood/Photoreal_Wood_04-512x512.png | 3 + .../Wood/Photoreal_Wood_05-512x512.png | 3 + .../Wood/Photoreal_Wood_06-512x512.png | 3 + .../Wood/Photoreal_Wood_07-512x512.png | 3 + .../Wood/Photoreal_Wood_08-512x512.png | 3 + .../textures/skyboxes/billiard_hall_1k.exr | 3 + .../skyboxes/blue_photo_studio_1k.exr | 3 + .../assets/textures/skyboxes/boma_1k.exr | 3 + .../skyboxes/brown_photostudio_01_1k.exr | 3 + .../skyboxes/brown_photostudio_04_1k.exr | 3 + .../textures/skyboxes/chapel_day_1k.exr | 3 + .../christmas_photo_studio_01_1k (1).exr | 3 + .../skyboxes/christmas_photo_studio_01_1k.exr | 3 + .../skyboxes/christmas_photo_studio_03_1k.exr | 3 + .../textures/skyboxes/dancing_hall_1k.exr | 3 + .../skyboxes/empty_warehouse_01_1k.exr | 3 + .../textures/skyboxes/fireplace_1k (1).exr | 3 + .../textures/skyboxes/fireplace_1k (2).exr | 3 + .../assets/textures/skyboxes/fireplace_1k.exr | 3 + .../textures/skyboxes/goegap_road_4k.exr | 3 + .../textures/skyboxes/hospital_room_2_1k.exr | 3 + .../assets/textures/skyboxes/kart_club_1k.exr | 3 + .../textures/skyboxes/metro_noord_1k.exr | 3 + .../textures/skyboxes/neon_photostudio_1k.exr | 3 + .../textures/skyboxes/pine_attic_1k (1).exr | 3 + .../textures/skyboxes/pine_attic_1k.exr | 3 + .../skyboxes/poly_haven_studio_1k.exr | 3 + .../textures/skyboxes/pretville_cinema_1k.exr | 3 + .../textures/skyboxes/rostock_arches_1k.exr | 3 + .../skyboxes/rostock_laage_airport_1k (1).exr | 3 + .../skyboxes/rostock_laage_airport_1k.exr | 3 + .../textures/skyboxes/royal_esplanade_1k.exr | 3 + .../skyboxes/studio_country_hall_1k.exr | 3 + .../textures/skyboxes/studio_small_02_1k.exr | 3 + .../skyboxes/thatch_chapel_1k (1).exr | 3 + .../textures/skyboxes/thatch_chapel_1k.exr | 3 + .../textures/skyboxes/warm_restaurant_1k.exr | 3 + .../skyboxes/warm_restaurant_night_1k.exr | 3 + .../assets/textures/skyboxes/workshop_1k.exr | 3 + .../textures/skyboxes/wrestling_gym_1k.exr | 3 + .../trajectory_synth/path_utils.py | 23 ++ .../trajectory_synth/schema.py | 127 ++++++- .../trajectory_synth/tests/__init__.py | 1 - .../tests/test_hello_world.py | 5 - .../trajectory_synth/traj_recorder.py | 107 +++--- .../trajectory_synth/traj_replayer.py | 340 +++++++++++++++--- .../packman/bootstrap/install_package.py | 2 - .../tools/scripts/link_app.py | 21 +- .../isaac-sim-assets/main-scene.usd | 4 +- .../isaac-sim-assets/main-scene.usd | 4 +- .../myarm_ai/nodes/base_robot_node.py | 3 +- pyproject.toml | 2 + 123 files changed, 839 insertions(+), 129 deletions(-) create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_08-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_01-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_02-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_03-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_04-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_05-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_06-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_07-512x512.png create mode 100644 isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_08-512x512.png create mode 100644 isaac_src/assets/textures/skyboxes/billiard_hall_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/blue_photo_studio_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/boma_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/brown_photostudio_01_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/brown_photostudio_04_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/chapel_day_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k (1).exr create mode 100644 isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/christmas_photo_studio_03_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/dancing_hall_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/empty_warehouse_01_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/fireplace_1k (1).exr create mode 100644 isaac_src/assets/textures/skyboxes/fireplace_1k (2).exr create mode 100644 isaac_src/assets/textures/skyboxes/fireplace_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/goegap_road_4k.exr create mode 100644 isaac_src/assets/textures/skyboxes/hospital_room_2_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/kart_club_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/metro_noord_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/neon_photostudio_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/pine_attic_1k (1).exr create mode 100644 isaac_src/assets/textures/skyboxes/pine_attic_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/poly_haven_studio_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/pretville_cinema_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/rostock_arches_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k (1).exr create mode 100644 isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/royal_esplanade_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/studio_country_hall_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/studio_small_02_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/thatch_chapel_1k (1).exr create mode 100644 isaac_src/assets/textures/skyboxes/thatch_chapel_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/warm_restaurant_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/warm_restaurant_night_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/workshop_1k.exr create mode 100644 isaac_src/assets/textures/skyboxes/wrestling_gym_1k.exr create mode 100644 isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/path_utils.py diff --git a/.gitattributes b/.gitattributes index 2f8fe14..1469130 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,6 +19,7 @@ *.ogg filter=lfs diff=lfs merge=lfs -binary *.dae filter=lfs diff=lfs merge=lfs -binary *.usd filter=lfs diff=lfs merge=lfs -binary +*.exr filter=lfs diff=lfs merge=lfs -binary # ReadTheDocs does not support Git LFS docs/** !filter !diff !merge binary diff --git a/.github/lint/lint_darglint.py b/.github/lint/lint_darglint.py index af8a685..30af5af 100644 --- a/.github/lint/lint_darglint.py +++ b/.github/lint/lint_darglint.py @@ -14,7 +14,7 @@ def lint_darglint(fix: bool) -> None: "sphinx", "--ignore-regex", "^test.*", - Path(), + Path("pkgs/"), ] if not fix: run_command(cmd) diff --git a/.gitignore b/.gitignore index e09b001..55502a9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,8 @@ __pycache__/ .env # Persistent data -.docker_volumes +.docker_volumes/ +synthetic-output/ # URDF *.part diff --git a/README.md b/README.md index 532ab23..282d152 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ factors. - [ ] Create ROS service for starting/stopping data collection and serializing datasets - [ ] Create easy workflows for: - [ ] Record demonstrations with **real leader arm** and **simulation follower arm** - - [ ] Multiplex demonstrations using domain randomization, leveraging Replicator learnings above + - [x] Multiplex demonstrations using domain randomization, leveraging Replicator learnings above - [ ] Training models with mix of real and simulated data - [ ] Benchmark the sim2real gap with this project, publicize results to open source community - [ ] Add support for Koch arm and other open-source robot arm diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_01-512x512.png new file mode 100644 index 0000000..4a408b9 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c44f461505eeb68565b5876bac2a83cb7bf73f3c85bcd8b8f84c2b5ae39650c5 +size 725697 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_02-512x512.png new file mode 100644 index 0000000..368caf0 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9bbc144ca7acb8f6fe0437a9596b23e25c3ff38d6041426f7dff9dd67e94070 +size 736080 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_03-512x512.png new file mode 100644 index 0000000..cde3e82 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72676843824ad1751ee5cf43cf79adab481684236ab16a180231fc69a56e1833 +size 620000 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_04-512x512.png new file mode 100644 index 0000000..5dd2c02 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bf73990b5b744c8595ed8ff45deb56e873a404170342276336587ec46488865 +size 721829 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_05-512x512.png new file mode 100644 index 0000000..b529dd1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:052b54a42b924a3a86f33faa6b2c89cd6012d51882c4cf8874f65968f924bd19 +size 761862 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_06-512x512.png new file mode 100644 index 0000000..0a68d74 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd567ae44f4c7b989c6ab4ead85c3484b1ff123bf73cb7ec88b90f3a115d2afc +size 675473 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_07-512x512.png new file mode 100644 index 0000000..07e3507 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e9bc6dd2709aef8f7006c339876abede1bf397115001fd39ce6c34e6fbdb82f +size 616653 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_08-512x512.png new file mode 100644 index 0000000..16eaf67 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Concrete/Photoreal_Concrete_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c54628cc204aa8f52f46c04baa649f077c3f1fbd3b52bdbf86bba61b9715b12f +size 579612 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_01-512x512.png new file mode 100644 index 0000000..07340fa --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5acc79bcbb497f8e1144a1ecf9078f42675d1d7deef1263815ef129c3f99a04c +size 513038 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_02-512x512.png new file mode 100644 index 0000000..6925a8a --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:682934ecbe3d97d5969467e814467b091b42167bd708bf5b0d29588984222951 +size 636131 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_03-512x512.png new file mode 100644 index 0000000..70606ec --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faba982f2380f33be67b3c9a741d792a66f9287ce7356d03d8ca7e28f4a72fd9 +size 507468 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_04-512x512.png new file mode 100644 index 0000000..74ede50 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e37d64f4bb14659ff7485c9b18a51f1ca0f4477c687c32977241d6969293b2d2 +size 488190 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_05-512x512.png new file mode 100644 index 0000000..6dc7e15 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a50bdbbc0e64e8a4d9910d874c2a680983eaf01ec777c5cc9724607b0ccf7c1c +size 634441 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_06-512x512.png new file mode 100644 index 0000000..2b0e1b1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5485957546bb882901275766515568394c91eceb92d9f4207b9ec1a2ec274f8f +size 656824 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_07-512x512.png new file mode 100644 index 0000000..027e7e2 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a86253f4b2b891b86b168da762bffa5720d45550a577c45e2886a13107bdfa13 +size 517736 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_08-512x512.png new file mode 100644 index 0000000..611a53e --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Fire/Photoreal_Fire_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac51084b4f3224ae21671db797766be68c4e3c08e24b2b762067f0068bc0f2c +size 532021 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_01-512x512.png new file mode 100644 index 0000000..b5ff3af --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8beb3d8d515dacd955c09a466e8df70320ce1b87ccfc4da0d8d15e3eace2b73 +size 568648 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_02-512x512.png new file mode 100644 index 0000000..5bfed43 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5e6faae09f69c4d02c68d61130f6dc7e1a1e5dff34f6ace43b45d696a15b667 +size 539278 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_03-512x512.png new file mode 100644 index 0000000..ec26674 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81e00842a9a7a93434504b84dab0b9683620d9156f63722b563b4bf6916637d9 +size 720485 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_04-512x512.png new file mode 100644 index 0000000..be9ad06 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bf78c2266bbf16c906621211d757a09af667dc31349270362c540c30b070355 +size 717034 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_05-512x512.png new file mode 100644 index 0000000..dfb0e64 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3db6238dd683a8405c591a1e87cda64bc512adf557f87b322bacab4a0df94955 +size 611336 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_06-512x512.png new file mode 100644 index 0000000..8a339d3 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9083e2be1196aa2ff69f5cf13a06f600d0a2cf4ed60dc2953f2e586a32ef4d05 +size 687799 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_07-512x512.png new file mode 100644 index 0000000..718afe1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a932168b782fdf8d0c2595541bd4a04478068c743de1eb2f4240352f5c2fd9a +size 750747 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_08-512x512.png new file mode 100644 index 0000000..8d84575 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Grass/Photoreal_Grass_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64712ade147561a230056fb303d9f6246ee36fc7d0b4cc843013b796f0fed094 +size 722836 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_01-512x512.png new file mode 100644 index 0000000..3e62672 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73dbe3bef54165ad7e2d9af8b283ea1b706ab4c5c826d546a515c1da0c0264ef +size 726365 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_02-512x512.png new file mode 100644 index 0000000..07156dc --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48227d5f4c04a9ebe9ab34c4e5bfe7a63b1e13edd848b7cc6afb8d6e6e55e3f2 +size 764431 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_03-512x512.png new file mode 100644 index 0000000..27b7c8f --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1ccc1c7217856ff33e3461880405a34450431c7c3f21109c0186d6b6c804933 +size 763186 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_04-512x512.png new file mode 100644 index 0000000..f7f3ff0 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:523a6cbd6a80196d68b9d4834e5d3780fa953adab28580eee8ba2e82c186769f +size 684045 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_05-512x512.png new file mode 100644 index 0000000..978ee7a --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a84f284153aaa4773a1b2f9834565b1089c0e6d95b1a24e226d4203b49816851 +size 643179 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_06-512x512.png new file mode 100644 index 0000000..702d639 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba9705054635af41ddc32a632aee4dde8c9a41eb5732ede503a480c5d8ed9dca +size 721990 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_07-512x512.png new file mode 100644 index 0000000..f254723 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee5eb8caef2c5a7d0eb9821c1f75b69e4e1a6c0ae94029e70100597512e91c0c +size 543697 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_08-512x512.png new file mode 100644 index 0000000..3a68b65 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Ice/Photoreal_Ice_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:083fd8e385109aaa520b31858c91aa9900d1801d3beb771c77cd334499f5f000 +size 654888 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_01-512x512.png new file mode 100644 index 0000000..0f82325 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61d086bf6ccbf21886565e84257df4d65a81a577217d04939ce5f50fed4c8b62 +size 718257 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_02-512x512.png new file mode 100644 index 0000000..65b530b --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b7aa0bbc716297f4ad516ecaa5ff06c211b97f52e8767726be519dbae4264f +size 740587 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_03-512x512.png new file mode 100644 index 0000000..a064d83 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f866ade4d3a0ff63d415c9962f92c6e41463e96fa86731ae4d3ce43276549e0 +size 738551 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_04-512x512.png new file mode 100644 index 0000000..d20caf1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb278a252a2f29fd1adef96f387567e02d2fd5c77c199488771b79d60deb4021 +size 715977 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_05-512x512.png new file mode 100644 index 0000000..6c76dda --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f51a34ed1e325ce77e0117d28d40b8d3bec72d6f8a0d9855a933c21afbb708b +size 390847 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_06-512x512.png new file mode 100644 index 0000000..e87621d --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c8c07e4859f4925e0a7ede95fa8a4f9fa9243addf62f255ff87b822784592d +size 716949 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_07-512x512.png new file mode 100644 index 0000000..34e4ded --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:640d2d2d279443ad460d92a90e0f239212229b89003befc93152b244f8a9f6f3 +size 696080 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_08-512x512.png new file mode 100644 index 0000000..04b7597 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Metal/Photoreal_Metal_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da8df141117cd13727aca6ef3aeae4b00c29c1818346830e16e36104380a6972 +size 729694 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_01-512x512.png new file mode 100644 index 0000000..240733b --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72df3adb9ef73c77cc78b5e621ce3294fc8922ab2641926929927e3f088c8f29 +size 660571 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_02-512x512.png new file mode 100644 index 0000000..e79c348 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:744dc0426030cdd6c861da89354098ea1b084a36fc3d83381a24cbdce8bcc93b +size 673920 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_03-512x512.png new file mode 100644 index 0000000..5aa644b --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b697a18c3e51df0751e3eb2c74198e708ad9daccaf1e87efab2564a8a4b095cb +size 653961 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_04-512x512.png new file mode 100644 index 0000000..e00d06e --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9148ecf512e3abd93a14583c506bccfd9c23808888b8c505440761a68b9b4f +size 705303 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_05-512x512.png new file mode 100644 index 0000000..bb183cf --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce483ff3f1d4ce86e980d27098cb4710fe6348ce3e61d447a4ca4aa4339ad407 +size 728029 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_06-512x512.png new file mode 100644 index 0000000..4059e5d --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dc10f889879acd5e56f44268330e261b5828aab0f5dc7612d1cf94f2145f350 +size 735549 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_07-512x512.png new file mode 100644 index 0000000..c29506a --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6c984ba97ccb0f09abf7be5cb4f7e9ce80e8902ab4168645f8a88a69727d903 +size 633420 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_08-512x512.png new file mode 100644 index 0000000..6065a4a --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Stone/Photoreal_Stone_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cf0a7ba877e2c48029cf09ecc7514558782b7ead1c4bdc0dfbd59e117320fe0 +size 655835 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_01-512x512.png new file mode 100644 index 0000000..c6fce91 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de3f830c54cf0577b5554568b988a1b3c6ad357ac0d5839a9a69d1f7c36bed20 +size 663322 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_02-512x512.png new file mode 100644 index 0000000..1508ed5 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:058f666327a29f2b4eca62549172d565fdf29ad49e35fd1a37900fac8933a722 +size 723853 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_03-512x512.png new file mode 100644 index 0000000..82b295c --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21b6ffa523755f1ac18accfb1100c2f6970984acad3519e5f40479c7a550325c +size 547758 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_04-512x512.png new file mode 100644 index 0000000..429d2f2 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7f514df382a9ee4feabeafa8c9b30d350a2ad8be293f96015d72f021ff448d7 +size 687119 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_05-512x512.png new file mode 100644 index 0000000..16d0ff4 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd11bb994f6eb7d22e913ef6224cdb26eb791fa95fdc504a7cc0efff9b6a1da1 +size 691309 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_06-512x512.png new file mode 100644 index 0000000..0764a07 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f029185430bad9930d40c55b30571aaa6edc64ed97e367d98b4b409e73ed5d71 +size 534283 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_07-512x512.png new file mode 100644 index 0000000..a5c0f21 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30032ce8e116ca10f0a685a9c213ad54f9d2a1a939e64ee9419b2bea71fd65e2 +size 682850 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_08-512x512.png new file mode 100644 index 0000000..ac996da --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Tile/Photoreal_Tile_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:603d249dac4ddff595214924048aca5d699d7f34a4ccfd8f860ccb181b2401a8 +size 563537 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_01-512x512.png new file mode 100644 index 0000000..6e5b6fd --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bd5d2cbd00c6a8e0db56e10c5f2a1c448df22b675f482d828ca0ef4804f1f2f +size 759449 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_02-512x512.png new file mode 100644 index 0000000..84e276c --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2734af77d7f0574de7b80fd24ca87bd2ccc9d18f41dc812ec37fcb9c5462787b +size 754256 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_03-512x512.png new file mode 100644 index 0000000..1ee387c --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:717ff68c31f510eb73fe302fb5c1f743e0b05a94f3312b10db2c534b6636d623 +size 770302 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_04-512x512.png new file mode 100644 index 0000000..1bf7b1e --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e20fdb4610e835e737d2583696d1d5f3e0a6d52d0623087f9c5d7e31cd1e39d +size 738881 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_05-512x512.png new file mode 100644 index 0000000..12d1731 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4b031600766e2e899b0d0576381735f43668188ad29f5ec33573ae7248b3c6e +size 726701 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_06-512x512.png new file mode 100644 index 0000000..fd81b80 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acc0a531e3eea6217804afa985fbc06d1480fafb92dde5cb69f173261728e9b8 +size 725616 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_07-512x512.png new file mode 100644 index 0000000..44ff595 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:152a8a1d2cd68aadead207c25214e309ede4098030c0bd4b07d113ac735b130c +size 756008 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_08-512x512.png new file mode 100644 index 0000000..b1ed248 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Trees/Photoreal_Trees_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5639326ca878f4d8af49482fc293bca5043af9a39d2e355aad0fac0e638e7987 +size 764153 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_01-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_01-512x512.png new file mode 100644 index 0000000..7199e7d --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_01-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcdc7745c827152aa1fd9385e08f91dd9e0d3aa8f42e2dcfcb958b560cd0bbbf +size 516782 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_02-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_02-512x512.png new file mode 100644 index 0000000..91100f1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_02-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6af64be00af1c151b101f2ed298a7db5916400c69e29d3905a2ced63640382ea +size 702445 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_03-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_03-512x512.png new file mode 100644 index 0000000..1c41406 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_03-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b0bb444471bbcc838903bc9191cbefc6eef924a38e00b760497bcd4e93c75e +size 643001 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_04-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_04-512x512.png new file mode 100644 index 0000000..8699428 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_04-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba6e6c4ecdf84644a623d0892de03580ce6460e018ae85ed87cbf23debb389eb +size 667742 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_05-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_05-512x512.png new file mode 100644 index 0000000..4160c28 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_05-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9df66570be742f7162539f1ec03aecc59c242ab4614bcfea8d87641eacf6f1f1 +size 675915 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_06-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_06-512x512.png new file mode 100644 index 0000000..f377dcb --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_06-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48b0180f0b5266a76f3ccd68af9b3b2fe441dd576c825f7726ccf696a5edd825 +size 515953 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_07-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_07-512x512.png new file mode 100644 index 0000000..c18362a --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_07-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:679526db445bd6e9d7fed37752648c6b54b07d50de2ad97e01cbcb4292ff1edc +size 706435 diff --git a/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_08-512x512.png b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_08-512x512.png new file mode 100644 index 0000000..5c975f1 --- /dev/null +++ b/isaac_src/assets/textures/512x512-photorealistic/Wood/Photoreal_Wood_08-512x512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6dc8efe220d851a3d46136d5ed13131b23b896f7ca275f812b981a68766c8f0 +size 612611 diff --git a/isaac_src/assets/textures/skyboxes/billiard_hall_1k.exr b/isaac_src/assets/textures/skyboxes/billiard_hall_1k.exr new file mode 100644 index 0000000..bb70074 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/billiard_hall_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a305c455fb3907a3e5f74b8cc2ab9f9674ac32e706094872a2ac89bdf813ba0 +size 6096943 diff --git a/isaac_src/assets/textures/skyboxes/blue_photo_studio_1k.exr b/isaac_src/assets/textures/skyboxes/blue_photo_studio_1k.exr new file mode 100644 index 0000000..3ab8f6e --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/blue_photo_studio_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da05f1b2634238d129a2c3478ebca40a966c27e78f93a398c48b2004096e449a +size 1523336 diff --git a/isaac_src/assets/textures/skyboxes/boma_1k.exr b/isaac_src/assets/textures/skyboxes/boma_1k.exr new file mode 100644 index 0000000..fd8d55a --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/boma_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a08d8e82e887c9d050fdc4b200eb75d580436515dfc10ca1c46358a058754ce +size 6201656 diff --git a/isaac_src/assets/textures/skyboxes/brown_photostudio_01_1k.exr b/isaac_src/assets/textures/skyboxes/brown_photostudio_01_1k.exr new file mode 100644 index 0000000..ad0fb9e --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/brown_photostudio_01_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a65b8755836e8075b9d4be3d51f2a626efe954cd796c348204b7fbcb0438ec9a +size 1422678 diff --git a/isaac_src/assets/textures/skyboxes/brown_photostudio_04_1k.exr b/isaac_src/assets/textures/skyboxes/brown_photostudio_04_1k.exr new file mode 100644 index 0000000..b3c341f --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/brown_photostudio_04_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e124a6966aa571fbda5c99e06ad3c9c33589af388a4f0e8a22f9ec9b034d89cc +size 1427186 diff --git a/isaac_src/assets/textures/skyboxes/chapel_day_1k.exr b/isaac_src/assets/textures/skyboxes/chapel_day_1k.exr new file mode 100644 index 0000000..8d3ed04 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/chapel_day_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6d2c40969c1798b03343db146f9db29a5212cb56d05cbca5a80e2ee2ae509bd +size 6115294 diff --git a/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k (1).exr b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k (1).exr new file mode 100644 index 0000000..30fac72 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k (1).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1837325154276986c4504152162985eb2f6e7f6eafcdbf07539699a3cc8e1a2f +size 1545287 diff --git a/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k.exr b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k.exr new file mode 100644 index 0000000..30fac72 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_01_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1837325154276986c4504152162985eb2f6e7f6eafcdbf07539699a3cc8e1a2f +size 1545287 diff --git a/isaac_src/assets/textures/skyboxes/christmas_photo_studio_03_1k.exr b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_03_1k.exr new file mode 100644 index 0000000..5198864 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/christmas_photo_studio_03_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f1116a1fe71ffb030be1e623b9d43d584c7f535a4a3db0a1bb5b6fdd62f21ee +size 1409055 diff --git a/isaac_src/assets/textures/skyboxes/dancing_hall_1k.exr b/isaac_src/assets/textures/skyboxes/dancing_hall_1k.exr new file mode 100644 index 0000000..14afe30 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/dancing_hall_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa17ea5be2bcba18abc6c6f7d4a0bf2385c64c12d65f44d88e98852bc505b7bd +size 1689353 diff --git a/isaac_src/assets/textures/skyboxes/empty_warehouse_01_1k.exr b/isaac_src/assets/textures/skyboxes/empty_warehouse_01_1k.exr new file mode 100644 index 0000000..8116844 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/empty_warehouse_01_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e75797001978cdb200477630a633d2c47c623596e396488ae921afef7037927 +size 1571814 diff --git a/isaac_src/assets/textures/skyboxes/fireplace_1k (1).exr b/isaac_src/assets/textures/skyboxes/fireplace_1k (1).exr new file mode 100644 index 0000000..eb52e88 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/fireplace_1k (1).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c48b2cc25eafd916991d1ae3baa02c64e5f1a35f21d8fbc633506c794447885 +size 1476765 diff --git a/isaac_src/assets/textures/skyboxes/fireplace_1k (2).exr b/isaac_src/assets/textures/skyboxes/fireplace_1k (2).exr new file mode 100644 index 0000000..eb52e88 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/fireplace_1k (2).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c48b2cc25eafd916991d1ae3baa02c64e5f1a35f21d8fbc633506c794447885 +size 1476765 diff --git a/isaac_src/assets/textures/skyboxes/fireplace_1k.exr b/isaac_src/assets/textures/skyboxes/fireplace_1k.exr new file mode 100644 index 0000000..eb52e88 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/fireplace_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c48b2cc25eafd916991d1ae3baa02c64e5f1a35f21d8fbc633506c794447885 +size 1476765 diff --git a/isaac_src/assets/textures/skyboxes/goegap_road_4k.exr b/isaac_src/assets/textures/skyboxes/goegap_road_4k.exr new file mode 100644 index 0000000..e426e10 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/goegap_road_4k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3bcfbe8c5ab53ea11322078237e3684c329e66ecb1456c03896f8afd155c3f2 +size 97104825 diff --git a/isaac_src/assets/textures/skyboxes/hospital_room_2_1k.exr b/isaac_src/assets/textures/skyboxes/hospital_room_2_1k.exr new file mode 100644 index 0000000..41181e6 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/hospital_room_2_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08e58f02db2b6a8fb90bdf79059cfca98e4246f13268882a9118ecac5d1dbbb2 +size 6067689 diff --git a/isaac_src/assets/textures/skyboxes/kart_club_1k.exr b/isaac_src/assets/textures/skyboxes/kart_club_1k.exr new file mode 100644 index 0000000..ceef8d9 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/kart_club_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c377c5cf1615ec17312c7b8e4210b024e22d6c4b0c888d39fe0fe455f085d090 +size 1729834 diff --git a/isaac_src/assets/textures/skyboxes/metro_noord_1k.exr b/isaac_src/assets/textures/skyboxes/metro_noord_1k.exr new file mode 100644 index 0000000..699390a --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/metro_noord_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0e9a1e7a5f61f8998614140f41cc9975e1ef5604930c0fbdd1bcfeafeae9897 +size 6133617 diff --git a/isaac_src/assets/textures/skyboxes/neon_photostudio_1k.exr b/isaac_src/assets/textures/skyboxes/neon_photostudio_1k.exr new file mode 100644 index 0000000..aaa23b0 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/neon_photostudio_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d008788723a2c1794223a3423e3d1c8ab5f87e92b062eb0de45d1a70197e383 +size 1436793 diff --git a/isaac_src/assets/textures/skyboxes/pine_attic_1k (1).exr b/isaac_src/assets/textures/skyboxes/pine_attic_1k (1).exr new file mode 100644 index 0000000..c33f919 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/pine_attic_1k (1).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd1f807ff16a0d19c577aedc24397c516c77ceefcd54a9fa713c34717a764e2b +size 1576706 diff --git a/isaac_src/assets/textures/skyboxes/pine_attic_1k.exr b/isaac_src/assets/textures/skyboxes/pine_attic_1k.exr new file mode 100644 index 0000000..c33f919 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/pine_attic_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd1f807ff16a0d19c577aedc24397c516c77ceefcd54a9fa713c34717a764e2b +size 1576706 diff --git a/isaac_src/assets/textures/skyboxes/poly_haven_studio_1k.exr b/isaac_src/assets/textures/skyboxes/poly_haven_studio_1k.exr new file mode 100644 index 0000000..758fc5f --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/poly_haven_studio_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2d731e710618af97fa196c141f9e5a0b29fc999fc170b0b672cafb80e41a42 +size 5983944 diff --git a/isaac_src/assets/textures/skyboxes/pretville_cinema_1k.exr b/isaac_src/assets/textures/skyboxes/pretville_cinema_1k.exr new file mode 100644 index 0000000..4fd4ffb --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/pretville_cinema_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d12afa35382981c326c6700885fbba80d6b83dd222d7b319ae09adbce89e12a +size 6033133 diff --git a/isaac_src/assets/textures/skyboxes/rostock_arches_1k.exr b/isaac_src/assets/textures/skyboxes/rostock_arches_1k.exr new file mode 100644 index 0000000..1a68315 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/rostock_arches_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf758f436a642fdb85bd94f96b07861d30a9f78a9b7a5564f0aef3bebab25ff7 +size 5592062 diff --git a/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k (1).exr b/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k (1).exr new file mode 100644 index 0000000..0b32f3f --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k (1).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e84ac0d3ea5710e6b6cdcbcb60c2d97fe0e12e322fc50477eb2ed1d02037fbd +size 6118459 diff --git a/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k.exr b/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k.exr new file mode 100644 index 0000000..0b32f3f --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/rostock_laage_airport_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e84ac0d3ea5710e6b6cdcbcb60c2d97fe0e12e322fc50477eb2ed1d02037fbd +size 6118459 diff --git a/isaac_src/assets/textures/skyboxes/royal_esplanade_1k.exr b/isaac_src/assets/textures/skyboxes/royal_esplanade_1k.exr new file mode 100644 index 0000000..12eb833 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/royal_esplanade_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545710527cb97cb7183042d2e2046427afc49549a49da5ec8e8b7e676a15c22d +size 1617635 diff --git a/isaac_src/assets/textures/skyboxes/studio_country_hall_1k.exr b/isaac_src/assets/textures/skyboxes/studio_country_hall_1k.exr new file mode 100644 index 0000000..64e64dc --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/studio_country_hall_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b25030db030386b84df5d68ab649860e50377f3bcb9c3a933311654d92a316d +size 1571512 diff --git a/isaac_src/assets/textures/skyboxes/studio_small_02_1k.exr b/isaac_src/assets/textures/skyboxes/studio_small_02_1k.exr new file mode 100644 index 0000000..b6a9b76 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/studio_small_02_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:364c05626831ccc8e82c39a1ad47f29df842d2c72f33e2406459f6698fa51b7c +size 1473750 diff --git a/isaac_src/assets/textures/skyboxes/thatch_chapel_1k (1).exr b/isaac_src/assets/textures/skyboxes/thatch_chapel_1k (1).exr new file mode 100644 index 0000000..31ccbdb --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/thatch_chapel_1k (1).exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7fb4f783324c869bdd90848ae3a5fffba3719ab17fa30edcfa66abba6277d8c +size 6119203 diff --git a/isaac_src/assets/textures/skyboxes/thatch_chapel_1k.exr b/isaac_src/assets/textures/skyboxes/thatch_chapel_1k.exr new file mode 100644 index 0000000..31ccbdb --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/thatch_chapel_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7fb4f783324c869bdd90848ae3a5fffba3719ab17fa30edcfa66abba6277d8c +size 6119203 diff --git a/isaac_src/assets/textures/skyboxes/warm_restaurant_1k.exr b/isaac_src/assets/textures/skyboxes/warm_restaurant_1k.exr new file mode 100644 index 0000000..9cc8103 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/warm_restaurant_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b596d8666c7cb4622937bb53756713856bfebce1e311edfdf31972ce21653c5 +size 6091303 diff --git a/isaac_src/assets/textures/skyboxes/warm_restaurant_night_1k.exr b/isaac_src/assets/textures/skyboxes/warm_restaurant_night_1k.exr new file mode 100644 index 0000000..90a85d0 --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/warm_restaurant_night_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87d4f2b0a7a65a8fdd2741ea7f5aece551bb77dfe5f68a9d3e2fb00a45c9072c +size 6198551 diff --git a/isaac_src/assets/textures/skyboxes/workshop_1k.exr b/isaac_src/assets/textures/skyboxes/workshop_1k.exr new file mode 100644 index 0000000..b95f38f --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/workshop_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93d55a77afc4a02c06194c9a5ad695ec3825187c8844c74ca9054c51cd8ee387 +size 6161740 diff --git a/isaac_src/assets/textures/skyboxes/wrestling_gym_1k.exr b/isaac_src/assets/textures/skyboxes/wrestling_gym_1k.exr new file mode 100644 index 0000000..e97973d --- /dev/null +++ b/isaac_src/assets/textures/skyboxes/wrestling_gym_1k.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfb9da2395776dd7bcaec311915a930976804ff8d026a13420a32696000dbf96 +size 1219456 diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/path_utils.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/path_utils.py new file mode 100644 index 0000000..24a1a18 --- /dev/null +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/path_utils.py @@ -0,0 +1,23 @@ +from pathlib import Path + + +def get_next_numbered_dir(contains_numbered_dirs: Path, prefix: str) -> Path: + """Get the next directory within path assuming there exist directories with names + like "dir_001".""" + contains_numbered_dirs.mkdir(parents=True, exist_ok=True) + existing_numbered_dirs = [ + int(p.name.split("_")[-1]) + for p in contains_numbered_dirs.iterdir() + if p.is_dir() + ] + next_number = max(existing_numbered_dirs, default=0) + 1 + return contains_numbered_dirs / f"{prefix}_{next_number:03d}" + + +def get_all_textures_in_dir(directory: Path) -> list[Path]: + """Recursively find all .png and .jpg files in the given directory.""" + return ( + list(directory.rglob("*.png")) + + list(directory.rglob("*.jpg")) + + list(directory.rglob("*.exr")) + ) diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/schema.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/schema.py index 9425901..afacd85 100644 --- a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/schema.py +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/schema.py @@ -1,3 +1,124 @@ -TIMESTEPS_FILENAME = "timesteps" -SCENE_FILENAME = "scene" -DEFAULT_RECORDINGS_DIR = "/robot/synthetic-output/recordings/" +from pathlib import Path + +import omni.replicator.core as rep +from pydantic import BaseModel + +TIMESTEPS_FILENAME = "timesteps" # usd +SCENE_FILENAME = "scene" # usd +METADATA_FILENAME = "metadata.json" +DEFAULT_MESH_TEXTURES_DIR = Path( + "/robot/isaac_src/assets/textures/512x512-photorealistic" +) +DEFAULT_SKYBOX_TEXTURES_DIR = Path("/robot/isaac_src/assets/textures/skyboxes") +DEFAULT_RECORDINGS_DIR = Path("/robot/synthetic-output/recordings/") + +BOUND = tuple[float, float, float] + + +class TrajectoryRecordingMeta(BaseModel): + start_time: float = 0.0 + end_time: float + + +class TrajectoryRecording: + def __init__(self, directory: Path, expect_exists: bool = True): + self.directory = directory + self.renders_dir = directory / "renders" + self.metadata_path = directory / METADATA_FILENAME + self.scene_path = directory / f"{SCENE_FILENAME}.usd" + self.timesteps_path = directory / f"{TIMESTEPS_FILENAME}.usd" + + if expect_exists and not self.validate(): + raise FileNotFoundError("Incomplete trajectory recording!") + + def validate(self): + return all( + [ + self.metadata_path.is_file(), + self.scene_path.is_file(), + self.timesteps_path.is_file(), + self.renders_dir.is_dir(), + ] + ) + + @property + def metadata(self) -> TrajectoryRecordingMeta: + return TrajectoryRecordingMeta.model_validate_json( + self.metadata_path.read_text() + ) + + +class CameraDistribution(BaseModel): + pos_offset_max: tuple[float, float, float] + pos_offset_min: tuple[float, float, float] | None = None + + rot_offset_max: tuple[float, float, float] + rot_offset_min: tuple[float, float, float] | None = None + + @property + def position_distribution(self): + return self._uniform(self.pos_offset_max, self.pos_offset_min) + + @property + def rotation_distribution(self): + return self._uniform(self.rot_offset_max, self.rot_offset_min) + + def _uniform(self, max_bound: BOUND, min_bound: BOUND | None): + if min_bound is None: + min_bound = [-n for n in max_bound] + # Sanity check + assert all(min_bound[i] <= max_bound[i] for i in range(3)) + return rep.distribution.uniform(min_bound, max_bound) + + +class RandomizationDistributions(BaseModel): + # Choose how fast or slow the robot moves. This allows you to "stretch" or + # "squish" the trajectory in time. + min_render_fps: int = 10 + max_render_fps: int = 50 + + # Choose number of materials to randomize + min_materials: int = 1 + max_materials: int = 50 + + # Choose how much to modify lighting position + light_pos_offset: tuple[float, float, float] = (0.1, 0.1, 0.1) + light_rot_offset: tuple[float, float, float] = (45, 45, 45) + + # Camera name -> randomization params + # One is randomly chosen per full trajectory run + camera_params: dict[str, list[CameraDistribution]] = { + "top": [ + # Vary rotation as much as possible + CameraDistribution( + pos_offset_min=(0, 0, 0), + pos_offset_max=(0, 0, 0), + rot_offset_min=(-10.0, -6.0, -5.0), # Validated + rot_offset_max=(1.0, 6.0, 5.0), # Validated + ), + # Vary position around within a small range + CameraDistribution( + pos_offset_min=(-0.08, -0.05, -0.025), # Validated + pos_offset_max=(0.08, 0.02, 0.25), # Validated + rot_offset_min=(0, 0, 0), + rot_offset_max=(0, 0, 0), + ), + # Keep the Z far from the normal position, allowing for drastic rotations + # around the Z axis + CameraDistribution( + pos_offset_min=(0, 0, 0.15), + pos_offset_max=(0, 0, 0.35), + rot_offset_min=(0.0, 0, -50), + rot_offset_max=(0.0, 0, 50), + ), + ], + "wrist": [ + # Strategy: Set rot offset to 10, and maximize the position offset while + # keeping the picker tip in view + CameraDistribution( + pos_offset_max=(0.01, 0.005, 0.015), # Validated + rot_offset_min=[-15, -10, -10], # Validated + rot_offset_max=[7, 10, 10], # Validated + ) + ], + } diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/__init__.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/__init__.py index 17b82c4..e69de29 100644 --- a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/__init__.py +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/__init__.py @@ -1 +0,0 @@ -from .test_hello_world import * diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/test_hello_world.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/test_hello_world.py index 85faee4..b65e689 100644 --- a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/test_hello_world.py +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/tests/test_hello_world.py @@ -1,16 +1,11 @@ -# NOTE: -# omni.kit.test - std python's unittest module with additional wrapping to add suport for async/await tests -# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html import omni.kit.test # Extnsion for writing UI tests (simulate UI interaction) from omni.kit import ui_test -# Import extension python module we are testing with absolute import path, as if we are external user (other extension) import trajectory_synth -# Having a test class dervived from omni.kit.test.AsyncTestCase declared on the root of module will make it auto-discoverable by omni.kit.test class Test(omni.kit.test.AsyncTestCase): # Before running each test async def setUp(self): diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_recorder.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_recorder.py index c617b4a..2d63768 100644 --- a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_recorder.py +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_recorder.py @@ -1,12 +1,11 @@ -import os -import re +from pathlib import Path import omni.ext import omni.kit.commands from omni import ui from pxr import Sdf -from .schema import DEFAULT_RECORDINGS_DIR, SCENE_FILENAME, TIMESTEPS_FILENAME +from . import path_utils, schema class TrajectoryRecorderExtension(omni.ext.IExt): @@ -19,33 +18,30 @@ def on_startup(self, ext_id): self.mover_omnigraph_path = ( "/robot/isaac_src/assets/omnigraphs/mover_actiongraph.usd" ) - self.recordings_dir = DEFAULT_RECORDINGS_DIR # Default directory + self.recordings_dir = schema.DEFAULT_RECORDINGS_DIR # UI Window self._window = ui.Window("Trajectory Recorder", width=400, height=200) - with self._window.frame: - with ui.VStack(spacing=10): - # Mover Omnigraph Path Input - with ui.HStack(spacing=10): - ui.Label("Mover Omnigraph Path:", width=150) - self.mover_omnigraph_field = ui.StringField() - self.mover_omnigraph_field.model.set_value( - self.mover_omnigraph_path - ) - - # Recordings Directory Input - with ui.HStack(spacing=10): - ui.Label("Recordings Directory:", width=150) - self.directory_field = ui.StringField() - self.directory_field.model.set_value(self.recordings_dir) - - # Status Label - self.status_label = ui.Label("Ready", alignment=ui.Alignment.CENTER) - - # Single Toggle Button for Start/Stop Recording - self.toggle_recording_button = ui.Button( - "Start Recording", clicked_fn=self.toggle_recording - ) + with self._window.frame, ui.VStack(spacing=10): + # Mover Omnigraph Path Input + with ui.HStack(spacing=10): + ui.Label("Mover Omnigraph Path:", width=150) + self.mover_omnigraph_field = ui.StringField() + self.mover_omnigraph_field.model.set_value(self.mover_omnigraph_path) + + # Recordings Directory Input + with ui.HStack(spacing=10): + ui.Label("Recordings Directory:", width=150) + self.directory_field = ui.StringField() + self.directory_field.model.set_value(str(self.recordings_dir)) + + # Status Label + self.status_label = ui.Label("Ready", alignment=ui.Alignment.CENTER) + + # Single Toggle Button for Start/Stop Recording + self.toggle_recording_button = ui.Button( + "Start Recording", clicked_fn=self.toggle_recording + ) def toggle_recording(self): if self.recording: @@ -54,30 +50,28 @@ def toggle_recording(self): self.start_recording() def start_recording(self): + # TODO: Prevent this being called multiple times while recording + # Reset the timeline timeline = omni.timeline.get_timeline_interface() timeline.stop() timeline.set_current_time(0) # Get directory from the user input - self.recordings_dir = self.directory_field.model.get_value_as_string() - if not os.path.exists(self.recordings_dir): - os.makedirs(self.recordings_dir) + self.recordings_dir = Path(self.directory_field.model.get_value_as_string()) + self.recordings_dir.mkdir(parents=True, exist_ok=True) # Create a new episode directory - next_episode = self.get_next_episode_number(self.recordings_dir) - self.current_episode_dir = os.path.join( - self.recordings_dir, f"episode_{next_episode:04d}" + self.current_episode = schema.TrajectoryRecording( + path_utils.get_next_numbered_dir(self.recordings_dir, "episode"), + expect_exists=False, ) - os.makedirs(self.current_episode_dir, exist_ok=True) # Save the current scene without the omnigraph self.ensure_omnigraph_loaded(loaded=False) stage = omni.usd.get_context().get_stage() - scene_file_path = os.path.join( - self.current_episode_dir, f"{SCENE_FILENAME}.usd" - ) - stage.GetRootLayer().Export(scene_file_path) + scene_file_path = self.current_episode.scene_path + stage.GetRootLayer().Export(str(scene_file_path)) print(f"Scene saved to {scene_file_path}") # Ensure the omnigraph is loaded @@ -93,12 +87,12 @@ def start_recording(self): end_frame=0, use_preroll=False, preroll_frame=0, - record_to="NEW_LAYER", + record_to="FILE", fps=0, apply_root_anim=False, increment_name=False, - record_folder=self.current_episode_dir, - take_name=TIMESTEPS_FILENAME, + record_folder=str(self.current_episode.directory), + take_name=schema.TIMESTEPS_FILENAME, ) self.recording = True @@ -107,17 +101,30 @@ def start_recording(self): timeline.play() # Start the timeline playback def stop_recording(self): + # Stop the recording + omni.kit.commands.execute("StopRecording") + # Stop the timeline timeline = omni.timeline.get_timeline_interface() timeline.stop() - # Stop the recording - omni.kit.commands.execute("StopRecording") - self.recording = False self.toggle_recording_button.text = "Start Recording" self.update_status("Recording stopped.") + # Write the metadata file + metadata_file_path = self.current_episode.metadata_path + metadata = schema.TrajectoryRecordingMeta(end_time=timeline.get_current_time()) + metadata_file_path.write_text(metadata.model_dump_json()) + + # Create the 'renders' directory, then validate the recording + self.current_episode.renders_dir.mkdir(parents=True, exist_ok=False) + + # Validate the recording + if not self.current_episode.validate(): + self.update_status("Recording failed validation. Somethings wrong!") + return + def ensure_omnigraph_loaded(self, loaded: bool) -> None: # Check or remove the omnigraph as needed stage = omni.usd.get_context().get_stage() @@ -142,18 +149,6 @@ def ensure_omnigraph_loaded(self, loaded: bool) -> None: omni.kit.commands.execute("DeletePrims", paths=["/World/MoverOmnigraph"]) self.update_status("Mover omnigraph removed.") - def get_next_episode_number(self, directory): - # Scan the directory for existing episode directories - episodes = [] - if os.path.exists(directory): - for name in os.listdir(directory): - match = re.match(r"episode_(\d+)", name) - if match: - episodes.append(int(match.group(1))) - - # Return the next episode number - return max(episodes, default=0) + 1 - def update_status(self, message): # Update the status label self.status_label.text = message diff --git a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_replayer.py b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_replayer.py index 7979786..c35eae4 100644 --- a/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_replayer.py +++ b/isaac_src/extensions/trajectory_synth/exts/trajectory_synth/trajectory_synth/traj_replayer.py @@ -1,82 +1,330 @@ -import os +import asyncio +import random from pathlib import Path +from typing import Literal import omni.ext import omni.kit.commands +import omni.replicator.core as rep +import omni.timeline import omni.usd +import yaml from omni import ui from pxr import Sdf +from pydantic import ValidationError -from .schema import DEFAULT_RECORDINGS_DIR +from . import path_utils, schema class TrajectoryReplayerExtension(omni.ext.IExt): def on_startup(self, ext_id): print("[trajectory_synth] trajectory_replayer startup") - # UI Window - self._window = ui.Window("Trajectory Replayer", width=400, height=200) - with self._window.frame: - with ui.VStack(spacing=10): - # Recordings Directory Input - with ui.HStack(spacing=10): - ui.Label("Recordings Directory:", width=150) - self.recordings_dir_field = ui.StringField() - self.recordings_dir_field.model.set_value(DEFAULT_RECORDINGS_DIR) - - # Episode Number Input - with ui.HStack(spacing=10): - ui.Label("Episode Number:", width=150) - self.episode_number_field = ui.IntField() - self.episode_number_field.model.set_value(0) - - # Replay Button - self.replay_button = ui.Button("Replay", clicked_fn=self.replay_episode) - - def replay_episode(self): - # Get user inputs - recordings_dir = self.recordings_dir_field.model.get_value_as_string() - episode_number = self.episode_number_field.model.get_value_as_int() + self._build_ui() + + def _build_ui(self): + self._window = ui.Window("Trajectory Replayer", width=400, height=500) + with self._window.frame, ui.VStack(spacing=10): + # Recordings Directory Input + with ui.HStack(spacing=10): + ui.Label("Recordings Directory:", width=150) + self.recordings_dir_field = ui.StringField() + self.recordings_dir_field.model.set_value( + str(schema.DEFAULT_RECORDINGS_DIR) + ) + + with ui.HStack(spacing=10): + ui.Label("Mesh Textures Directory:", width=150) + self.mesh_textures_dir_field = ui.StringField() + self.mesh_textures_dir_field.model.set_value( + str(schema.DEFAULT_MESH_TEXTURES_DIR) + ) + self.skybox_textures_dir_field = ui.StringField() + self.skybox_textures_dir_field.model.set_value( + str(schema.DEFAULT_SKYBOX_TEXTURES_DIR) + ) + + # Episode Number Input + with ui.HStack(spacing=10): + ui.Label("Episode Number:", width=150) + self.episode_number_field = ui.IntField() + self.episode_number_field.model.set_value(1) + + # Camera Selection + with ui.HStack(spacing=10): + ui.Label("Select Cameras:", width=150) + self.camera_selector = ui.StringField() + self.camera_selector.model.set_value("top,wrist") + self.camera_selector.tooltip = ( + "Enter a comma-separated list of camera names, referenced by " + "their prim name" + ) + + # Resolution Input + with ui.HStack(spacing=10): + ui.Label("Resolution Width:", width=150) + self.resolution_width_field = ui.IntField() + self.resolution_width_field.model.set_value(320) + + ui.Label("Resolution Height:", width=150) + self.resolution_height_field = ui.IntField() + self.resolution_height_field.model.set_value(240) + + # Number of Renders Input + with ui.HStack(spacing=10): + ui.Label("Number of Renders:", width=150) + self.num_renders_field = ui.IntField() + self.num_renders_field.model.set_value(1) + + # Render Settings + with ui.CollapsableFrame("Randomization Settings", height=200): + self.render_settings_field = ui.StringField(multiline=True) + default_randomization = schema.RandomizationDistributions().model_dump() + self.render_settings_field.model.set_value( + yaml.safe_dump(default_randomization, sort_keys=False) + ) - if not Path(recordings_dir).is_dir(): - print("Please provide a valid recordings directory and episode number.") + # Render Button + self.render_button = ui.Button( + "Render", + clicked_fn=lambda: asyncio.ensure_future(self.render_multiple_times()), + ) + self.status_label = ui.Label("", alignment=ui.Alignment.CENTER) + + def update_status(self, message): + print(f"[trajectory_synth] Status: {message}") + self.status_label.text = message + + async def render_multiple_times(self) -> None: + self.render_button.enabled = False + num_renders = self.num_renders_field.model.get_value_as_int() + + # Load DomainRandomization from UI + try: + randomization_config = schema.RandomizationDistributions( + **yaml.safe_load(self.render_settings_field.model.get_value_as_string()) + ) + except ValidationError as e: + self.update_status(f"Invalid Render Settings: {e}") + self.render_button.enabled = True return - # Construct paths - episode_dir = os.path.join(recordings_dir, f"episode_{episode_number:04d}") - scene_usd_path = os.path.join(episode_dir, "scene.usd") - timesteps_usd_path = os.path.join(episode_dir, "timesteps.usd") + for i in range(num_renders): + self.update_status(f"Starting render {i + 1} of {num_renders}...") + try: + await self.replay_episode( + render_index=i, randomization_config=randomization_config + ) + except Exception as e: + self.update_status(f"Failed to render: {e}") + raise + finally: + self.render_button.enabled = True + + self.update_status("All renders completed.") - # Validate paths - if not os.path.exists(scene_usd_path): - print(f"Scene file not found: {scene_usd_path}") + async def replay_episode( + self, render_index: int, randomization_config: schema.RandomizationDistributions + ) -> None: + # Get user inputs + recordings_dir = Path(self.recordings_dir_field.model.get_value_as_string()) + episode_number = self.episode_number_field.model.get_value_as_int() + resolution_width = self.resolution_width_field.model.get_value_as_int() + resolution_height = self.resolution_height_field.model.get_value_as_int() + selected_camera_names = [ + name.strip() + for name in self.camera_selector.model.get_value_as_string().split(",") + ] + + episode_path = recordings_dir / f"episode_{episode_number:03d}" + if not episode_path.is_dir(): + self.update_status("Invalid recordings directory or episode number.") return - if not os.path.exists(timesteps_usd_path): - print(f"Timesteps file not found: {timesteps_usd_path}") + # Construct paths + try: + traj_recording = schema.TrajectoryRecording(episode_path) + except FileNotFoundError: + self.update_status("Invalid trajectory recording, file missing.") return # Step 1: New Scene omni.usd.get_context().new_stage() - print("New scene created.") + self.update_status("New scene created.") # Step 2: Insert timesteps.usd and scene.usd stage = omni.usd.get_context().get_stage() root_layer = stage.GetRootLayer() - root_layer.subLayerPaths.append(timesteps_usd_path) - root_layer.subLayerPaths.append(scene_usd_path) + root_layer.subLayerPaths.append(str(traj_recording.timesteps_path)) + root_layer.subLayerPaths.append(str(traj_recording.scene_path)) - # Step 4: Set scene.usd as the authoring layer, without this replay won't work - scene_layer = Sdf.Layer.FindOrOpen(scene_usd_path) + # Step 3: Set scene.usd as the authoring layer + # Without this, timesteps don't seem to play when the timeline starts + scene_layer = Sdf.Layer.FindOrOpen(str(traj_recording.scene_path)) if scene_layer: stage.SetEditTarget(scene_layer) - print(f"Set {scene_usd_path} as the authoring layer.") + self.update_status( + f"Set {traj_recording.scene_path} as the authoring layer." + ) else: - print(f"Failed to set {scene_usd_path} as the authoring layer.") + self.update_status( + f"Failed to set {traj_recording.scene_path} as the authoring layer." + ) + return + + # Step 4: Validate Cameras + selected_cameras = self.get_cameras_from_names(selected_camera_names) + if len(selected_cameras) != len(selected_camera_names): + return - # Step 5: Start the timeline + # Step 5: Initialize Replicator and Create Render Products + self.update_status("Initializing replicator configuration...") + self._set_up_replicator( + config=randomization_config, + camera_names=selected_cameras, + render_resolution=(resolution_width, resolution_height), + render_path=path_utils.get_next_numbered_dir( + traj_recording.renders_dir, "render" + ), + mesh_textures_path=Path( + self.mesh_textures_dir_field.model.get_value_as_string() + ), + skylight_textures_path=Path( + self.skybox_textures_dir_field.model.get_value_as_string() + ), + ) + + # Step 6: Control Timeline Manually timeline = omni.timeline.get_timeline_interface() - timeline.play() - print("Timeline started.") + timeline.set_current_time(0.0) + await omni.kit.app.get_app().next_update_async() + + framerate = random.randint( + randomization_config.min_render_fps, randomization_config.max_render_fps + ) + end_time = traj_recording.metadata.end_time + final_frame = int(round(end_time * framerate)) + + for frame in range(final_frame): + timeline.set_current_time(frame / framerate) + timeline.forward_one_frame() + await rep.orchestrator.step_async() + await omni.kit.app.get_app().next_update_async() + + self.update_status( + f"Rendering frame {frame}/{final_frame} of render {render_index + 1}" + ) + + timeline.stop() + await omni.kit.app.get_app().next_update_async() + + self.update_status(f"Render {render_index + 1} completed.") + + def get_cameras_from_names(self, selected_camera_names: list[str]): + available_cameras = self.get_stage_prims("Camera") + available_camera_names = [camera.GetName() for camera in available_cameras] + + invalid_cameras = [ + name for name in selected_camera_names if name not in available_camera_names + ] + if invalid_cameras: + self.update_status( + f"Invalid cameras: {', '.join(invalid_cameras)}. " + f"Available cameras: {', '.join(available_camera_names)}" + ) + return [] + return [ + camera + for camera in available_cameras + if camera.GetName() in selected_camera_names + ] + + def get_stage_prims(self, type_name: Literal["Camera"], keep_matches: bool = True): + stage = omni.usd.get_context().get_stage() + return [ + prim + for prim in stage.Traverse() + if (prim.GetTypeName() == type_name) is keep_matches + ] def on_shutdown(self): print("[trajectory_synth] trajectory_replayer shutdown") + + @staticmethod + def _set_up_replicator( + config: schema.RandomizationDistributions, + render_path: Path, + mesh_textures_path: Path, + skylight_textures_path: Path, + camera_names: list[str], + render_resolution: tuple[int, int], + ): + # Create cameras and randomize their positions + # TODO: Consider using custom events for more explicit triggering + # https://forums.developer.nvidia.com/t/replicator-and-rep-orchestrator-step/314079 + render_products = [] + rep.set_global_seed(random.randint(0, 10000)) # Not strictly necessary + for camera in camera_names: + camera_name = camera.GetName() + camera_configs = config.camera_params[camera_name] + chosen_for_camera = random.choice(camera_configs) + + # Apply randomization using Replicator + camera_path = str(camera.GetPath()) + camera_prim = rep.get.prims(camera_path) + with camera_prim: + rep.modify.pose( + position=chosen_for_camera.position_distribution, + rotation=chosen_for_camera.rotation_distribution, + ) + + render_product = rep.create.render_product(camera_path, render_resolution) + render_products.append((camera.GetName(), render_product)) + + # Randomize textures of all prims + mesh_textures = [ + str(t) for t in path_utils.get_all_textures_in_dir(mesh_textures_path) + ] + prims_to_apply_materials = rep.get.mesh() + random_material = rep.create.material_omnipbr( + # Create random material properties + diffuse=rep.distribution.uniform((0, 0, 0), (1, 1, 1)), + roughness=rep.distribution.uniform(0, 1), + metallic=rep.distribution.choice([0, 1]), + emissive_color=rep.distribution.uniform((0, 0, 0.5), (0, 0, 1)), + emissive_intensity=rep.distribution.uniform(0, 1000), + # Texturize the material properties + diffuse_texture=rep.distribution.choice(mesh_textures), + roughness_texture=rep.distribution.choice(mesh_textures), + metallic_texture=rep.distribution.choice(mesh_textures), + emissive_texture=rep.distribution.choice(mesh_textures), + count=random.randint(config.min_materials, config.max_materials), + project_uvw=True, + ) + rep.randomizer.materials( + materials=random_material, input_prims=prims_to_apply_materials + ) + + # Create a skybox with a texture + skylight_textures = [ + str(t) for t in path_utils.get_all_textures_in_dir(skylight_textures_path) + ] + rep.create.light( + rotation=rep.distribution.uniform((0, -180, -180), (0, 180, 180)), + intensity=rep.distribution.normal(400, 100), + temperature=rep.distribution.normal(6500, 1000), + light_type="dome", + texture=rep.distribution.choice(skylight_textures), + name="Skybox", + ) + with rep.get.light(): + rep.modify.pose( + position=config.light_pos_offset, + rotation=config.light_rot_offset, + ) + + # Create output directory for renders + for camera_name, render_product in render_products: + camera_output_path = render_path / camera_name + writer = rep.WriterRegistry.get("BasicWriter") + writer.initialize(output_dir=str(camera_output_path), rgb=True) + writer.attach([render_product]) diff --git a/isaac_src/extensions/trajectory_synth/tools/packman/bootstrap/install_package.py b/isaac_src/extensions/trajectory_synth/tools/packman/bootstrap/install_package.py index 98d6c7a..41d30e2 100644 --- a/isaac_src/extensions/trajectory_synth/tools/packman/bootstrap/install_package.py +++ b/isaac_src/extensions/trajectory_synth/tools/packman/bootstrap/install_package.py @@ -44,8 +44,6 @@ def install_package(package_src_path, package_dst_path): zip_file.extractall(temp_dir) # Recursively copy (temp_dir will be automatically cleaned up on exit) try: - # Recursive copy is needed because both package name and version folder could be missing in - # target directory: shutil.copytree(temp_dir, package_dst_path) except OSError: logger.warning( diff --git a/isaac_src/extensions/trajectory_synth/tools/scripts/link_app.py b/isaac_src/extensions/trajectory_synth/tools/scripts/link_app.py index 217d79b..3aabd68 100644 --- a/isaac_src/extensions/trajectory_synth/tools/scripts/link_app.py +++ b/isaac_src/extensions/trajectory_synth/tools/scripts/link_app.py @@ -11,9 +11,10 @@ def find_omniverse_apps(): http = urllib3.PoolManager() try: r = http.request("GET", "http://127.0.0.1:33480/components") - except Exception as e: + except Exception as e: # noqa: BLE001 print( - f"Failed retrieving apps from an Omniverse Launcher, maybe it is not installed?\nError: {e}" + f"Failed retrieving apps from an Omniverse Launcher, maybe it is not " + f"installed?\nError: {e}" ) sys.exit(1) @@ -42,12 +43,14 @@ def create_link(src, dst): ) parser.add_argument( "--path", - help="Path to Kit App installed from Omniverse Launcher, e.g.: 'C:/Users/bob/AppData/Local/ov/pkg/create-2021.3.4'", + help="Path to Kit App installed from Omniverse Launcher, e.g.: " + "'C:/Users/bob/AppData/Local/ov/pkg/create-2021.3.4'", required=False, ) parser.add_argument( "--app", - help="Name of Kit App installed from Omniverse Launcher, e.g.: 'code', 'create'", + help="Name of Kit App installed from Omniverse Launcher, " + "e.g.: 'code', 'create'", required=False, ) args = parser.parse_args() @@ -58,7 +61,8 @@ def create_link(src, dst): apps = find_omniverse_apps() if len(apps) == 0: print( - "Can't find any Omniverse Apps. Use Omniverse Launcher to install one. 'Code' is the recommended app for developers." + "Can't find any Omniverse Apps. Use Omniverse Launcher to install one. " + "'Code' is the recommended app for developers." ) sys.exit(0) @@ -72,7 +76,8 @@ def create_link(src, dst): if selected_app not in apps: choices = ", ".join(apps.keys()) print( - f"Passed app: '{selected_app}' is not found. Specify one of the following found Apps: {choices}" + f"Passed app: '{selected_app}' is not found. Specify one of the " + f"following found Apps: {choices}" ) sys.exit(0) else: @@ -83,9 +88,9 @@ def create_link(src, dst): print(f"\nSelected app: {selected_app}") _, path = apps[selected_app] - if not os.path.exists(path): + if not os.path.exists(path): # noqa: PTH110 print(f"Provided path doesn't exist: {path}") else: - SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__)) + SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__)) # noqa: PTH120 create_link(f"{SCRIPT_ROOT}/../../app", path) print("Success!") diff --git a/launch-profiles/synthetic_generation/isaac-sim-assets/main-scene.usd b/launch-profiles/synthetic_generation/isaac-sim-assets/main-scene.usd index ef6417c..51a4f5a 100644 --- a/launch-profiles/synthetic_generation/isaac-sim-assets/main-scene.usd +++ b/launch-profiles/synthetic_generation/isaac-sim-assets/main-scene.usd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5378adddb885436a3fe80a9211d0f5e9c759efab8a28dd24bbd211dcb69b7d49 -size 102120 +oid sha256:7c6f8c1e013559ea8c509b1f0147f929d7ecc87044ce859bb4b01e656cabf4c8 +size 196676 diff --git a/launch-profiles/teleop_myarm/isaac-sim-assets/main-scene.usd b/launch-profiles/teleop_myarm/isaac-sim-assets/main-scene.usd index 94d58e4..86844a4 100644 --- a/launch-profiles/teleop_myarm/isaac-sim-assets/main-scene.usd +++ b/launch-profiles/teleop_myarm/isaac-sim-assets/main-scene.usd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a204ac1c9a94467accaec0d9afc2644a90897a3f51f60dab5d7fe11bbd61e2a -size 52643 +oid sha256:a383ad5be6c94a6bc6bd4856f38bc12c2133344dd3257a5087a739086e2bd92d +size 54743 diff --git a/pkgs/myarm_ai/myarm_ai/nodes/base_robot_node.py b/pkgs/myarm_ai/myarm_ai/nodes/base_robot_node.py index 43271ca..b793bf3 100644 --- a/pkgs/myarm_ai/myarm_ai/nodes/base_robot_node.py +++ b/pkgs/myarm_ai/myarm_ai/nodes/base_robot_node.py @@ -16,7 +16,8 @@ class BaseRobotNode(HelpfulNode, ABC): urdf: type[MyArmCURDF] | type[MyArmMURDF] class Parameters(BaseModel): - joint_publish_hz: float = 20.0 + # This will run faster than the read/write speed + joint_publish_hz: float = 100.0 robot_protocol: type[BaseRobotProtocol] # In joint units diff --git a/pyproject.toml b/pyproject.toml index 1442126..2abc919 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,6 +79,8 @@ ignore = [ "ARG", # flake8-unused-arguments: disabled, too many false positives "ISC001", # ruff throws warnings if we use its formatter but also have this enabled "B027", # Doesn't allow empty methods in an abstract class + "T201", # Isaac sim encourages "print" statements for debugging + "PT009", # isaacsim doesn't use pytest :( ] [tool.ruff.lint.per-file-ignores]