Add Sensor PPISP controller support for camera post-processing (#5947) - #6811
Add Sensor PPISP controller support for camera post-processing (#5947)#6811moennen wants to merge 4 commits into
Conversation
…-sim#5947) Adds PPISP `PPISPAuto` controller support to IsaacLab camera post-processing. This change parses embedded PPISP controller weights from USD/SPG-authored controller CUDA sources, stores them in `PpispCfg`, and evaluates the controller in Warp before applying PPISP. The controller predicts per-camera exposure and color-latent parameters, while existing static PPISP config continues to provide responsivity, vignetting, and CRF parameters. The implementation keeps the original pure-Warp controller path as a correctness reference and adds a native `wp.func_native` CUDA-snippet backend for high-env-count tiled camera workloads. The default controller backend uses an automatic heuristic: Warp for single/large images, native CUDA snippets for many small camera tiles. Also adds tests for: - USD `PPISPAuto` controller parsing - controller weight layout and NumPy equivalence - native-vs-Warp controller equivalence - PPISP camera sensor coverage across Isaac RTX, OVRTX, and Newton paths - opt-in PPISP pipeline performance sweep Dependencies: - Existing Warp dependency - CUDA required for the native controller backend and performance test Fixes # <!-- issue number --> ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots Not applicable. This is camera post-processing and renderer/backend integration behavior. ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
Greptile SummaryAdds camera-authored PPISP controller support across the camera renderer backends.
Confidence Score: 4/5The shader-discovery compatibility regression should be fixed before merging because existing PPISP-authored USD assets can silently render without their calibrated post-processing. The new resolver replaces the existing RenderProduct/PPISP-shader path with camera-attribute-only discovery, so previously supported static assets resolve to no ISP configuration rather than continuing through the unchanged static pipeline; the sentinel documentation also remains aligned with the removed lookup behavior. Files Needing Attention: source/isaaclab_ppisp/isaaclab_ppisp/cfg.py Important Files Changed
Sequence DiagramsequenceDiagram
participant Camera as Camera sensor
participant Resolver as PPISP config resolver
participant Renderer as Renderer backend
participant Controller as PPISP controller
participant ImagePass as PPISP image pass
Camera->>Resolver: Resolve isp_cfg from USD camera
Resolver-->>Renderer: Static inputs + optional weights
Renderer->>Controller: HDR image and prior exposure
Controller-->>Renderer: Per-camera exposure and color latents
Renderer->>ImagePass: HDR, predicted parameters, static coefficients
ImagePass-->>Camera: LDR RGB/RGBA
Reviews (1): Last reviewed commit: "Add Sensor PPISP controller support for ..." | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
The PPISP controller architecture is coherent, but the PR removes or renames multiple public shader-based APIs without the required deprecation period. It also directly edits the generated changelog and leaves the public pipeline documentation inconsistent with the new per-camera controller behavior.
- Design and architecture: The two-pass design—predicting per-camera exposure and color latents before applying shared responsivity, vignetting, and CRF parameters—is internally consistent. Controller weight offsets are validated against the expected layout, and scratch buffers are cached by device and image shape. However, the corresponding public class documentation still incorrectly states that per-view ISP is unsupported.
- API: The migration from shader-based discovery to camera-authored attributes is implemented as a breaking replacement rather than an additive transition.
PPISP_SHADER_NAMEandppisp_cfg_from_usd_shaderare removed,PpispCfg.shader_prim_pathis renamed,ppisp_cfg_from_usd_stagechanges path semantics, andPpispPipelinedrops itsstageargument. These public surfaces require deprecated compatibility shims and migration guidance before removal under repository policy. - Implementation: The renderer resolution paths, controller buffer caching, offset checks, and static/controller equivalence tests are consistent with the implementation. Before merge, the direct edit to
source/isaaclab_ppisp/docs/CHANGELOG.rstshould be reverted in favor of the changelog fragment, and thePpispPipelineclass docstring should distinguish shared static coefficients from per-camera controller outputs.
Significant concerns. Posted 3 actionable findings inline.
Automated review; human maintainers own approval decisions.
Adds PPISP
PPISPAutocontroller support to IsaacLab camera post-processing.This change parses embedded PPISP controller weights from USD/SPG-authored controller CUDA sources, stores them in
PpispCfg, and evaluates the controller in Warp before applying PPISP. The controller predicts per-camera exposure and color-latent parameters, while existing static PPISP config continues to provide responsivity, vignetting, and CRF parameters.The implementation keeps the original pure-Warp controller path as a correctness reference and adds a native
wp.func_nativeCUDA-snippet backend for high-env-count tiled camera workloads. The default controller backend uses an automatic heuristic: Warp for single/large images, native CUDA snippets for many small camera tiles.Also adds tests for:
USD
PPISPAutocontroller parsingcontroller weight layout and NumPy equivalence
native-vs-Warp controller equivalence
PPISP camera sensor coverage across Isaac RTX, OVRTX, and Newton paths
Dependencies:
Fixes #
Type of change
Screenshots
Not applicable. This is camera post-processing and renderer/backend integration behavior.
Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists thereDescription
Important
Confirm the pull request base before submitting. Target
developfor allcontributions. The
release/3.0.0-beta2branch is a frozen stable landingsnapshot and is not used for ongoing maintenance.
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
List any dependencies that are required for this change.
Fixes # (issue)
Type of change
Screenshots
Please attach before and after screenshots of the change if applicable.
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