Commit 51ffd32a authored by Kelly Guo's avatar Kelly Guo Committed by Kelly Guo

Updates render setting defaults for better quality (#183)

# Description

This change updates the default render settings for better quality at
slightly lower performance.
It is recommended to use per-camera resolution of at least 100x100, this
change also updates the current Cartpole
camera environments to use 100x100 resolution.

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- This change requires a documentation update


## Checklist

- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
parent 69f6afc8
...@@ -161,7 +161,9 @@ The info ``idToLabels`` dictionary will be the mapping from color to USD prim pa ...@@ -161,7 +161,9 @@ The info ``idToLabels`` dictionary will be the mapping from color to USD prim pa
Current Limitations Current Limitations
------------------- -------------------
For performance reasons, we default to using the "performance" DLSS mode for anti-aliasing. For performance reasons, we default to using DLSS for denoising, which generally provides better performance.
This may result in renders of lower quality, which may be especially evident at lower resolutions. This may result in renders of lower quality, which may be especially evident at lower resolutions.
For higher quality rendering at a cost of performance, we recommend switching to the DLAA mode for anti-aliasing. Due to this, we recommend using per-tile or per-camera resolution of at least 100 x 100.
Anti-aliasing modes and other rendering parameters can be specified in :class:`~sim.RenderCfg`. For renders at lower resolutions, we advice setting the ``antialiasing_mode`` attribute in :class:`~sim.RenderCfg` to
``DLAA``, and also potentially enabling ``enable_dl_denoiser``. Both of these settings should help improve render
quality, but also comes at a cost of performance. Additional rendering parameters can also be specified in :class:`~sim.RenderCfg`.
...@@ -42,12 +42,11 @@ app.enableStdoutOutput = false ...@@ -42,12 +42,11 @@ app.enableStdoutOutput = false
isaac.startup.ros_bridge_extension = "" isaac.startup.ros_bridge_extension = ""
# Flags for better rendering performance # Flags for better rendering performance
# Disabling these settings reduces renderer VRAM usage and improves rendering performance, but at some quality cost
rtx.translucency.enabled = false rtx.translucency.enabled = false
rtx.reflections.enabled = false rtx.reflections.enabled = false
rtx.indirectDiffuse.enabled = false rtx.indirectDiffuse.enabled = false
rtx.transient.dlssg.enabled = false rtx-transient.dlssg.enabled = false
rtx.directLighting.sampledLighting.enabled = true
rtx.directLighting.sampledLighting.samplesPerPixel = 1
rtx.sceneDb.ambientLightIntensity = 1.0 rtx.sceneDb.ambientLightIntensity = 1.0
# rtx.shadows.enabled = false # rtx.shadows.enabled = false
...@@ -56,7 +55,17 @@ rtx-transient.dldenoiser.enabled = false ...@@ -56,7 +55,17 @@ rtx-transient.dldenoiser.enabled = false
rtx.indirectDiffuse.denoiser.enabled = false rtx.indirectDiffuse.denoiser.enabled = false
rtx.directLighting.sampledLighting.denoisingTechnique = 0 rtx.directLighting.sampledLighting.denoisingTechnique = 0
rtx.reflections.denoiser.enabled = false rtx.reflections.denoiser.enabled = false
# this approximate dome lighting, almost like an ambient light
# for better lighting, enable ambient occlusion at a small cost
rtx.domeLight.upperLowerStrategy=4
rtx.directLighting.sampledLighting.enabled = false
rtx.ambientOcclusion.enabled = false
rtx.ambientOcclusion.denoiserMode = 0 rtx.ambientOcclusion.denoiserMode = 0
rtx.raytracing.subpixel.mode=1
rtx.raytracing.cached.enabled = false
# Set the DLSS model
rtx.post.dlss.execMode = 2 # can be 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto)
# Avoids replicator warning # Avoids replicator warning
rtx.pathtracing.maxSamplesPerLaunch = 1000000 rtx.pathtracing.maxSamplesPerLaunch = 1000000
...@@ -64,13 +73,6 @@ rtx.pathtracing.maxSamplesPerLaunch = 1000000 ...@@ -64,13 +73,6 @@ rtx.pathtracing.maxSamplesPerLaunch = 1000000
# Disable present thread to improve performance # Disable present thread to improve performance
exts."omni.renderer.core".present.enabled=false exts."omni.renderer.core".present.enabled=false
# Disabling these settings reduces renderer VRAM usage and improves rendering performance, but at some quality cost
rtx.raytracing.cached.enabled = false
rtx.ambientOcclusion.enabled = false
# Set the DLSS model
rtx.post.dlss.execMode = 0 # can be 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto)
# Avoids unnecessary GPU context initialization # Avoids unnecessary GPU context initialization
renderer.multiGpu.maxGpuCount=1 renderer.multiGpu.maxGpuCount=1
......
...@@ -43,12 +43,11 @@ app.enableStdoutOutput = false ...@@ -43,12 +43,11 @@ app.enableStdoutOutput = false
isaac.startup.ros_bridge_extension = "" isaac.startup.ros_bridge_extension = ""
# Flags for better rendering performance # Flags for better rendering performance
# Disabling these settings reduces renderer VRAM usage and improves rendering performance, but at some quality cost
rtx.translucency.enabled = false rtx.translucency.enabled = false
rtx.reflections.enabled = false rtx.reflections.enabled = false
rtx.indirectDiffuse.enabled = false rtx.indirectDiffuse.enabled = false
rtx.transient.dlssg.enabled = false rtx-transient.dlssg.enabled = false
rtx.directLighting.sampledLighting.enabled = true
rtx.directLighting.sampledLighting.samplesPerPixel = 1
rtx.sceneDb.ambientLightIntensity = 1.0 rtx.sceneDb.ambientLightIntensity = 1.0
# rtx.shadows.enabled = false # rtx.shadows.enabled = false
...@@ -57,7 +56,17 @@ rtx-transient.dldenoiser.enabled = false ...@@ -57,7 +56,17 @@ rtx-transient.dldenoiser.enabled = false
rtx.indirectDiffuse.denoiser.enabled = false rtx.indirectDiffuse.denoiser.enabled = false
rtx.directLighting.sampledLighting.denoisingTechnique = 0 rtx.directLighting.sampledLighting.denoisingTechnique = 0
rtx.reflections.denoiser.enabled = false rtx.reflections.denoiser.enabled = false
# this approximate dome lighting, almost like an ambient light
# for better lighting, enable ambient occlusion at a small cost
rtx.domeLight.upperLowerStrategy=4
rtx.directLighting.sampledLighting.enabled = false
rtx.ambientOcclusion.enabled = false
rtx.ambientOcclusion.denoiserMode = 0 rtx.ambientOcclusion.denoiserMode = 0
rtx.raytracing.subpixel.mode=1
rtx.raytracing.cached.enabled = false
# Set the DLSS model
rtx.post.dlss.execMode = 2 # can be 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto)
# Avoids replicator warning # Avoids replicator warning
rtx.pathtracing.maxSamplesPerLaunch = 1000000 rtx.pathtracing.maxSamplesPerLaunch = 1000000
...@@ -65,13 +74,6 @@ rtx.pathtracing.maxSamplesPerLaunch = 1000000 ...@@ -65,13 +74,6 @@ rtx.pathtracing.maxSamplesPerLaunch = 1000000
# Disable present thread to improve performance # Disable present thread to improve performance
exts."omni.renderer.core".present.enabled=false exts."omni.renderer.core".present.enabled=false
# Disabling these settings reduces renderer VRAM usage and improves rendering performance, but at some quality cost
rtx.raytracing.cached.enabled = false
rtx.ambientOcclusion.enabled = false
# Set the DLSS model
rtx.post.dlss.execMode = 0 # can be 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto)
# Avoids unnecessary GPU context initialization # Avoids unnecessary GPU context initialization
renderer.multiGpu.maxGpuCount=1 renderer.multiGpu.maxGpuCount=1
......
...@@ -172,7 +172,11 @@ class RenderCfg: ...@@ -172,7 +172,11 @@ class RenderCfg:
"""Enables Diffused Global Illumination at the cost of some performance. Default is False.""" """Enables Diffused Global Illumination at the cost of some performance. Default is False."""
antialiasing_mode: Literal["Off", "FXAA", "DLSS", "TAA", "DLAA"] = "DLSS" antialiasing_mode: Literal["Off", "FXAA", "DLSS", "TAA", "DLAA"] = "DLSS"
"""Selects the anti-aliasing mode to use. Defaults to DLSS.""" """Selects the anti-aliasing mode to use. Defaults to DLSS.
- DLSS: Boosts performance by using AI to output higher resolution frames from a lower resolution input.
DLSS samples multiple lower resolution images and uses motion data and feedback from prior frames to reconstruct native quality images.
- DLAA: Provides higher image quality with an AI-based anti-aliasing technique.
DLAA uses the same Super Resolution technology developed for DLSS, reconstructing a native resolution image to maximize image quality."""
enable_dlssg: bool = False enable_dlssg: bool = False
""""Enables the use of DLSS-G. """"Enables the use of DLSS-G.
...@@ -182,6 +186,11 @@ class RenderCfg: ...@@ -182,6 +186,11 @@ class RenderCfg:
Enabling this feature also enables additional thread-related activities, which can hurt performance. Enabling this feature also enables additional thread-related activities, which can hurt performance.
Default is False.""" Default is False."""
enable_dl_denoiser: bool = False
"""Enables the use of a DL denoiser.
The DL denoiser can help improve the quality of renders, but comes at a cost of performance.
"""
dlss_mode: Literal[0, 1, 2, 3] = 0 dlss_mode: Literal[0, 1, 2, 3] = 0
"""For DLSS anti-aliasing, selects the performance/quality tradeoff mode. """For DLSS anti-aliasing, selects the performance/quality tradeoff mode.
Valid values are 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto). Default is 0.""" Valid values are 0 (Performance), 1 (Balanced), 2 (Quality), or 3 (Auto). Default is 0."""
......
...@@ -158,7 +158,8 @@ class SimulationContext(_SimulationContext): ...@@ -158,7 +158,8 @@ class SimulationContext(_SimulationContext):
carb_settings_iface.set_bool("/rtx/translucency/enabled", self.cfg.render.enable_translucency) carb_settings_iface.set_bool("/rtx/translucency/enabled", self.cfg.render.enable_translucency)
carb_settings_iface.set_bool("/rtx/reflections/enabled", self.cfg.render.enable_reflections) carb_settings_iface.set_bool("/rtx/reflections/enabled", self.cfg.render.enable_reflections)
carb_settings_iface.set_bool("/rtx/indirectDiffuse/enabled", self.cfg.render.enable_global_illumination) carb_settings_iface.set_bool("/rtx/indirectDiffuse/enabled", self.cfg.render.enable_global_illumination)
carb_settings_iface.set_bool("/rtx/transient/dlssg/enabled", self.cfg.render.enable_dlssg) carb_settings_iface.set_bool("/rtx-transient/dlssg/enabled", self.cfg.render.enable_dlssg)
carb_settings_iface.set_bool("/rtx-transient/dldenoiser/enabled", self.cfg.render.enable_dl_denoiser)
carb_settings_iface.set_int("/rtx/post/dlss/execMode", self.cfg.render.dlss_mode) carb_settings_iface.set_int("/rtx/post/dlss/execMode", self.cfg.render.dlss_mode)
carb_settings_iface.set_bool("/rtx/directLighting/enabled", self.cfg.render.enable_direct_lighting) carb_settings_iface.set_bool("/rtx/directLighting/enabled", self.cfg.render.enable_direct_lighting)
carb_settings_iface.set_int( carb_settings_iface.set_int(
......
...@@ -36,7 +36,8 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -36,7 +36,8 @@ class TestSimulationRenderConfig(unittest.TestCase):
enable_global_illumination = True enable_global_illumination = True
antialiasing_mode = "DLAA" antialiasing_mode = "DLAA"
enable_dlssg = True enable_dlssg = True
dlss_mode = 3 enable_dl_denoiser = True
dlss_mode = 0
enable_direct_lighting = True enable_direct_lighting = True
samples_per_pixel = 4 samples_per_pixel = 4
enable_shadows = True enable_shadows = True
...@@ -49,6 +50,7 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -49,6 +50,7 @@ class TestSimulationRenderConfig(unittest.TestCase):
antialiasing_mode=antialiasing_mode, antialiasing_mode=antialiasing_mode,
enable_dlssg=enable_dlssg, enable_dlssg=enable_dlssg,
dlss_mode=dlss_mode, dlss_mode=dlss_mode,
enable_dl_denoiser=enable_dl_denoiser,
enable_direct_lighting=enable_direct_lighting, enable_direct_lighting=enable_direct_lighting,
samples_per_pixel=samples_per_pixel, samples_per_pixel=samples_per_pixel,
enable_shadows=enable_shadows, enable_shadows=enable_shadows,
...@@ -65,6 +67,7 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -65,6 +67,7 @@ class TestSimulationRenderConfig(unittest.TestCase):
self.assertEqual(sim.cfg.render.antialiasing_mode, antialiasing_mode) self.assertEqual(sim.cfg.render.antialiasing_mode, antialiasing_mode)
self.assertEqual(sim.cfg.render.enable_dlssg, enable_dlssg) self.assertEqual(sim.cfg.render.enable_dlssg, enable_dlssg)
self.assertEqual(sim.cfg.render.dlss_mode, dlss_mode) self.assertEqual(sim.cfg.render.dlss_mode, dlss_mode)
self.assertEqual(sim.cfg.render.enable_dl_denoiser, enable_dl_denoiser)
self.assertEqual(sim.cfg.render.enable_direct_lighting, enable_direct_lighting) self.assertEqual(sim.cfg.render.enable_direct_lighting, enable_direct_lighting)
self.assertEqual(sim.cfg.render.samples_per_pixel, samples_per_pixel) self.assertEqual(sim.cfg.render.samples_per_pixel, samples_per_pixel)
self.assertEqual(sim.cfg.render.enable_shadows, enable_shadows) self.assertEqual(sim.cfg.render.enable_shadows, enable_shadows)
...@@ -76,7 +79,10 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -76,7 +79,10 @@ class TestSimulationRenderConfig(unittest.TestCase):
self.assertEqual( self.assertEqual(
carb_settings_iface.get("/rtx/indirectDiffuse/enabled"), sim.cfg.render.enable_global_illumination carb_settings_iface.get("/rtx/indirectDiffuse/enabled"), sim.cfg.render.enable_global_illumination
) )
self.assertEqual(carb_settings_iface.get("/rtx/transient/dlssg/enabled"), sim.cfg.render.enable_dlssg) self.assertEqual(carb_settings_iface.get("/rtx-transient/dlssg/enabled"), sim.cfg.render.enable_dlssg)
self.assertEqual(
carb_settings_iface.get("/rtx-transient/dldenoiser/enabled"), sim.cfg.render.enable_dl_denoiser
)
self.assertEqual(carb_settings_iface.get("/rtx/post/dlss/execMode"), sim.cfg.render.dlss_mode) self.assertEqual(carb_settings_iface.get("/rtx/post/dlss/execMode"), sim.cfg.render.dlss_mode)
self.assertEqual(carb_settings_iface.get("/rtx/directLighting/enabled"), sim.cfg.render.enable_direct_lighting) self.assertEqual(carb_settings_iface.get("/rtx/directLighting/enabled"), sim.cfg.render.enable_direct_lighting)
self.assertEqual( self.assertEqual(
...@@ -96,7 +102,8 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -96,7 +102,8 @@ class TestSimulationRenderConfig(unittest.TestCase):
enable_global_illumination = False enable_global_illumination = False
antialiasing_mode = "DLSS" antialiasing_mode = "DLSS"
enable_dlssg = False enable_dlssg = False
dlss_mode = 0 enable_dl_denoiser = False
dlss_mode = 2
enable_direct_lighting = False enable_direct_lighting = False
samples_per_pixel = 1 samples_per_pixel = 1
enable_shadows = False enable_shadows = False
...@@ -108,6 +115,7 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -108,6 +115,7 @@ class TestSimulationRenderConfig(unittest.TestCase):
enable_global_illumination=enable_global_illumination, enable_global_illumination=enable_global_illumination,
antialiasing_mode=antialiasing_mode, antialiasing_mode=antialiasing_mode,
enable_dlssg=enable_dlssg, enable_dlssg=enable_dlssg,
enable_dl_denoiser=enable_dl_denoiser,
dlss_mode=dlss_mode, dlss_mode=dlss_mode,
enable_direct_lighting=enable_direct_lighting, enable_direct_lighting=enable_direct_lighting,
samples_per_pixel=samples_per_pixel, samples_per_pixel=samples_per_pixel,
...@@ -124,6 +132,7 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -124,6 +132,7 @@ class TestSimulationRenderConfig(unittest.TestCase):
self.assertEqual(sim.cfg.render.enable_global_illumination, enable_global_illumination) self.assertEqual(sim.cfg.render.enable_global_illumination, enable_global_illumination)
self.assertEqual(sim.cfg.render.antialiasing_mode, antialiasing_mode) self.assertEqual(sim.cfg.render.antialiasing_mode, antialiasing_mode)
self.assertEqual(sim.cfg.render.enable_dlssg, enable_dlssg) self.assertEqual(sim.cfg.render.enable_dlssg, enable_dlssg)
self.assertEqual(sim.cfg.render.enable_dl_denoiser, enable_dl_denoiser)
self.assertEqual(sim.cfg.render.dlss_mode, dlss_mode) self.assertEqual(sim.cfg.render.dlss_mode, dlss_mode)
self.assertEqual(sim.cfg.render.enable_direct_lighting, enable_direct_lighting) self.assertEqual(sim.cfg.render.enable_direct_lighting, enable_direct_lighting)
self.assertEqual(sim.cfg.render.samples_per_pixel, samples_per_pixel) self.assertEqual(sim.cfg.render.samples_per_pixel, samples_per_pixel)
...@@ -136,7 +145,10 @@ class TestSimulationRenderConfig(unittest.TestCase): ...@@ -136,7 +145,10 @@ class TestSimulationRenderConfig(unittest.TestCase):
self.assertEqual( self.assertEqual(
carb_settings_iface.get("/rtx/indirectDiffuse/enabled"), sim.cfg.render.enable_global_illumination carb_settings_iface.get("/rtx/indirectDiffuse/enabled"), sim.cfg.render.enable_global_illumination
) )
self.assertEqual(carb_settings_iface.get("/rtx/transient/dlssg/enabled"), sim.cfg.render.enable_dlssg) self.assertEqual(carb_settings_iface.get("/rtx-transient/dlssg/enabled"), sim.cfg.render.enable_dlssg)
self.assertEqual(
carb_settings_iface.get("/rtx-transient/dldenoiser/enabled"), sim.cfg.render.enable_dl_denoiser
)
self.assertEqual(carb_settings_iface.get("/rtx/post/dlss/execMode"), sim.cfg.render.dlss_mode) self.assertEqual(carb_settings_iface.get("/rtx/post/dlss/execMode"), sim.cfg.render.dlss_mode)
self.assertEqual(carb_settings_iface.get("/rtx/directLighting/enabled"), sim.cfg.render.enable_direct_lighting) self.assertEqual(carb_settings_iface.get("/rtx/directLighting/enabled"), sim.cfg.render.enable_direct_lighting)
self.assertEqual( self.assertEqual(
......
...@@ -44,8 +44,8 @@ class CartpoleRGBCameraEnvCfg(DirectRLEnvCfg): ...@@ -44,8 +44,8 @@ class CartpoleRGBCameraEnvCfg(DirectRLEnvCfg):
spawn=sim_utils.PinholeCameraCfg( spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0) focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
), ),
width=80, width=100,
height=80, height=100,
) )
write_image_to_file = False write_image_to_file = False
...@@ -82,8 +82,8 @@ class CartpoleDepthCameraEnvCfg(CartpoleRGBCameraEnvCfg): ...@@ -82,8 +82,8 @@ class CartpoleDepthCameraEnvCfg(CartpoleRGBCameraEnvCfg):
spawn=sim_utils.PinholeCameraCfg( spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0) focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
), ),
width=80, width=100,
height=80, height=100,
) )
# spaces # spaces
......
...@@ -30,8 +30,8 @@ class CartpoleRGBCameraSceneCfg(CartpoleSceneCfg): ...@@ -30,8 +30,8 @@ class CartpoleRGBCameraSceneCfg(CartpoleSceneCfg):
spawn=sim_utils.PinholeCameraCfg( spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0) focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
), ),
width=80, width=100,
height=80, height=100,
) )
...@@ -46,8 +46,8 @@ class CartpoleDepthCameraSceneCfg(CartpoleSceneCfg): ...@@ -46,8 +46,8 @@ class CartpoleDepthCameraSceneCfg(CartpoleSceneCfg):
spawn=sim_utils.PinholeCameraCfg( spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0) focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
), ),
width=80, width=100,
height=80, height=100,
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment