From 9fde83278d2077e0e9cbcec47971437c748a5477 Mon Sep 17 00:00:00 2001 From: nblauch Date: Fri, 3 Apr 2026 14:53:38 -0700 Subject: [PATCH] Restore RT2 RenderCfg fields removed in PhysicsManager refactor PR #4142 added 10 RT2 typed fields to RenderCfg (max_bounces, split_glass, split_clearcoat, split_rough_reflection, ambient_light_intensity, ambient_occlusion_denoiser_mode, subpixel_mode, enable_cached_raytracing, max_samples_per_launch, view_tile_limit) and their field_to_setting mappings. These were accidentally removed in the PhysicsManager refactor (PR #4564, commit 0ba9c5cb). This restores them along with test coverage. --- .../isaaclab/isaaclab/sim/simulation_cfg.py | 82 ++++++++++++++++++ .../isaaclab/sim/simulation_context.py | 11 +++ .../test/sim/test_simulation_render_config.py | 84 +++++++++++++++++++ 3 files changed, 177 insertions(+) diff --git a/source/isaaclab/isaaclab/sim/simulation_cfg.py b/source/isaaclab/isaaclab/sim/simulation_cfg.py index 6c2e97bb7e82..d9ced8e6007f 100644 --- a/source/isaaclab/isaaclab/sim/simulation_cfg.py +++ b/source/isaaclab/isaaclab/sim/simulation_cfg.py @@ -151,6 +151,88 @@ class RenderCfg: This is set by the variable: ``/rtx/domeLight/upperLowerStrategy``. """ + max_bounces: int | None = None + """Maximum number of ray bounces for path tracing (RT2). Default is 2. + + For global illumination (indirect diffuse), this should be at least 3. + + This is set by the variable: ``/rtx/rtpt/maxBounces``. + """ + + split_glass: bool | None = None + """Enables separate glass ray splitting for improved glass rendering (RT2). Default is False. + + Enabling this can reduce noise on glass materials at the cost of performance. + + This is set by the variable: ``/rtx/rtpt/splitGlass``. + """ + + split_clearcoat: bool | None = None + """Enables separate clearcoat ray splitting (RT2). Default is False. + + Enabling this can reduce noise on clearcoat materials at the cost of performance. + + This is set by the variable: ``/rtx/rtpt/splitClearcoat``. + """ + + split_rough_reflection: bool | None = None + """Enables separate rough reflection ray splitting (RT2). Default is True. + + Enabling this can reduce noise on rough reflective materials at the cost of performance. + + This is set by the variable: ``/rtx/rtpt/splitRoughReflection``. + """ + + ambient_light_intensity: float | None = None + """Scene ambient light intensity. Default is 1.0. + + This is set by the variable: ``/rtx/sceneDb/ambientLightIntensity``. + """ + + ambient_occlusion_denoiser_mode: Literal[0, 1] | None = None + """Ambient occlusion denoiser mode. Default is 1. + + Valid values are: + + * 0: Higher quality denoising + * 1: Performance-oriented denoising + + This is set by the variable: ``/rtx/ambientOcclusion/denoiserMode``. + """ + + subpixel_mode: Literal[0, 1] | None = None + """Raytracing subpixel mode. Default is 0. + + Valid values are: + + * 0: Performance mode + * 1: Quality mode (better anti-aliasing) + + This is set by the variable: ``/rtx/raytracing/subpixel/mode``. + """ + + enable_cached_raytracing: bool | None = None + """Enables cached raytracing for improved performance. Default is True. + + This is set by the variable: ``/rtx/raytracing/cached/enabled``. + """ + + max_samples_per_launch: int | None = None + """Maximum samples per launch for path tracing. Default is 1000000. + + This setting helps avoid replicator warnings when using large tile counts. + + This is set by the variable: ``/rtx/pathtracing/maxSamplesPerLaunch``. + """ + + view_tile_limit: int | None = None + """Maximum number of view tiles. Default is 1000000. + + This setting helps avoid silent trimming of tiles. + + This is set by the variable: ``/rtx/viewTile/limit``. + """ + carb_settings: dict[str, Any] | None = None """A general dictionary for users to supply all carb rendering settings with native names. diff --git a/source/isaaclab/isaaclab/sim/simulation_context.py b/source/isaaclab/isaaclab/sim/simulation_context.py index 91cee7d0be46..f37404cec038 100644 --- a/source/isaaclab/isaaclab/sim/simulation_context.py +++ b/source/isaaclab/isaaclab/sim/simulation_context.py @@ -249,6 +249,17 @@ def _apply_nested(data: dict[str, Any], path: str = "") -> None: "enable_shadows": "/rtx/shadows/enabled", "enable_ambient_occlusion": "/rtx/ambientOcclusion/enabled", "dome_light_upper_lower_strategy": "/rtx/domeLight/upperLowerStrategy", + "ambient_light_intensity": "/rtx/sceneDb/ambientLightIntensity", + "ambient_occlusion_denoiser_mode": "/rtx/ambientOcclusion/denoiserMode", + "subpixel_mode": "/rtx/raytracing/subpixel/mode", + "enable_cached_raytracing": "/rtx/raytracing/cached/enabled", + "max_samples_per_launch": "/rtx/pathtracing/maxSamplesPerLaunch", + "view_tile_limit": "/rtx/viewTile/limit", + # RT2 path tracing settings + "max_bounces": "/rtx/rtpt/maxBounces", + "split_glass": "/rtx/rtpt/splitGlass", + "split_clearcoat": "/rtx/rtpt/splitClearcoat", + "split_rough_reflection": "/rtx/rtpt/splitRoughReflection", } for key, value in vars(render_cfg).items(): diff --git a/source/isaaclab/test/sim/test_simulation_render_config.py b/source/isaaclab/test/sim/test_simulation_render_config.py index e5ad4274d184..7675ae896342 100644 --- a/source/isaaclab/test/sim/test_simulation_render_config.py +++ b/source/isaaclab/test/sim/test_simulation_render_config.py @@ -41,6 +41,17 @@ def test_render_cfg(): samples_per_pixel = 4 enable_shadows = True enable_ambient_occlusion = True + # RT2 settings + max_bounces = 4 + split_glass = True + split_clearcoat = True + split_rough_reflection = True + ambient_light_intensity = 0.5 + ambient_occlusion_denoiser_mode = 0 + subpixel_mode = 1 + enable_cached_raytracing = True + max_samples_per_launch = 500000 + view_tile_limit = 500000 render_cfg = RenderCfg( enable_translucency=enable_translucency, @@ -54,6 +65,17 @@ def test_render_cfg(): samples_per_pixel=samples_per_pixel, enable_shadows=enable_shadows, enable_ambient_occlusion=enable_ambient_occlusion, + # RT2 settings + max_bounces=max_bounces, + split_glass=split_glass, + split_clearcoat=split_clearcoat, + split_rough_reflection=split_rough_reflection, + ambient_light_intensity=ambient_light_intensity, + ambient_occlusion_denoiser_mode=ambient_occlusion_denoiser_mode, + subpixel_mode=subpixel_mode, + enable_cached_raytracing=enable_cached_raytracing, + max_samples_per_launch=max_samples_per_launch, + view_tile_limit=view_tile_limit, ) cfg = SimulationCfg(render=render_cfg) @@ -74,6 +96,16 @@ def test_render_cfg(): assert sim.cfg.render.samples_per_pixel == samples_per_pixel assert sim.cfg.render.enable_shadows == enable_shadows assert sim.cfg.render.enable_ambient_occlusion == enable_ambient_occlusion + assert sim.cfg.render.max_bounces == max_bounces + assert sim.cfg.render.split_glass == split_glass + assert sim.cfg.render.split_clearcoat == split_clearcoat + assert sim.cfg.render.split_rough_reflection == split_rough_reflection + assert sim.cfg.render.ambient_light_intensity == ambient_light_intensity + assert sim.cfg.render.ambient_occlusion_denoiser_mode == ambient_occlusion_denoiser_mode + assert sim.cfg.render.subpixel_mode == subpixel_mode + assert sim.cfg.render.enable_cached_raytracing == enable_cached_raytracing + assert sim.cfg.render.max_samples_per_launch == max_samples_per_launch + assert sim.cfg.render.view_tile_limit == view_tile_limit assert sim.get_setting("/rtx/translucency/enabled") == sim.cfg.render.enable_translucency assert sim.get_setting("/rtx/reflections/enabled") == sim.cfg.render.enable_reflections @@ -85,6 +117,16 @@ def test_render_cfg(): assert sim.get_setting("/rtx/directLighting/sampledLighting/samplesPerPixel") == sim.cfg.render.samples_per_pixel assert sim.get_setting("/rtx/shadows/enabled") == sim.cfg.render.enable_shadows assert sim.get_setting("/rtx/ambientOcclusion/enabled") == sim.cfg.render.enable_ambient_occlusion + assert sim.get_setting("/rtx/rtpt/maxBounces") == sim.cfg.render.max_bounces + assert sim.get_setting("/rtx/rtpt/splitGlass") == sim.cfg.render.split_glass + assert sim.get_setting("/rtx/rtpt/splitClearcoat") == sim.cfg.render.split_clearcoat + assert sim.get_setting("/rtx/rtpt/splitRoughReflection") == sim.cfg.render.split_rough_reflection + assert sim.get_setting("/rtx/sceneDb/ambientLightIntensity") == sim.cfg.render.ambient_light_intensity + assert sim.get_setting("/rtx/ambientOcclusion/denoiserMode") == sim.cfg.render.ambient_occlusion_denoiser_mode + assert sim.get_setting("/rtx/raytracing/subpixel/mode") == sim.cfg.render.subpixel_mode + assert sim.get_setting("/rtx/raytracing/cached/enabled") == sim.cfg.render.enable_cached_raytracing + assert sim.get_setting("/rtx/pathtracing/maxSamplesPerLaunch") == sim.cfg.render.max_samples_per_launch + assert sim.get_setting("/rtx/viewTile/limit") == sim.cfg.render.view_tile_limit assert sim.get_setting("/rtx/post/aa/op") == 4 # dlss = 3, dlaa=4 @@ -162,6 +204,17 @@ def test_render_cfg_defaults(): samples_per_pixel = 1 enable_shadows = False enable_ambient_occlusion = False + # RT2 defaults + max_bounces = 2 + split_glass = False + split_clearcoat = False + split_rough_reflection = False + ambient_light_intensity = 1.0 + ambient_occlusion_denoiser_mode = 1 + subpixel_mode = 0 + enable_cached_raytracing = False + max_samples_per_launch = 1000000 + view_tile_limit = 1000000 render_cfg = RenderCfg( enable_translucency=enable_translucency, @@ -175,6 +228,17 @@ def test_render_cfg_defaults(): samples_per_pixel=samples_per_pixel, enable_shadows=enable_shadows, enable_ambient_occlusion=enable_ambient_occlusion, + # RT2 settings + max_bounces=max_bounces, + split_glass=split_glass, + split_clearcoat=split_clearcoat, + split_rough_reflection=split_rough_reflection, + ambient_light_intensity=ambient_light_intensity, + ambient_occlusion_denoiser_mode=ambient_occlusion_denoiser_mode, + subpixel_mode=subpixel_mode, + enable_cached_raytracing=enable_cached_raytracing, + max_samples_per_launch=max_samples_per_launch, + view_tile_limit=view_tile_limit, ) cfg = SimulationCfg(render=render_cfg) @@ -192,6 +256,16 @@ def test_render_cfg_defaults(): assert sim.cfg.render.samples_per_pixel == samples_per_pixel assert sim.cfg.render.enable_shadows == enable_shadows assert sim.cfg.render.enable_ambient_occlusion == enable_ambient_occlusion + assert sim.cfg.render.max_bounces == max_bounces + assert sim.cfg.render.split_glass == split_glass + assert sim.cfg.render.split_clearcoat == split_clearcoat + assert sim.cfg.render.split_rough_reflection == split_rough_reflection + assert sim.cfg.render.ambient_light_intensity == ambient_light_intensity + assert sim.cfg.render.ambient_occlusion_denoiser_mode == ambient_occlusion_denoiser_mode + assert sim.cfg.render.subpixel_mode == subpixel_mode + assert sim.cfg.render.enable_cached_raytracing == enable_cached_raytracing + assert sim.cfg.render.max_samples_per_launch == max_samples_per_launch + assert sim.cfg.render.view_tile_limit == view_tile_limit assert sim.get_setting("/rtx/translucency/enabled") == sim.cfg.render.enable_translucency assert sim.get_setting("/rtx/reflections/enabled") == sim.cfg.render.enable_reflections @@ -203,4 +277,14 @@ def test_render_cfg_defaults(): assert sim.get_setting("/rtx/directLighting/sampledLighting/samplesPerPixel") == sim.cfg.render.samples_per_pixel assert sim.get_setting("/rtx/shadows/enabled") == sim.cfg.render.enable_shadows assert sim.get_setting("/rtx/ambientOcclusion/enabled") == sim.cfg.render.enable_ambient_occlusion + assert sim.get_setting("/rtx/rtpt/maxBounces") == sim.cfg.render.max_bounces + assert sim.get_setting("/rtx/rtpt/splitGlass") == sim.cfg.render.split_glass + assert sim.get_setting("/rtx/rtpt/splitClearcoat") == sim.cfg.render.split_clearcoat + assert sim.get_setting("/rtx/rtpt/splitRoughReflection") == sim.cfg.render.split_rough_reflection + assert sim.get_setting("/rtx/sceneDb/ambientLightIntensity") == sim.cfg.render.ambient_light_intensity + assert sim.get_setting("/rtx/ambientOcclusion/denoiserMode") == sim.cfg.render.ambient_occlusion_denoiser_mode + assert sim.get_setting("/rtx/raytracing/subpixel/mode") == sim.cfg.render.subpixel_mode + assert sim.get_setting("/rtx/raytracing/cached/enabled") == sim.cfg.render.enable_cached_raytracing + assert sim.get_setting("/rtx/pathtracing/maxSamplesPerLaunch") == sim.cfg.render.max_samples_per_launch + assert sim.get_setting("/rtx/viewTile/limit") == sim.cfg.render.view_tile_limit assert sim.get_setting("/rtx/post/aa/op") == 3 # dlss = 3, dlaa=4