• Provider

Parameter Provider

By: SKY ENGINE AI
scroll down ↓to find out moretutorial_testResourceTutorial_parameter-provider_3

Parameter Provider

In this tutorial you will get familiar with ParameterProvider concept. You will get to know how to define them,
what are their key features and how to control them in a few specific cases.

Agenda:

  • Parameter Provider
  • Parameter Provider Creation

Parameter Provider

Each procedure has their own Parameter Provider class, that passes values of procedure-specific parameters to the
procedure. This is a class responsible for connecting Procedure object with Randomization machine.

We have a few groups of Procedures that use Parameter Providers:

  • Lights
  • Intersectors
  • Shaders
  • Raygens
  • Render Steps:
    • Postprocess
    • Camera Steps
    • Lens

Scene setup

Let's use custom scene composer to set up the scene.

from skyrenderer.cases.utils import MaterialsSceneComposer scene_composer = MaterialsSceneComposer(antialiasing_level=2048) scene_composer.setup_scene(width=1600, height=1000) scene_composer.visualize()
parameter-provider_1_resourcesTutorial
2025-02-04 12:16:34,869 | skyrenderer.scene.renderer_context | INFO: Root paths: - root path: /dli/skyenvironment/skyrenderer/skyrenderer - assets path: /dli/mount/assets - config path: /dli/skyenvironment/skyrenderer/skyrenderer/config - gpu sources path: /dli/skyenvironment/skyrenderer/skyrenderer/optix_sources/sources - cache path: /dli/mount/cache - ptx cache path: compiled_ptx/ptx - ocio path: ocio_configs/aces_1.2/config.ocio 2025-02-04 12:16:35,326 | skyrenderer.utils.time_measurement | INFO: Setup time: 422 ms 2025-02-04 12:16:38,270 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.94 seconds 2025-02-04 12:16:50,603 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-02-04 12:16:50,604 | skyrenderer.utils.time_measurement | INFO: Render time: 12.33 seconds

Parameter Provider Creation

To create a Parameter Provider we call Procedure's .create_parameter_provider() method. In case we do not specify
some parameter values in Parameter Provider instance, default one are used. Available parameters and their default
values can be checked in Procedure's documentation. Let's assign PBRShader to the shaderball and change base color
via PBRShader's ParameterProvider:

from skyrenderer.scene.scene_layout.layout_elements_definitions import MaterialDefinition from skyrenderer.basic_types.procedure import PBRShader pbr_shader = PBRShader(scene_composer.renderer_context) blue_pbr_parameter_provider = PBRShader.create_parameter_provider( scene_composer.renderer_context, base_color=(0, 0, 1) ) blue_pbr_material = MaterialDefinition(shader=pbr_shader, parameter_set=blue_pbr_parameter_provider) scene_composer.renderer_context.set_material_definition("shaderball_GEO", material_definition=blue_pbr_material) scene_composer.visualize()
parameter-provider_2_resourcesTutorial
2025-02-04 12:16:51,231 | skyrenderer.utils.time_measurement | INFO: Setup time: 73 ms 2025-02-04 12:16:54,174 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.94 seconds 2025-02-04 12:17:06,975 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-02-04 12:17:06,976 | skyrenderer.utils.time_measurement | INFO: Render time: 12.80 seconds

Let's configure a DirectionLight used in a scene and change its color via DirectionLight's ParameterProvider.

from skyrenderer.basic_types.light import DirectionLight red_light_parameter_provider = DirectionLight.create_parameter_provider( scene_composer.renderer_context, color=(1, 0, 0), illuminance=10, direction=(-1, -1, 0) ) red_light = DirectionLight( scene_composer.renderer_context, name="light_LIGHT_NUL", parameter_provider=red_light_parameter_provider ) scene_composer.renderer_context.set_light(red_light) scene_composer.visualize()
parameter-provider_3_resourcesTutorial
2025-02-04 12:17:07,448 | skyrenderer.basic_types.light.direction_light | WARNING: Creating light parameter provider in context which is set up - hanging link possible 2025-02-04 12:17:07,448 | skyrenderer.scene.renderer_context | WARNING: Setting light after setup. Origin refers to last scene tree set up. Lights are stored in dict - change is visible immediately; Wrong parameter provider possible 2025-02-04 12:17:07,449 | skyrenderer.scene.renderer_context | WARNING: Light with light_id=light_LIGHT_NUL already exists in the scene and will be replace with a new one.There can only be a single light for a single node. 2025-02-04 12:17:07,511 | skyrenderer.utils.time_measurement | INFO: Setup time: 62 ms 2025-02-04 12:17:10,395 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.88 seconds 2025-02-04 12:17:22,427 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-02-04 12:17:22,427 | skyrenderer.utils.time_measurement | INFO: Render time: 12.03 seconds

Summary

In this section you have learnt:

  • Procedures have their corresponding ParameterProvider classes.
  • ParameterProviders are used to pass to Procedures values of the parameters.
  • ParameterProviders can be created via Procedure's .create_parameter_provider() method.