Mesh Light Parameters
In this case you will get familiar with Mesh Light parameters
Agenda:
- MeshLight parameters
- Render scenes using modified base color and illuminance
Scene setup
Let's use custom scene composer to set up the scene.
Scene consists of:
- neon - location: (0, 0.07, 0)
- plane - location: (0, 0, 0)
- camera - location: (-1, -0.5, 1)
from skyrenderer.cases.utils import MeshLightSceneComposer
scene_composer = MeshLightSceneComposer(antialiasing_level=2048)
scene_composer.setup_scene()
renderer_context = scene_composer.renderer_context
2025-02-04 09:11:09,004 | 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 09:11:09,547 | skyalembic.archive_manager | WARNING: Loading not adapted alembic file
MeshLight parameters
We can modify behaviour of lights with different parameters.
Parameters can be divided into two main groups:
- Emissive shader specific properties
Changes are done on the material definition level.
Parameters:
- base_color - 3 channel (Red, Green, Blue) color tuple - (R, G, B).
- Mesh light specific parameters
You can control the following parameters of the Mesh Light:
- illuminance - light strength, illuminance in candelas,
- sample density - sample angular density (number of rays per 1 degree).
Render scenes using different parameters
In next lines we will create:
- basic render
- emissive shader with green color as a base color
- light with higher illuminance
from skyrenderer.scene.scene_layout.layout_elements_definitions import MaterialDefinition
from skyrenderer.basic_types.light.mesh_light_definition import MeshLightDefinition
from skyrenderer.basic_types.procedure import EmissiveShader
Basic render
source_parameters = EmissiveShader.create_parameter_provider(renderer_context)
neon_material = MaterialDefinition(shader=EmissiveShader(renderer_context), parameter_set=source_parameters)
geometry_name = "Neon_GEOshape_NeonSE_emission"
renderer_context.set_material_definition(node_name=geometry_name, material_definition=neon_material)
renderer_context.set_light(
MeshLightDefinition(renderer_context, geometry_name, illuminance=0.5, sample_density=0.0001)
)
basic_render = scene_composer.get_render()
2025-02-04 09:11:09,646 | skyrenderer.utils.time_measurement | INFO: Setup time: 81 ms
2025-02-04 09:11:10,195 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Calculating 'position_map' and 'pdf_map' for Neon_GEOshape_NeonSE_emission, this may take a while...
2025-02-04 09:11:10,196 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Consider adding mesh cacher if you want to avoid waiting in the future.
2025-02-04 09:11:23,125 | skyrenderer.utils.time_measurement | INFO: Context update time: 13.48 seconds
2025-02-04 09:11:46,096 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-02-04 09:11:46,097 | skyrenderer.utils.time_measurement | INFO: Render time: 22.97 seconds
Emissive shader with green color as a base color
green_source_parameters = EmissiveShader.create_parameter_provider(renderer_context, base_color=(0.1, 0.8, 0.1))
neon_material = MaterialDefinition(shader=EmissiveShader(renderer_context), parameter_set=green_source_parameters)
renderer_context.set_material_definition(node_name=geometry_name, material_definition=neon_material)
green_color_render = scene_composer.get_render()
2025-02-04 09:11:46,145 | skyrenderer.basic_types.light.mesh_light | WARNING: Creating light parameter provider in context which is set up - hanging link possible
2025-02-04 09:11:46,212 | skyrenderer.utils.time_measurement | INFO: Setup time: 71 ms
2025-02-04 09:11:46,750 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Calculating 'position_map' and 'pdf_map' for Neon_GEOshape_NeonSE_emission, this may take a while...
2025-02-04 09:11:46,751 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Consider adding mesh cacher if you want to avoid waiting in the future.
2025-02-04 09:11:59,667 | skyrenderer.utils.time_measurement | INFO: Context update time: 13.45 seconds
2025-02-04 09:12:11,009 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-02-04 09:12:11,010 | skyrenderer.utils.time_measurement | INFO: Render time: 11.34 seconds
Light with higher illuminance
renderer_context.set_light(
MeshLightDefinition(renderer_context, geometry_name, illuminance=1, sample_density=0.0001),
)
height_illuminance = scene_composer.get_render()
scene_composer.visualize_grid([basic_render, green_color_render, height_illuminance], shape=(500, 1500))
2025-02-04 09:12:11,049 | 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 09:12:11,053 | skyrenderer.basic_types.light.mesh_light | WARNING: Creating light parameter provider in context which is set up - hanging link possible
2025-02-04 09:12:12,017 | skyrenderer.utils.time_measurement | INFO: Setup time: 968 ms
2025-02-04 09:12:12,556 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Calculating 'position_map' and 'pdf_map' for Neon_GEOshape_NeonSE_emission, this may take a while...
2025-02-04 09:12:12,557 | skyrenderer.basic_types.provider.unit_providers.alembic_buffer_provider | INFO: Consider adding mesh cacher if you want to avoid waiting in the future.
2025-02-04 09:12:25,568 | skyrenderer.utils.time_measurement | INFO: Context update time: 13.55 seconds
2025-02-04 09:12:39,204 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-02-04 09:12:39,205 | skyrenderer.utils.time_measurement | INFO: Render time: 13.64 seconds
For more information check MeshLight and EmissiveShader class documentation.
Summary
In this section you have learnt:
- Base color of mesh light can be set on the material definition level.
- Illuminance and sample density are properties of MeshLight.