• Transform Provider

Transform Multi Provider

By: SKY ENGINE AI
scroll down ↓to find out moretransform-multi-provider_1_resourcesTutorial

TransformMultiProvider Introduction

In this case you will get familiar with a TransformMultiProvider.

Agenda:

  • Transform Multi Provider usage

Scene setup

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

  • 200 spheres - locations will be steered by TransformMultiProvider
  • plane - location: (0, 0, 0)
  • camera - location: (5, 5, 5)
    from skyrenderer.cases.utils import TransformMultiProviderSceneComposer
    scene_composer = TransformMultiProviderSceneComposer()
    scene_composer.setup_scene()
2025-02-05 11:55:33,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

Transform Multi Provider usage

Transform Multi Provider allows to distribute instances by multiple transform providers.
In this case we define 3 transform providers: a Sphere Transform Provider and two Circle Transform Providers.
Transform Multi Provider will randomly spread 200 spheres among these 3 providers, so the spheres are now
arranged in 3 shapes - two circles and a sphere between them.

    from skyrenderer.basic_types.provider.transform_providers.circle_transform_provider import CircleTransformProvider
    from skyrenderer.basic_types.provider.transform_providers.sphere_transform_provider import SphereTransformProvider
    from skyrenderer.basic_types.provider.transform_providers.transform_multi_provider import TransformMultiProvider
    sphere_transform_provider = SphereTransformProvider(scene_composer.renderer_context, center=(0, 3, 0), radius=2)
    top_circle_transform_provider = CircleTransformProvider(scene_composer.renderer_context, center=(0, 6, 0), radius=2)
    bottom_circle_transform_provider = CircleTransformProvider(
        scene_composer.renderer_context, center=(0, 0, 0), radius=2.5
    )
    multi_transform_provider = TransformMultiProvider(
        scene_composer.renderer_context,
        [sphere_transform_provider, top_circle_transform_provider, bottom_circle_transform_provider],
    )
    scene_composer.renderer_context.layout().get_node("sphere_GEO").modify_locus_definition(
        transform_provider=multi_transform_provider
    )
    scene_composer.visualize()
transform-multi-provider_1_resourcesTutorial
2025-02-05 11:55:34,700 | skyrenderer.utils.time_measurement |  INFO: Setup time: 782 ms

2025-02-05 11:55:35,422 | skyrenderer.utils.time_measurement |  INFO: Context update time: 721 ms

2025-02-05 11:55:39,028 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2025-02-05 11:55:39,029 | skyrenderer.utils.time_measurement |  INFO: Render time: 3.61 seconds

    sphere_node = scene_composer.renderer_context.get_node("sphere_GEO")
    provider_indexes = [
        sphere_node.locus.get_json_instance_info(i)["transform_provider_parameters"]["parameters"]["provider_selector"]
        for i in range(200)
    ]
    provider_counts = {
        "Sphere transform provider": provider_indexes.count(0),
        "Top circle provider": provider_indexes.count(1),
        "Bottom circle provider": provider_indexes.count(2),
    }
    scene_composer.log_info(f"Number of instances steered by each transform provider: {provider_counts}")
2025-02-05 11:55:39,412 | skyrenderer |  INFO: Number of instances steered by each transform provider: {'Sphere transform provider': 64, 'Top circle provider': 65, 'Bottom circle provider': 71}

Summary

In this section you have learnt:

  • Transform Multi Provider allows to arrange instances of the same node by multiple different providers.
  • Instances are assigned to providers randomly, so each provider might handle a slightly different number of
    instances.