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()
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()
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()
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.