Skip to content

Disable RTX scene ambient in Arena env config#734

Open
cvolkcvolk wants to merge 3 commits into
mainfrom
cvolk/fix/rtx-scene-ambient
Open

Disable RTX scene ambient in Arena env config#734
cvolkcvolk wants to merge 3 commits into
mainfrom
cvolk/fix/rtx-scene-ambient

Conversation

@cvolkcvolk
Copy link
Copy Markdown
Collaborator

@cvolkcvolk cvolkcvolk commented May 28, 2026

Summary

Zeroing out all USD lights (or sweeping a dome light down to light_intensity=0) still produced a lit scene in the policy cameras instead of black.

Screenshot from 2026-05-29 16-35-53

Override the carb settings on every Arena eval via RenderCfg.carb_settings on the default SimulationCfg.

Detailed description

  • The RTX renderer has its own scene-ambient term that is completely independent of any UsdLuxLight prim. The carb setting /rtx/sceneDb/ambientLightIntensity defaults to 1.0 with color [0.1, 0.1, 0.1] in the IsaacLab kit. That adds a hidden ~10%-gray ambient floor to every rendered frame.

The carb setting /rtx/sceneDb/ambientLightIntensity defaults to 1.0
with color [0.1, 0.1, 0.1] in the IsaacLab kit experience. This adds
a hidden ~10%-gray ambient floor to every rendered frame, completely
independent of any USD UsdLuxLight prim — so policy cameras see lit
scenes even when all USD lights are zeroed.

The leak silently confounds vision-policy evals: a "low intensity"
sweep on the dome light shows no change in scene brightness until the
dome exceeds the renderer's ambient term.

Override the carb on every Arena eval via RenderCfg.carb_settings, so
USD lights are the sole source of illumination. Envs that previously
relied on the ambient floor should add an explicit DomeLight asset.

Signed-off-by: Clemens Volk <cvolk@nvidia.com>
Copy link
Copy Markdown
Contributor

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

Overall Assessment: ✅ Approve with minor suggestions

This PR addresses a significant and subtle rendering issue that can silently confound vision-policy evaluations. The fix is well-targeted and correctly implemented.


🔍 Analysis

Problem Identified:
The RTX renderer's default ambient lighting (/rtx/sceneDb/ambientLightIntensity=1.0 with color [0.1, 0.1, 0.1]) creates a ~10% gray ambient floor that is independent of USD light prims. This hidden illumination source makes it impossible to achieve true darkness in scenes, which breaks reproducibility in lighting sensitivity studies and domain randomization experiments.

Solution Approach:
Override both the intensity and color to zero via RenderCfg.carb_settings, making USD UsdLuxLight prims the sole source of illumination.


✅ Strengths

  1. Correct API usage: Uses the documented RenderCfg.carb_settings mechanism from isaaclab.sim - this is the proper way to override Carbonite settings
  2. Complete fix: Sets both ambientLightIntensity to 0.0 AND ambientLightColor to [0.0, 0.0, 0.0] - belt-and-suspenders approach ensures no ambient contribution
  3. Well-documented: The inline comment thoroughly explains why this change is needed, which is valuable for future maintainers
  4. Minimal scope: Changes only the base Arena environment config, affecting all Arena evaluations consistently

📝 Suggestions

  1. Documentation consideration: The PR description mentions "Envs that previously relied on the ambient floor should add an explicit DomeLight asset." Consider whether this warrants a note in the Arena migration guide or changelog, since this is technically a behavior change for existing environments.

  2. Migration note: If any internal Arena environments were implicitly depending on the ambient floor (expecting scenes to be visible without explicit lights), they may now render darker. The team should verify key benchmark environments still render as expected.


🔬 Technical Notes

  • The carb settings path /rtx/sceneDb/ambientLightIntensity is an RTX renderer internal that defaults at the kit experience level, not in USD - so this config-level override is the appropriate fix
  • Setting the color to black in addition to intensity=0 handles edge cases where color might be sampled even at zero intensity

Verdict: Ship it. This is a well-reasoned fix for a subtle but impactful rendering artifact that undermines scientific reproducibility in vision-policy research.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 28, 2026

Greptile Summary

This PR fixes a hidden RTX ambient lighting floor that persisted even when all USD light prims were removed or zeroed. The fix overrides two carb settings (/rtx/sceneDb/ambientLightIntensity and /rtx/sceneDb/ambientLightColor) to 0 via RenderCfg.carb_settings on the base SimulationCfg, so USD light prims become the sole source of scene illumination for all Arena eval environments.

  • Adds RenderCfg import and constructs it with a carb_settings dict that zeroes both the ambient intensity and color, replacing the previous bare SimulationCfg(dt=1/200, render_interval=2) default.
  • The comment accurately documents the default values (intensity=1.0, color=[0.1, 0.1, 0.1]) and the motivation (preventing a ~10%-gray ambient floor from silently confounding vision-policy evaluations).

Confidence Score: 5/5

Minimal-footprint change that writes two carb settings at config construction time; no logic changes, no regressions expected.

The change correctly targets the two known RTX ambient settings with the right key paths and value types (float and list/color3), matching both the IsaacLab source implementation and the Omniverse RTX documentation. The fix is self-contained, the in-code comment documents intent clearly, and no subclasses in the repo reassign sim to a bare value that would drop these settings.

No files require special attention.

Important Files Changed

Filename Overview
isaaclab_arena/environments/isaaclab_arena_manager_based_env_cfg.py Adds RenderCfg with carb_settings to zero out the RTX scene ambient (/rtx/sceneDb/ambientLightIntensity and ambientLightColor); correct key paths, correct value types (float and list/color3), well-commented.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[IsaacLabArenaManagerBasedRLEnvCfg] --> B[SimulationCfg]
    B --> C[RenderCfg with carb_settings]
    C --> D[ambientLightIntensity set to 0.0]
    C --> E[ambientLightColor set to black]
    D --> F[RTX Renderer ambient disabled]
    E --> F
    F --> G[USD light prims are sole light source]
Loading

Reviews (2): Last reviewed commit: "Re-apply RTX scene ambient override afte..." | Re-trigger Greptile

Comment on lines +81 to +86
render=RenderCfg(
carb_settings={
"/rtx/sceneDb/ambientLightIntensity": 0.0,
"/rtx/sceneDb/ambientLightColor": [0.0, 0.0, 0.0],
},
),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Subclass carb_settings override will silently discard the ambient fix

Any downstream @configclass that inherits from IsaacLabArenaManagerBasedRLEnvCfg and reassigns sim.render.carb_settings outright (e.g. sim = SimulationCfg(render=RenderCfg(carb_settings={"/rtx/translucency/enabled": False}))) will replace the dict entirely, losing the ambient zero. The @configclass system does not automatically merge nested dicts — the new assignment wins. Since the ambient suppression is a correctness concern for vision evals, it may be worth documenting this footgun (or enforcing it at env-build time rather than in the default config).

@cvolkcvolk cvolkcvolk marked this pull request as ready for review May 29, 2026 14:38
#733 moved IsaacLabArenaManagerBasedRLEnvCfg into a new module,
isaaclab_arena_manager_based_env_cfg.py, and the merge into this branch
dropped the RenderCfg carb override added in 2c1028c. Re-apply it at
the config's new home so USD light prims remain the sole source of
scene illumination.

Signed-off-by: Clemens Volk <cvolk@nvidia.com>
render=RenderCfg(
carb_settings={
"/rtx/sceneDb/ambientLightIntensity": 0.0,
"/rtx/sceneDb/ambientLightColor": [0.0, 0.0, 0.0],
Copy link
Copy Markdown
Collaborator

@peterd-NV peterd-NV May 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor comment: Is the ambientLightColor override necessary? Once intensity is set to 0.0 then the colour should not matter no?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants