Source code for unilab.tools.render_teaser
"""Render the packaged MotrixSim teaser scene.
This is a visual-only entrypoint for the paper-cover teaser asset. It loads the
MJCF scene once, creates static scene data, and keeps the Motrix renderer alive
without advancing simulation.
Scene assets are downloaded automatically from HuggingFace on first run.
"""
from __future__ import annotations
import time
from typing import Any
from unilab.assets import ASSETS_ROOT_PATH
TEASER_DIR = ASSETS_ROOT_PATH / "scenes" / "teaser"
DEFAULT_SCENE = TEASER_DIR / "teaser.xml"
TEASER_SYSTEM_CAMERA_LOOKAT = [-1.0e-7, -0.0035363, 0.75]
TEASER_SYSTEM_CAMERA_DISTANCE = 5.6876
TEASER_SYSTEM_CAMERA_ELEVATION = -30.0
TEASER_SYSTEM_CAMERA_AZIMUTH = 90.0
TEASER_RENDER_FPS = 60.0
TEASER_LOG_LEVEL = "WARN"
def _render_settings() -> Any:
from motrixsim.render import RenderSettings
settings = RenderSettings.quality()
settings.enable_shadow = True
settings.enable_ssgi = True
settings.simplify_render_mesh = False
return settings
def _set_teaser_system_camera_view(render: Any) -> None:
render.set_main_camera(None)
render.system_camera.set_view(
TEASER_SYSTEM_CAMERA_LOOKAT,
TEASER_SYSTEM_CAMERA_DISTANCE,
TEASER_SYSTEM_CAMERA_ELEVATION,
TEASER_SYSTEM_CAMERA_AZIMUTH,
)
def _load_teaser_model() -> tuple[Any, Any]:
import motrixsim as mtx
from unilab.assets.hub import resolve_scene_dir
resolve_scene_dir("scenes/teaser")
if not DEFAULT_SCENE.is_file():
raise FileNotFoundError(f"Teaser scene file does not exist: {DEFAULT_SCENE}")
model = mtx.load_model(str(DEFAULT_SCENE))
data = mtx.SceneData(model)
model.forward_kinematic(data)
return model, data
def _run() -> None:
from motrixsim.render import RenderApp
model, data = _load_teaser_model()
frame_dt = 1.0 / TEASER_RENDER_FPS
with RenderApp(TEASER_LOG_LEVEL) as render:
settings = _render_settings()
render.launch(model, render_settings=settings)
_set_teaser_system_camera_view(render)
try:
while not render.is_closed:
render.sync(data)
time.sleep(frame_dt)
except KeyboardInterrupt:
return
[docs]
def main() -> None:
_run()
if __name__ == "__main__":
main()