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