• Shader

Glass Shader Parameters

By: SKY ENGINE AI
scroll down ↓to find out moreglass-shader-parameters_3_resourcesTutorial

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 GlassShaderSceneComposer
    from skyrenderer.basic_types.procedure.shader.basic_shaders.glass_shader import GlassShader
    from skyrenderer.scene.scene_layout.layout_elements_definitions import MaterialDefinition
    scene_composer = GlassShaderSceneComposer(antialiasing_level=64)
    scene_composer.setup_scene()
    pbr_shader = GlassShader(scene_composer.renderer_context)
    material_definition = MaterialDefinition(shader=pbr_shader)
2026-01-05 14:40:05,103 | skyrenderer.scene.renderer_context |  INFO: Root paths:
- root path: /dli/skyenvironment/content-marketing/skyrenderer/skyrenderer
- assets path: /dli/mount/assets
- config path: /dli/skyenvironment/content-marketing/skyrenderer/skyrenderer/config
- gpu sources path: /dli/skyenvironment/content-marketing/skyrenderer/skyrenderer/optix_sources/sources
- cache path: /dli/mount/cache
- ptx cache path: compiled_ptx/ptx
- ocio path: ocio_configs

2026-01-05 14:40:05,343 | skyrenderer.basic_types.provider.unit_providers.substance_texture_provider |  WARNING: Unable to map purpose diffuse. Map will be parsed with legacy system.
	Purpose not present in ['ambientocclusion', 'basecolor', 'coatweight', 'coatroughness', 'emissive', 'height', 'metallic', 'normal', 'opacity', 'refractioncolor', 'roughness', 'specular', 'scattering', 'scatteringcolor', 'visibility', 'texturesemanticmap', 'any', 'mask', 'spectralid']
	See: Texture and substance convention for more details. Remember, purpose mapping is case insensitive. 
	Parsed purpose : diffuse_map

2026-01-05 14:40:05,344 | skyrenderer.basic_types.provider.unit_providers.substance_texture_provider |  WARNING: Unable to map purpose glossiness. Map will be parsed with legacy system.
	Purpose not present in ['ambientocclusion', 'basecolor', 'coatweight', 'coatroughness', 'emissive', 'height', 'metallic', 'normal', 'opacity', 'refractioncolor', 'roughness', 'specular', 'scattering', 'scatteringcolor', 'visibility', 'texturesemanticmap', 'any', 'mask', 'spectralid']
	See: Texture and substance convention for more details. Remember, purpose mapping is case insensitive. 
	Parsed purpose : glossiness_map

2026-01-05 14:40:05,348 | skyrenderer.basic_types.provider.iprovider |  WARNING: Provider for this config has been already initialized! There should be just one Provider created per unit source, consider fixing the scene.
Config:
metal_material

    scene_composer.renderer_context.set_material_definition(
        node_name="lightbulb_GEO_Glass*", material_definition=material_definition, use_regex=True
    )

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", (0, 0, 1))
    renders["base_color=(0, 0, 1)"] = 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, blend_text_background=True)
glass-shader-parameters_1_resourcesTutorial
2026-01-05 14:40:05,474 | skyrenderer.utils.time_measurement |  INFO: Setup time: 108 ms

2026-01-05 14:40:08,955 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.48 seconds

2026-01-05 14:40:12,822 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:12,824 | skyrenderer.utils.time_measurement |  INFO: Render time: 3.87 seconds

2026-01-05 14:40:13,088 | skyrenderer.utils.time_measurement |  INFO: Setup time: 200 ms

2026-01-05 14:40:16,456 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.37 seconds

2026-01-05 14:40:17,559 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:17,560 | skyrenderer.utils.time_measurement |  INFO: Render time: 1.10 seconds

2026-01-05 14:40:18,847 | skyrenderer.utils.time_measurement |  INFO: Setup time: 1.25 seconds

2026-01-05 14:40:22,004 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.16 seconds

2026-01-05 14:40:25,310 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:25,311 | skyrenderer.utils.time_measurement |  INFO: Render time: 3.31 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)
    renders["ior=1"] = scene_composer.get_render()
    GlassShader.update_default_parameter("ior", 1.45)
    renders["ior=1.45"] = scene_composer.get_render()
    GlassShader.update_default_parameter("ior", 1.80)
    renders["ior=1.80"] = scene_composer.get_render()
    scene_composer.visualize_grid_desc(renders, shape=(500, 1500), n_cols=3, blend_text_background=True)
    GlassShader.update_default_parameter("ior", 1.45)
glass-shader-parameters_2_resourcesTutorial
2026-01-05 14:40:25,886 | skyrenderer.utils.time_measurement |  INFO: Setup time: 252 ms

2026-01-05 14:40:29,033 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.15 seconds

2026-01-05 14:40:31,746 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:31,747 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.71 seconds

2026-01-05 14:40:31,942 | skyrenderer.utils.time_measurement |  INFO: Setup time: 183 ms

2026-01-05 14:40:34,999 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.06 seconds

2026-01-05 14:40:37,759 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:37,760 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.76 seconds

2026-01-05 14:40:37,959 | skyrenderer.utils.time_measurement |  INFO: Setup time: 187 ms

2026-01-05 14:40:41,133 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.17 seconds

2026-01-05 14:40:44,031 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:44,032 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.90 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", (0, 0, 1))
    renders["refraction_color=(0, 0, 1)"] = 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, blend_text_background=True)
glass-shader-parameters_3_resourcesTutorial
2026-01-05 14:40:44,487 | skyrenderer.utils.time_measurement |  INFO: Setup time: 201 ms

2026-01-05 14:40:47,788 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.30 seconds

2026-01-05 14:40:50,705 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:50,706 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.92 seconds

2026-01-05 14:40:50,930 | skyrenderer.utils.time_measurement |  INFO: Setup time: 206 ms

2026-01-05 14:40:54,115 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.18 seconds

2026-01-05 14:40:55,218 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:40:55,219 | skyrenderer.utils.time_measurement |  INFO: Render time: 1.10 seconds

2026-01-05 14:40:55,426 | skyrenderer.utils.time_measurement |  INFO: Setup time: 187 ms

2026-01-05 14:40:58,521 | skyrenderer.utils.time_measurement |  INFO: Context update time: 3.09 seconds

2026-01-05 14:41:01,183 | skyrenderer.utils.time_measurement |  INFO: Key points calculation time: 0 ms

2026-01-05 14:41:01,184 | skyrenderer.utils.time_measurement |  INFO: Render time: 2.66 seconds

Summary

In this section you have learnt:

  • GlassShader has many parameters that affect shader appearance.