Loading Rigid USD asset
we will load a default usd file, and see how we can render it
[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]:
rigid = viewer.import_usd_asset('ShaderBall.usd')
Render at default position
[3]:
viewer.begin_shadow()
viewer.draw(rigid)
viewer.end_shadow()
viewer.begin_display()
viewer.draw_ground()
viewer.draw(rigid)
viewer.end_display()
viewer.disable(depth_test=True)
viewer.execute_commands()
viewer
[3]:
Render at a specific xform
we can pass a 4x4 numpy matrix to the draw command to draw the asset with that transform.
[4]:
xform = np.eye(4, dtype=np.float32)
xform[:3, 3] = [150, 0, 0]
viewer.begin_shadow()
viewer.draw(rigid)
viewer.draw(rigid, xform)
viewer.end_shadow()
viewer.begin_display()
viewer.draw_ground()
viewer.draw(rigid)
viewer.draw(rigid, xform)
viewer.end_display()
viewer.execute_commands()
viewer
[4]:
Multiple Render
We can pass up to 256 matrices at once to the draw command to draw the asset using instacing.
[5]:
xforms = np.eye(4, dtype=np.float32)[np.newaxis, ...].repeat(3, axis=0)
xforms[0, :3, 3] = [100, 50, 0]
xforms[1, :3, 3] = [-100, 50, 0]
xforms[2, :3, 3] = [-250, 50, 0]
viewer.begin_shadow()
viewer.draw(rigid, xforms)
viewer.end_shadow()
viewer.begin_display()
viewer.draw_ground()
viewer.draw(rigid, xforms)
viewer.end_display()
viewer.execute_commands()
viewer
[5]:
Update the internal transform
The set_xform will store the matrix inside of the asset to be used as the default matrix.
[6]:
xform = np.eye(4, dtype=np.float32)
xform[:3, 3] = [150, 0, 0]
rigid.set_xform(xform)
viewer.begin_shadow()
viewer.draw(rigid)
viewer.end_shadow()
viewer.begin_display()
viewer.draw_ground()
viewer.draw(rigid)
viewer.end_display()
viewer.execute_commands()
viewer
[6]:
Reset the internal transform
the reset method on the asset will reset the transform as the identity.
[7]:
rigid.reset()
viewer.begin_shadow()
viewer.draw(rigid)
viewer.end_shadow()
viewer.begin_display()
viewer.draw_ground()
viewer.draw(rigid)
viewer.end_display()
viewer.execute_commands()
viewer
[7]: