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]: