Add PPISP camera QA demos and discovery fallback#5748
Conversation
There was a problem hiding this comment.
Update (4f5b859): New commits address both previous inline comments:
- ✅ Unused rgb_hdr data type — Both demo scripts now use only
data_types=["rgb"]inmake_camera. - ✅ Unreachable final raise —
resolve_source_camera_bindingis restructured in both scripts; the dead-code branch is removed.
No new issues found in the incremental changes.
Update (35794d8): Reviewed incremental diff (CI refactoring, auto_camera_ppisp_cfg bug fix, test docstring updates, rendering-correctness test reorganization). No new issues. Previous fixes remain intact. LGTM.
Greptile SummaryThis PR fixes a discovery bug in
Confidence Score: 4/5The core bug fix is minimal and correct; the demo scripts are additive and carry only minor quality issues. The one-line fix to cfg.py is correct and well-tested. The two new demo scripts work as intended but have a stale docstring on the fixed function, an unused rgb_hdr data type that requests an extra render pass with no consumer, and dead unreachable code in both scripts' resolve_source_camera_binding. None of these affect correctness of the primary fix or the existing library. The docstring in cfg.py and the data_types list in ppisp_camera_ovrtx.py are the two spots worth a second look. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[auto_camera_ppisp_cfg\ncalled with camera_prim_path] --> B[Traverse stage prims]
B --> C{prim type ==\nRenderProduct?}
C -- No --> B
C -- Yes --> D{camera rel\ntargets camera_prim_path?}
D -- No --> B
D -- Yes --> E{PPISP child\nshader exists?}
E -- No --> B
E -- Yes --> F[Parse & return PpispCfg]
B -- exhausted --> G[return None]
style E fill:#c8f7c5,stroke:#27ae60
style G fill:#fadbd8,stroke:#e74c3c
H[OLD behavior removed\nreturn None immediately\nif matching RP lacks PPISP] -.->|was here| E
|
| ppisp_camera = make_camera( | ||
| camera_prim_path, | ||
| ppisp_cfg=ppisp_cfg, | ||
| width=width, | ||
| height=height, | ||
| data_types=["rgb", "rgb_hdr"], | ||
| ) |
There was a problem hiding this comment.
The PPISP camera is configured with
data_types=["rgb", "rgb_hdr"], but run_simulator only ever accesses data.output["rgb"]. The "rgb_hdr" channel is never read, so it requests an extra render pass (and any associated GPU memory / bandwidth) with no benefit.
| ppisp_camera = make_camera( | |
| camera_prim_path, | |
| ppisp_cfg=ppisp_cfg, | |
| width=width, | |
| height=height, | |
| data_types=["rgb", "rgb_hdr"], | |
| ) | |
| ppisp_camera = make_camera( | |
| camera_prim_path, | |
| ppisp_cfg=ppisp_cfg, | |
| width=width, | |
| height=height, | |
| data_types=["rgb"], | |
| ) |
| ) | ||
| raise RuntimeError(f"Failed to resolve PPISP binding for camera: {camera_prim_path}") | ||
|
|
||
|
|
||
| def source_camera_path_to_env_regex(source_stage, source_camera_prim_path: str) -> str: | ||
| """Map a source camera path to the duplicated-env camera regex.""" | ||
| default_prim = source_stage.GetDefaultPrim() | ||
| if not default_prim: |
There was a problem hiding this comment.
Unreachable final raise in
resolve_source_camera_binding
After the for-loop completes without returning, camera_prim_path is by definition absent from ppisp_camera_prim_paths (if it were present the loop would have matched and returned). Therefore the if camera_prim_path not in ppisp_camera_prim_paths: branch is always taken, and the final raise RuntimeError(f"Failed to resolve PPISP binding for camera: ...") on line 229 is dead code. The same pattern is duplicated in ppisp_camera_ovrtx.py.
63bbb5c to
6b0b554
Compare
|
Re-review update (6b0b554): Reviewed incremental changes since previous review (63bbb5c). ✅ Good changes:
|
6b0b554 to
13204ce
Compare
Review Update (13204ce)✅ Both previous concerns have been addressed:
Additional improvement in this commit:
LGTM 👍 |
|
@kellyguo11 : here is the QA PR (cannot add you as a reviewer) |
13204ce to
ac44ee0
Compare
🤖 Isaac Lab Review Bot - Follow-up ReviewCommit: ac44ee0 Previous Issues Status✅ Fixed: Unused ✅ Fixed: Unreachable code in New Changes in This Commit
SummaryAll previous review comments have been addressed. No new issues identified. LGTM ✅ |
ac44ee0 to
6132e0e
Compare
Re-review Update (6132e0e)Both previous concerns have been addressed: ✅ P2 (data_types): ✅ P2 (unreachable code): The dead Additionally, this commit:
LGTM 👍 |
6132e0e to
1f8ab7a
Compare
🤖 Review Update (1f8ab7a)✅ Both previous concerns addressed:
LGTM — no new issues found in the incremental changes. |
47a9d76 to
4f5b859
Compare
4f5b859 to
35794d8
Compare
Description
This PR adds QA-oriented PPISP camera demo workflows for USD-authored Gaussian scenes and fixes a PPISP auto-discovery edge case.
Summary:
scripts/demos/sensors/ppisp_camera.pyfor Kit-based PPISP validation withnewtonandisaac_rtxrenderers.scripts/demos/sensors/ppisp_camera_ovrtx.pyfor kit-less OVRTX PPISP validation.num_envs > 1.auto_camera_ppisp_cfg()so a matching RenderProduct without aPPISPchild does not prevent discovery of a later matching RenderProduct that does contain PPISP.isaaclab_ppispdocs/changelog scaffolding and a changelog fragment for the QA workflows.Motivation/context:
Existing unit tests cover PPISP renderer integration, but QA needed a user-facing workflow that validates PPISP through CameraSensor-style rendering on a real USD-authored Gaussian scene. These
demos provide that workflow without requiring training jobs or task-specific environment changes.
Dependencies:
isaaclab_ov/ovrtxstack installed.OVRTX_rtx_rtpt_gaussian_skipTonemapping_enabled=0Fixes #
Type of change
Screenshots
The demo scripts generate baseline / PPISP / diff image grids under the selected
--output_dir. Attach representative generated images here if desired.Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there