用途:MuJoCo Studio 是用于构建可视化界面的组件集合,替代旧版 simulate 工具。默认界面为 Studio Viewer App,可通过 Studio Plugins 定制扩展。底层使用 Dear ImGui 做 UI、Google Filament 做渲染(PBR,支持 Vulkan、OpenGL、Metal、WebGL),并通过 WebViewer(NetImgui WASM)支持浏览器远程流式查看。
主要能力:插件可组合复用,覆盖环境编写、资产管理、智能体编排等场景。相比旧版,GUI 由 mjui 改为 Dear ImGui,绘图由 mjr_figure 改为 ImPlot,渲染后端由仅 OpenGL 改为 Filament,并新增 Web 远程查看与 C++/Python 插件架构。Python 侧采用解耦的仿真/查看线程,通过消息传递同步;C++ App 为单线程、主循环内共享。
使用方式:Python 提供 launch_web.run、launch_native.run、launch_passive.run 三个运行器,均通过 .run(...) 启动查看器并执行同步循环。launch_web 在后台守护线程启动 WebViewer,主机无需原生图形依赖,适合无头服务器、容器与远程开发;launch_native 启动本地 Filament 窗口;launch_passive 根据 config.gfx 自动委派。多数场景推荐 launch_web.run。参考实现见 python/mujoco/experimental/studio/viewer.py。
消息机制:通信分 Snapshot(有损、最新值优先)与 Event(无损、FIFO 队列)。高频连续状态用 Snapshot,如 StateSnapshot;离散动作、结构重载与用户输入用 Event,如 ModelEvent。双向快照用 messages.send_if_changes 仅在变化时发送。插件通过 @messages.handler 订阅,优先级有 CRITICAL、USER、LIBRARY、INTERNAL。生命周期事件包括 ViewerInitEvent、ModelEvent、PostModelEvent、UpdateEvent、BuildGuiEvent、ExitEvent,以及仿真侧 SimInitEvent、PreStepEvent、StepEvent、PostStepEvent 等。
限制:资料未提供收费、价格、平台支持范围与性能数据。ExitEvent 处理器不应返回 True,以免阻断其他插件清理。优先使用 Pre*/Post* 事件而非调整优先级来排序生命周期阶段。