Circle Transform Provider
In this section you will learn how to use CircleTransformProvider in SkyRenderer.
Agenda:
- Circle Transform Provider basics
- Circle Transform Provider usage
Scene setup
Let's use custom scene composer to set up the scene.
from skyrenderer.cases.utils import TransformProviderSceneComposer
scene_composer = TransformProviderSceneComposer(antialiasing_level=64)
scene_composer.setup_scene(render_width=1400, render_height=900)
scene_composer.visualize()
2025-01-31 09:47:03,405 | 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-01-31 09:47:09,124 | skyrenderer.utils.time_measurement | INFO: Setup time: 439 ms
2025-01-31 09:47:18,301 | skyrenderer.utils.time_measurement | INFO: Context update time: 9.18 seconds
2025-01-31 09:47:21,320 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 09:47:21,322 | skyrenderer.utils.time_measurement | INFO: Render time: 3.02 seconds
Circle Transform Provider basics
Circle Transform Provider is a class responsible for distribution of transformations of the object in the circle
circumference. It is connected with the SkyRenderer's randomization machine, hence assigning this particular
transform provider will make instances of the object randomized over frames.
Circle Transform Provider usage
To use CircleTransformProvider, we need to set it up and modify locus definition via layout node's method
modify_locus_definition of the desired node. To visualize better how transformations are passed, we will
increase number of instances of the objects. CircleTransformProvider will take care of randomization for each
instance.
from skyrenderer.basic_types.provider.transform_providers.circle_transform_provider import CircleTransformProvider
shaderball_node = scene_composer.renderer_context.layout().get_node("shaderball_GEO")
shaderball_node.n_instances = 10
transform_provider = CircleTransformProvider(scene_composer.renderer_context, radius=3)
shaderball_node.modify_locus_definition(transform_provider=transform_provider)
scene_composer.visualize(frame=0)
2025-01-31 09:47:21,968 | skyrenderer.utils.time_measurement | INFO: Setup time: 108 ms
2025-01-31 09:47:31,551 | skyrenderer.utils.time_measurement | INFO: Context update time: 9.58 seconds
2025-01-31 09:47:38,385 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 09:47:38,386 | skyrenderer.utils.time_measurement | INFO: Render time: 6.83 seconds
We will render second frame, to see how randomization machine causes change of transformations of the shaderballs.
It is possible to adjust strategy of randomization for the Transform Provider.
scene_composer.visualize(frame=1)
2025-01-31 09:47:39,002 | skyrenderer.utils.time_measurement | INFO: Setup time: 101 ms
2025-01-31 09:47:48,471 | skyrenderer.utils.time_measurement | INFO: Context update time: 9.46 seconds
2025-01-31 09:47:53,539 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 09:47:53,540 | skyrenderer.utils.time_measurement | INFO: Render time: 5.07 seconds
Summary
In this section you have learnt:
- CircleTransformProvider distributes instances of the object in a circle circumference.
- CircleTransformProvider needs to be assigned via SceneLayoutNode's
modify_locus_definition
method. - CircleTransformProvider is connected with SkyRenderer's randomization machine enabling randomization of each
instance transformations.