• Intro

Intersectors

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

Intersector Introduction

In this case you will get high level understanding of Intersector idea in SkyRenderer. You will get familiar
with abstraction behind them and know how their programs packs are shared.
You will see a few examples and code references for basic Intersector property usage.

Agenda:

  • An Intersector idea
  • Basic Intersectors in Sky Renderer
  • What Intersector can do?

An Intersector idea

Intersector is a python interface for code configuration of ray-geometry interaction and bounding box calculation
during ray traversal. You can think about it as about programmatic definition of a geometry.

HINT: More on Nvidia cards ray traversal could found in:
https://research.nvidia.com/sites/default/files/pubs/2009-08_Understanding-the-Efficiency/aila2009hpg_paper.pdf
Let's print an Intersector interface:

from skyrenderer.basic_types.procedure.intersector import Intersector print( [str(func) for func in dir(Intersector) if callable(getattr(Intersector, func)) and not func.startswith("")] ) print( [ str(func) for func in dir(Intersector) if isinstance(getattr(Intersector, func), property) and not func.startswith("") ] )
['_create_parameter_provider', '_set_programs', 'create_parameter_provider', 'fill_tuple', 'make_tuple', 'parameters_from_kwargs', 'register', 'reset_default_parameters', 'update_default_parameter', 'update_parameter'] ['bindless_programs', 'context', 'emissive', 'id', 'is_triangles_type', 'programs', 'required_buffers', 'required_dicts', 'required_parameters', 'required_textures']

Basic Intersectors in Sky Renderer

In SkyRenderer there are following intersectors:

  • SphereIntersector - sphere-ray intersection (see: SphereIntersector case)
  • PlaneIntersector - plane-ray intersector (see: PlaneIntersector case)
  • MeshIntersector - triangle-ray intersector (see: MeshIntersector case). Used for mesh objects.

What Intersector can do?

In any Intersector and in any procedure you can get access to:

  • procedure's id
  • required parameters
  • required buffers
  • its programs
    Additionally, you could have access to information if geometry is a triangular mesh.
    Let's get that information from MeshIntersector.
from skyrenderer.basic_types.procedure.intersector.mesh_intersector import MeshIntersector from skyrenderer.cases.utils.scene_composer import SceneComposer composer = SceneComposer() mesh_intersector = MeshIntersector(composer.renderer_context) composer.log_info(mesh_intersector.programs) composer.log_info(mesh_intersector.required_parameters) composer.log_info(mesh_intersector.required_textures) composer.log_info(mesh_intersector.is_triangles_type)
2025-01-29 13:47:24,664 | 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-29 13:47:24,698 | skyrenderer | INFO: {(<RayIndex.NONE: -1>, <ProgramType.ATTRIBUTE: 2>): <skyrenderer.basic_types.program.attribute.MeshAT object at 0x7f4d50184518>} 2025-01-29 13:47:24,698 | skyrenderer | INFO: set() 2025-01-29 13:47:24,699 | skyrenderer | INFO: {'pdf_map', 'normal_map', 'position_map'} 2025-01-29 13:47:24,700 | skyrenderer | INFO: True

Every Intersector can also produce its own parameter provider and change its parameters values in the same method.

import json from skyrenderer.basic_types.procedure import SphereIntersector sphere_provider = SphereIntersector.create_parameter_provider(composer.renderer_context) composer.log_info("Default sphere:") composer.log_info( json.dumps( {param_name: param.value for param_name, param in sphere_provider._parameters_blueprint.items()}, indent=2 ) ) composer.log_info("Modified sphere:") sphere_provider_2 = SphereIntersector.create_parameter_provider(composer.renderer_context, radius=11) composer.log_info( json.dumps( {param_name: param.value for param_name, param in sphere_provider_2._parameters_blueprint.items()}, indent=2 ) )
2025-01-29 13:47:24,711 | skyrenderer | INFO: Default sphere: 2025-01-29 13:47:24,712 | skyrenderer | INFO: { "center": [ 0.0, 0.0, 0.0 ], "radius": 1.0 } 2025-01-29 13:47:24,713 | skyrenderer | INFO: Modified sphere: 2025-01-29 13:47:24,714 | skyrenderer | INFO: { "center": [ 0.0, 0.0, 0.0 ], "radius": 11 }

Summary

In this section you have learnt:

  • Intersector is interface for ray-geometry interaction and bounding box calculation.
  • Intersector's properties (procedure id, programs, required parameters and buffers) can be easily accessed.