• Postprocess

Denoiser

By: SKY ENGINE AI
scroll down ↓to find out moredenoiser_1_resourcesTutorial

Denoiser

In this case we will present you the Denoiser postprocess step. Denoiser is the most essential postprocess in
SkyRenderer. It eliminates the noise that is intrinsic to the path tracing algorithm.

Agenda:

  • Add a Denoiser step

Scene setup

Let's use custom scene composer to set up the scene.
Scene consists of:

  • sphere - location: (0, 0, 0)
  • camera - location: (5, 0, 0)
  • sphere light - location: (2, 2, 2)

We create a render chain with a single light render step and without any postprocess steps. To emphasize the major
difference we will also greatly reduce the antialiasing parameter to just 5 samples per pixel.

    from skyrenderer.cases.utils import DenoiserSceneComposer
    from skyrenderer.render_chain import RenderChain
/home/ws3h/projects/content-marketing/skyrenderer/skyrenderer/utils/visualization_helper.py:3: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from tqdm.autonotebook import tqdm

    scene_composer = DenoiserSceneComposer(antialiasing_level=5)
    scene_composer.setup_scene()
    scene_composer.renderer_context.define_render_chain(
        RenderChain(
            render_steps=[scene_composer.visible_light_render_step],
            width=800,
            height=800,
        ),
    )
    default_render = scene_composer.get_render()
2025-08-07 09:58:36,189 | skyrenderer.scene.renderer_context |  INFO: Root paths:
- root path: /home/ws3h/projects/content-marketing/skyrenderer/skyrenderer
- assets path: /dli/mount/assets
- config path: /home/ws3h/projects/content-marketing/skyrenderer/skyrenderer/config
- gpu sources path: /home/ws3h/projects/content-marketing/skyrenderer/skyrenderer/optix_sources/sources
- cache path: /dli/mount/cache
- ptx cache path: compiled_ptx/ptx
- ocio path: ocio_configs

2025-08-07 09:59:20,079 | skyrenderer.utils.time_measurement |  INFO: Setup time: 43.76 seconds

2025-08-07 09:59:20,852 | skyrenderer.utils.time_measurement |  INFO: Context update time: 773 ms

2025-08-07 09:59:23,787 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2025-08-07 09:59:23,788 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.94 seconds

Add a Denoiser step

We define a new render chain with two steps:

  • predefined scene composer's visible light render step
  • Denoiser postprocess step
    Denoiser has a single parameter called blend. The result of this denoise step is a linear interpolation
    between denoised image and raw image:
    $final image = blend \times raw image + (1 - blend) \times denoised image$
    from skyrenderer.render_chain import Denoiser
    denoiser_step = Denoiser(
        scene_composer.renderer_context,
        parameter_provider=Denoiser.create_parameter_provider(scene_composer.renderer_context, blend=0),
    )
    scene_composer.renderer_context.define_render_chain(
        RenderChain(
            render_steps=[scene_composer.visible_light_render_step, denoiser_step],
            width=800,
            height=800,
        ),
    )
    render_with_denoiser = scene_composer.get_render()
    renders = {"Default render": default_render, "With denoiser": render_with_denoiser}
    scene_composer.visualize_grid_desc(renders, (800, 1600), 2, thickness=2)
denoiser_1_resourcesTutorial
2025-08-07 09:59:30,638 | skyrenderer.utils.time_measurement |  INFO: Setup time: 6.79 seconds

2025-08-07 09:59:31,354 | skyrenderer.utils.time_measurement |  INFO: Context update time: 715 ms

2025-08-07 09:59:32,962 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2025-08-07 09:59:32,963 | skyrenderer.utils.time_measurement |  INFO: Render time: 1.61 seconds

Summary

In this section you have learnt:

  • Denoiser postprocess step must be added after visible light render step.
  • Denoiser greatly reduces the path tracing noise.
  • The blend parameter act as a weight between denoised and raw image (0 - fully denoised image, 1 - raw image).