Glass Shader Parameters
In this tutorial you will get familiar with GlassShader's parameters. You will see how change of parameter values
affect materials using GlassShader.
Agenda:
- GlassShader look - basic parameters
- GlassShader control parameters
Scene setup
Let's use custom scene composer to set up the scene.
from skyrenderer.cases.utils import MaterialsSceneComposer
from skyrenderer.basic_types.procedure.shader.basic_shaders.glass_shader import GlassShader
from skyrenderer.scene.scene_layout.layout_elements_definitions import MaterialDefinition
scene_composer = MaterialsSceneComposer(antialiasing_level=32)
scene_composer.setup_scene(illuminance=10)
pbr_shader = GlassShader(scene_composer.renderer_context)
material_definition = MaterialDefinition(shader=pbr_shader)
scene_composer.renderer_context.set_material_definition(
node_name="shaderball_GEO", material_definition=material_definition
)
2025-01-31 10:22:07,450 | 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
GlassShader look - basic parameters
In this section we will walk you through changing and setting basic GlassShader parameters:
- base color
- ior
- refraction_color
During that, we will use update default parameter methodology known from Procedure tutorial.
Base color
renders = {}
GlassShader.update_default_parameter("base_color", (1, 1, 1))
renders["base_color=(1, 1, 1)"] = scene_composer.get_render()
GlassShader.update_default_parameter("base_color", (1, 1, 0))
renders["base_color=(1, 1, 0)"] = scene_composer.get_render()
GlassShader.update_default_parameter("base_color", (0.5, 0.9, 0.5))
renders["base_color=(0.5, 0.9, 0.5)"] = scene_composer.get_render()
GlassShader.update_default_parameter("base_color", (1, 1, 1))
scene_composer.visualize_grid_desc(renders, shape=(500, 1500), n_cols=3)
2025-01-31 10:22:07,913 | skyrenderer.utils.time_measurement | INFO: Setup time: 421 ms
2025-01-31 10:22:10,651 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.74 seconds
2025-01-31 10:22:16,050 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:16,051 | skyrenderer.utils.time_measurement | INFO: Render time: 5.40 seconds
2025-01-31 10:22:16,226 | skyrenderer.utils.time_measurement | INFO: Setup time: 98 ms
2025-01-31 10:22:19,298 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.07 seconds
2025-01-31 10:22:21,990 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:21,991 | skyrenderer.utils.time_measurement | INFO: Render time: 2.69 seconds
2025-01-31 10:22:23,050 | skyrenderer.utils.time_measurement | INFO: Setup time: 1.04 seconds
2025-01-31 10:22:25,980 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.93 seconds
2025-01-31 10:22:31,480 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:31,481 | skyrenderer.utils.time_measurement | INFO: Render time: 5.50 seconds
ior
When light passes through glass, it bends due to changes in speed between different mediums, defined by the
material index of refraction (IOR). IOR is physical parameter that can be found for each material. General rule:
higher IOR, stronger ray bending effect.
renders = {}
GlassShader.update_default_parameter("ior", (1, 1, 1))
renders["ior=1"] = scene_composer.get_render()
GlassShader.update_default_parameter("ior", (1.45, 1.45, 1.45))
renders["ior=1.45"] = scene_composer.get_render()
GlassShader.update_default_parameter("ior", (2, 2, 2))
renders["ior=2"] = scene_composer.get_render()
scene_composer.visualize_grid_desc(renders, shape=(500, 1500), n_cols=3)
GlassShader.update_default_parameter("ior", (1.45, 1.45, 1.45))
2025-01-31 10:22:31,836 | skyrenderer.utils.time_measurement | INFO: Setup time: 79 ms
2025-01-31 10:22:34,766 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.93 seconds
2025-01-31 10:22:36,842 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:36,842 | skyrenderer.utils.time_measurement | INFO: Render time: 2.08 seconds
2025-01-31 10:22:36,910 | skyrenderer.utils.time_measurement | INFO: Setup time: 55 ms
2025-01-31 10:22:39,840 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.93 seconds
2025-01-31 10:22:43,212 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:43,213 | skyrenderer.utils.time_measurement | INFO: Render time: 3.37 seconds
2025-01-31 10:22:43,281 | skyrenderer.utils.time_measurement | INFO: Setup time: 56 ms
2025-01-31 10:22:46,087 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.81 seconds
2025-01-31 10:22:49,665 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:49,666 | skyrenderer.utils.time_measurement | INFO: Render time: 3.58 seconds
refraction_color
Refraction color is the color used in while ray is refracted instead of reflected. When color R channel is
negative, it takes base_color as refraction_color. By default, it is equal to base_color of the shader, but can
be changed separately.
renders = {}
GlassShader.update_default_parameter("base_color", (0.5, 0.9, 0.5))
GlassShader.update_default_parameter("refraction_color", (1, 0, 0))
renders["refraction_color=(1, 0, 0)"] = scene_composer.get_render()
GlassShader.update_default_parameter("refraction_color", (1, 1, 0))
renders["refraction_color=(1, 1, 0)"] = scene_composer.get_render()
GlassShader.update_default_parameter("refraction_color", (-1, -1, -1))
renders["refraction_color=(-1, -1, -1)"] = scene_composer.get_render()
scene_composer.visualize_grid_desc(renders, shape=(500, 1500), n_cols=3)
2025-01-31 10:22:49,971 | skyrenderer.utils.time_measurement | INFO: Setup time: 56 ms
2025-01-31 10:22:52,946 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.97 seconds
2025-01-31 10:22:55,616 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:22:55,617 | skyrenderer.utils.time_measurement | INFO: Render time: 2.67 seconds
2025-01-31 10:22:55,684 | skyrenderer.utils.time_measurement | INFO: Setup time: 55 ms
2025-01-31 10:22:58,450 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.76 seconds
2025-01-31 10:23:01,898 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:23:01,899 | skyrenderer.utils.time_measurement | INFO: Render time: 3.45 seconds
2025-01-31 10:23:01,971 | skyrenderer.utils.time_measurement | INFO: Setup time: 56 ms
2025-01-31 10:23:04,971 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.00 seconds
2025-01-31 10:23:07,654 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms
2025-01-31 10:23:07,655 | skyrenderer.utils.time_measurement | INFO: Render time: 2.68 seconds
Summary
In this section you have learnt:
- GlassShader has many parameters that affect shader appearance.