Change the material properties

materials are PBR you can update albedo, roughness, metallic, reflectance and emissive parameters

[1]:
import numpy as np
from ipywidgets import widgets, interact, interactive

import ipyanimlab as lab
viewer = lab.Viewer(shadow_quality=lab.ShadowQuality.HIGH, move_speed=5, width=800, height=600)

Load the USD Asset

As static asset the ShaderBall is accessible directly from internal resources

[2]:
asset = viewer.import_usd_asset('ShaderBall')

Get the list of materials of an asset

[3]:
asset.material_names()
[3]:
['/ShaderBall/mtl/BallMaterial', '/ShaderBall/mtl/BaseMaterial']
[4]:
material = asset.material('/ShaderBall/mtl/BallMaterial')
material
[4]:
<ipyanimlab.render.material.Material at 0x21439166860>

Play with the material

[9]:
def render(albedo_red, albedo_green, albedo_blue, roughness, metallic, reflectance, emissive):

    # update material
    material.set_albedo(np.array([albedo_red, albedo_green, albedo_blue], dtype=np.float32))
    material.set_roughness(roughness)
    material.set_metallic(metallic)
    material.set_reflectance(reflectance)
    material.set_emissive(emissive)

    # start the rendering of the shadow
    viewer.begin_shadow()
    # render the asset at default position in the shadow
    viewer.draw(asset)
    # end the shadow
    viewer.end_shadow()

    # start the rendering of the scene
    viewer.begin_display()
    # render the default ground
    viewer.draw_ground()
    # render the asset at default position
    viewer.draw(asset)
    # display the image
    viewer.end_display()

    # send all the command to webgl
    viewer.execute_commands()

interact(
    render,
    albedo_red = widgets.FloatSlider(min=0, max=1, value=1),
    albedo_green = widgets.FloatSlider(min=0, max=1, value=1),
    albedo_blue = widgets.FloatSlider(min=0, max=1, value=1),
    roughness = widgets.FloatSlider(min=0, max=1, value=0, step=0.01),
    metallic = widgets.FloatSlider(min=0, max=1, value=0, step=0.01),
    reflectance = widgets.FloatSlider(min=0, max=1, value=0, step=0.01),
    emissive = widgets.FloatSlider(min=0, max=1, value=0, step=0.01)
)

# show the viewer
viewer
[9]: