OMPE-103001: Render and animate Newton cables on all three renderers - #6981
Closed
jmart-nv wants to merge 1 commit into
Closed
OMPE-103001: Render and animate Newton cables on all three renderers#6981jmart-nv wants to merge 1 commit into
jmart-nv wants to merge 1 commit into
Conversation
Cable curve points are now computed on device from the Newton segment bodies and written GPU/ASYNC each frame, so cables follow their simulated pose instead of drawing at their spawn pose and never moving. Drops the CPU mirror in sync_cables_to_usd, which copied the whole model's body_q device-to-host on every dirty render frame. Adds the first rendering coverage for cables, gated on motion rather than presence, and fixes three defects found alongside: the view_count / camera-prim mismatch, the Isaac RTX sensor pump refreshing transforms only, and the Fabric stage being resolved exactly once at startup. Requires Kit !47946, !48359 and !48511, and OVRTX >= 0.4.1. The rendering cells skip below those floors rather than fail.
Collaborator
|
The work is being continued on #7016 |
Contributor
Author
|
Closing - superseded by #7016 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
UsdGeom.BasisCurves) now render and animate onnewton_warp,ovrtxandisaac_rtx. Previously they drew at their spawn pose and never moved.sync_cables_to_usd— it copied the whole model'sbody_qdevice→host on every dirty render frame, for a cable that reads only its own segments.view_count/camera-prim mismatch, the Isaac RTX sensor pump refreshing transforms only, and the Fabric stage being resolved exactly once at startup.Same scene, same seed, three renderers: cables fall and settle. A cable that isn't driven renders frozen at its spawn pose — it does not disappear — which is why the tests gate on centroid displacement.
Requires:
Cable rendering depends on renderer-side fixes that are not in the pinned Kit/OVRTX:
!47946,!48359,!48511>= 0.4.1The rendering cells skip below those floors rather than fail, so a green run on stock deps proves nothing. Check for
0 skipped.Changes:
isaaclabCameraRenderSpecrejects aview_countthat disagrees withcamera_prim_paths;Camerasizes it from the prims it found. Shared rendering-test harness inisaaclab.test.utils.cable_rendering.isaaclab_newtonsync_cables_to_usdruns on device and invalidates each curve's GPU data afterwards. Newcollect_cable_segment_shapes()for kit-less renderers. Lazy Fabric-stage recovery.isaaclab_ovisaaclab_physxpre_render()instead offorward(); empty-annotator-buffer guard.scripts/demos/cables.py--camera,--seed,--frames_dir. Camera pose baked into the cfg; cables moved under/World/envs/env_0/.Testing:
Three scenarios, each run on all three renderers — 9 cells:
test_cable_renderstest_cable_render_tracks_simulationtest_cable_renders_across_environmentsexport OMNI_KIT_ACCEPT_EULA=yes python -m pytest source/isaaclab_ov/test/ -q python -m pytest source/isaaclab/test/renderers/test_cable_rendering.py -q -ra python -m pytest source/isaaclab_physx/test/renderers/test_cable_rendering_isaac_rtx.py -q -ra python scripts/demos/cables.py --visualizer none --camera isaac_rtx --seed 7 --max_steps 60isaaclab_ovcontractisaac_rtxcellsConfirmed on four machines (1 Windows/RTX, 3 Linux/L40).
The
isaac_rtxcells live in their own module because Kit must start before anything imports USD — do not merge them into the kit-less module, and do not run both in one pytest process.Handoff notes for reviewers:
isaac_rtx_renderer.pyempty-buffer guard: never fires in any cell, ships without a test, and itsgetattr(buf, "size", None) == 0check cannot fire for a torch tensor (.sizeis a method there). The condition it was written for is now rejected earlier byCameraRenderSpec.__post_init__. Suggest dropping it from this PR and filing separately.pointslanes=3 dtype override only on numpy, not on DLPack producers. The legacy path — the GA one — stays zero-copy.collect_cable_segment_shapesduplicates the discovery half of_initialize_fabric_cable_prims. Deliberate: the Kit path raises on a malformed cable, the kit-less path skips it. Merging them would change one of those behaviours./World/Env_0/to/World/envs/env_0/— required for scene partitions, but it is a user-visible path change.Appendix - required Kit MRs:
All three are merged to
release/ovrtx-0.4-ovstage-0.1and labelledovrtx-0.4.1— which is where the OVRTX ≥ 0.4.1 floor comes from.Not enough points, N is required but 0 was found. Merged 2026-08-01.BasisCurvesin a partition published an inverted empty bbox, blanking every prim in that partition. Merged 2026-08-03.Type of change
Screenshots
Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched package (do not editCHANGELOG.rstor bumpextension.toml— CI handles that)CONTRIBUTORS.mdor my name already exists there