TranslucentShader Parameters
In this tutorial you will get familiar with TranslucentShader's parameters. You will see how change of parameter
values affect materials using TranslucentShader.
Agenda:
- TranslucentShader - basic parameters
- TranslucentShader - SSS parameters
- TranslucentShader - translucency parameters
Scene setup
Let's use custom scene composer to set up the scene.
from skyrenderer.cases.utils import TranslucentGummySceneComposer
from skyrenderer.scene.scene_layout.layout_elements_definitions import MaterialDefinition
from skyrenderer.basic_types.procedure.shader.basic_shaders import TranslucentShader scene_composer = TranslucentGummySceneComposer(antialiasing_level=512)
scene_composer.setup_scene()
translucent_shader = TranslucentShader(scene_composer.renderer_context)
scene_composer.renderer_context.set_material_definition(
node_name="gummy_bear_GEO_*",
use_regex=True,
material_definition=MaterialDefinition(shader=translucent_shader),
)2025-12-11 15:39:40,002 | 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 2025-12-11 15:39:40,252 | 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 2025-12-11 15:39:40,252 | 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 2025-12-11 15:39:40,255 | skyrenderer.scene.renderer_context | WARNING: Light with light_id=point_LIGHT_NUL already exists in the scene and will be replace with a new one.There can only be a single light for a single node.
TranslucentShader - basic parameters
In this section we will walk you through changing and setting basic TranslucentShader parameters. They are the
same as in PBRShader For exemplary purposes chosen parameters are: base_color and roughness.
During that, we will use update default parameter methodology known from Procedure tutorial.
Base color and roughness
renders = {}
TranslucentShader.update_default_parameter("translucency", 0.1)
TranslucentShader.update_default_parameter("base_color", (1, 0, 0))
renders["base_color=(1, 0, 0)"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("base_color", (1, 1, 0))
renders["base_color=(1, 1, 0)"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("base_color", (1, 0.7, 0.4))
renders["base_color=(1, 0.7, 0.4)"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("base_color", (1, 1, 1))
TranslucentShader.update_default_parameter("roughness", 0.0)
renders["roughness=0.0"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("roughness", 0.5)
renders["roughness=0.5"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("roughness", 1)
renders["roughness=1"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("roughness", 0)
scene_composer.visualize_grid_desc(renders, shape=(1000, 1500), n_cols=3, blend_text_background=True)2025-12-11 15:39:40,340 | skyrenderer.utils.time_measurement | INFO: Setup time: 78 ms 2025-12-11 15:39:43,506 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.17 seconds 2025-12-11 15:41:00,656 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:41:00,658 | skyrenderer.utils.time_measurement | INFO: Render time: 77.15 seconds 2025-12-11 15:41:00,917 | skyrenderer.utils.time_measurement | INFO: Setup time: 194 ms 2025-12-11 15:41:03,892 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.97 seconds 2025-12-11 15:42:10,485 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:42:10,486 | skyrenderer.utils.time_measurement | INFO: Render time: 66.59 seconds 2025-12-11 15:42:10,703 | skyrenderer.utils.time_measurement | INFO: Setup time: 190 ms 2025-12-11 15:42:13,633 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.93 seconds 2025-12-11 15:42:53,403 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:42:53,404 | skyrenderer.utils.time_measurement | INFO: Render time: 39.77 seconds 2025-12-11 15:42:53,674 | skyrenderer.utils.time_measurement | INFO: Setup time: 229 ms 2025-12-11 15:42:56,736 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.06 seconds 2025-12-11 15:43:34,762 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:43:34,763 | skyrenderer.utils.time_measurement | INFO: Render time: 38.03 seconds 2025-12-11 15:43:34,988 | skyrenderer.utils.time_measurement | INFO: Setup time: 208 ms 2025-12-11 15:43:38,131 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.14 seconds 2025-12-11 15:44:17,955 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:44:17,955 | skyrenderer.utils.time_measurement | INFO: Render time: 39.82 seconds 2025-12-11 15:44:18,172 | skyrenderer.utils.time_measurement | INFO: Setup time: 195 ms 2025-12-11 15:44:21,147 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.97 seconds 2025-12-11 15:44:58,951 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:44:58,952 | skyrenderer.utils.time_measurement | INFO: Render time: 37.80 seconds
Notice how changing base_color parameter is affecting its shading: it may seem that the color is not changing
at all. In reality, the color is changing and this change can be visible as a sub-color on the surface and in the
shadow on the ground. This is because the Translucent model includes another parameter that influences the base
color: ss_base_color. As long the subsurface is used, this parameter controls the internal object color.
The base_color and ss_base_color difference is clearly visible on the right gummy bear.
TranslucentShader - SSS parameters
base_color and ss_base_color
Abbreviation:
- bc - stands for "base_color"
renders = {}
TranslucentShader.update_default_parameter("base_color", (1, 0, 0))
TranslucentShader.update_default_parameter("ss_base_color", (0, 1, 0))
renders["bc=(1, 0, 0),ss_bc=(0, 1, 0)"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("base_color", (0, 0, 1))
TranslucentShader.update_default_parameter("ss_base_color", (1, 1, 0))
renders["bc=(0, 0, 1),ss_bc=(1, 1, 0)"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("base_color", (1, 0.7, 0.4))
TranslucentShader.update_default_parameter("ss_base_color", (0.97, 0.52, 0.52))
renders["bc=(1, 0.7, 0.4),ss_bc=(0.97, 0.52, 0.52)"] = scene_composer.get_render()
scene_composer.visualize_grid_desc(renders, shape=(500, 1500), n_cols=3, blend_text_background=True)2025-12-11 15:44:59,556 | skyrenderer.utils.time_measurement | INFO: Setup time: 199 ms 2025-12-11 15:45:02,498 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.94 seconds 2025-12-11 15:45:42,048 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:45:42,049 | skyrenderer.utils.time_measurement | INFO: Render time: 39.55 seconds 2025-12-11 15:45:42,256 | skyrenderer.utils.time_measurement | INFO: Setup time: 195 ms 2025-12-11 15:45:45,257 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.00 seconds 2025-12-11 15:46:23,130 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:46:23,131 | skyrenderer.utils.time_measurement | INFO: Render time: 37.87 seconds 2025-12-11 15:46:23,332 | skyrenderer.utils.time_measurement | INFO: Setup time: 190 ms 2025-12-11 15:46:26,336 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.00 seconds 2025-12-11 15:47:04,361 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:47:04,362 | skyrenderer.utils.time_measurement | INFO: Render time: 38.02 seconds
ss_radius and ss_gain
renders = {}
TranslucentShader.update_default_parameter("base_color", (0, 0.9, 0.1))
TranslucentShader.update_default_parameter("ss_base_color", (0.1, 0.5, 0.5))
TranslucentShader.update_default_parameter("ss_radius", (0, 0, 0))
renders["ss_radius=0"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("ss_radius", (0.1, 0.1, 0.1))
renders["ss_radius=0.1"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("ss_radius", (0.5, 0.5, 0.5))
renders["ss_radius=0.5"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("ss_radius", (0.1, 0.1, 0.1))
TranslucentShader.update_default_parameter("ss_gain", 0)
renders["ss_gain=0"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("ss_gain", 0.5)
renders["ss_gain=0.5"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("ss_gain", 1)
renders["ss_gain=1"] = scene_composer.get_render()
scene_composer.visualize_grid_desc(renders, shape=(1000, 1500), n_cols=3, blend_text_background=True)
TranslucentShader.update_default_parameter("ss_gain", 0.25)2025-12-11 15:47:04,809 | skyrenderer.utils.time_measurement | INFO: Setup time: 223 ms 2025-12-11 15:47:07,830 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.02 seconds 2025-12-11 15:47:42,950 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:47:42,951 | skyrenderer.utils.time_measurement | INFO: Render time: 35.12 seconds 2025-12-11 15:47:43,159 | skyrenderer.utils.time_measurement | INFO: Setup time: 196 ms 2025-12-11 15:47:46,169 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.01 seconds 2025-12-11 15:48:23,888 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:48:23,889 | skyrenderer.utils.time_measurement | INFO: Render time: 37.72 seconds 2025-12-11 15:48:24,127 | skyrenderer.utils.time_measurement | INFO: Setup time: 218 ms 2025-12-11 15:48:27,241 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.11 seconds 2025-12-11 15:48:59,307 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:48:59,308 | skyrenderer.utils.time_measurement | INFO: Render time: 32.07 seconds 2025-12-11 15:48:59,521 | skyrenderer.utils.time_measurement | INFO: Setup time: 194 ms 2025-12-11 15:49:02,442 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.92 seconds 2025-12-11 15:49:38,933 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:49:38,934 | skyrenderer.utils.time_measurement | INFO: Render time: 36.49 seconds 2025-12-11 15:49:39,146 | skyrenderer.utils.time_measurement | INFO: Setup time: 193 ms 2025-12-11 15:49:42,064 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.92 seconds 2025-12-11 15:50:17,236 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:50:17,236 | skyrenderer.utils.time_measurement | INFO: Render time: 35.17 seconds 2025-12-11 15:50:17,440 | skyrenderer.utils.time_measurement | INFO: Setup time: 192 ms 2025-12-11 15:50:20,358 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.92 seconds 2025-12-11 15:50:52,119 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:50:52,120 | skyrenderer.utils.time_measurement | INFO: Render time: 31.76 seconds
TranslucentShader - translucency parameters
We are going to set different colors for each bear.
def set_translucent_parameter_on_red_bear(**kwargs):
red_translucent_provider = TranslucentShader.create_parameter_provider(
scene_composer.renderer_context,
base_color=(0.84, 0, 0.11), **kwargs
)
red_material_definition = MaterialDefinition(
shader=translucent_shader, parameter_set=red_translucent_provider
)
scene_composer.renderer_context.set_material_definition(
node_name="gummy_bear_GEO", material_definition=red_material_definition
) renders = {}
TranslucentShader.update_default_parameter("translucency", 0)
renders["translucency=0"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("translucency", 0.3)
set_translucent_parameter_on_red_bear(translucency=0.3)
renders["translucency=0.3"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("translucency", 0.7)
set_translucent_parameter_on_red_bear(translucency=0.7)
renders["translucency=0.7"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("translucency", 0.5)
set_translucent_parameter_on_red_bear(translucency=0.5)
TranslucentShader.update_default_parameter("translucency_roughness", 0)
set_translucent_parameter_on_red_bear(translucency_roughness=0)
renders["translucency_roughness=0"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("translucency_roughness", 0.5)
set_translucent_parameter_on_red_bear(translucency_roughness=0.5)
renders["translucency_roughness=0.5"] = scene_composer.get_render()
TranslucentShader.update_default_parameter("translucency_roughness", 1)
set_translucent_parameter_on_red_bear(translucency_roughness=1)
renders["translucency_roughness=1"] = scene_composer.get_render()
scene_composer.visualize_grid_desc(renders, shape=(1000, 1500), n_cols=3, blend_text_background=True)2025-12-11 15:50:52,723 | skyrenderer.utils.time_measurement | INFO: Setup time: 197 ms 2025-12-11 15:50:55,654 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.93 seconds 2025-12-11 15:51:23,642 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:51:23,642 | skyrenderer.utils.time_measurement | INFO: Render time: 27.99 seconds 2025-12-11 15:51:23,845 | skyrenderer.utils.time_measurement | INFO: Setup time: 192 ms 2025-12-11 15:51:26,755 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.91 seconds 2025-12-11 15:52:13,448 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:52:13,449 | skyrenderer.utils.time_measurement | INFO: Render time: 46.69 seconds 2025-12-11 15:52:13,655 | skyrenderer.utils.time_measurement | INFO: Setup time: 194 ms 2025-12-11 15:52:16,563 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.91 seconds 2025-12-11 15:53:32,222 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:53:32,223 | skyrenderer.utils.time_measurement | INFO: Render time: 75.66 seconds 2025-12-11 15:53:32,432 | skyrenderer.utils.time_measurement | INFO: Setup time: 197 ms 2025-12-11 15:53:35,341 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.91 seconds 2025-12-11 15:54:36,058 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:54:36,059 | skyrenderer.utils.time_measurement | INFO: Render time: 60.72 seconds 2025-12-11 15:54:36,280 | skyrenderer.utils.time_measurement | INFO: Setup time: 202 ms 2025-12-11 15:54:39,183 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.90 seconds 2025-12-11 15:55:38,138 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:55:38,138 | skyrenderer.utils.time_measurement | INFO: Render time: 58.95 seconds 2025-12-11 15:55:38,368 | skyrenderer.utils.time_measurement | INFO: Setup time: 207 ms 2025-12-11 15:55:41,341 | skyrenderer.utils.time_measurement | INFO: Context update time: 2.97 seconds 2025-12-11 15:56:42,116 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-12-11 15:56:42,117 | skyrenderer.utils.time_measurement | INFO: Render time: 60.78 seconds
Summary
In this section you have learnt:
- TranslucentShader can be controlled with most of PBR Shader parameters.
- TranslucentShader have two groups of translucency controls: SSS and translucency parameters.