可视化#
本页介绍如何在 Genesis World 场景运行时观察它:交互式查看器窗口,以及无需编写脚本即可打开它的 gs 命令行工具。两者都面向在有显示器的机器上进行开发。若要在离屏渲染图像(颜色、深度、分割、视频)或生成照片级真实感的画面,请参阅 渲染。
每个场景都拥有一个 visualizer(scene.visualizer),它同时驱动查看器和通过 scene.add_camera() 添加的相机。查看器在自己的线程中运行,实时跟随仿真;相机按需渲染帧,并且可以无头运行。
查看器#
通过两个选项对象配置场景的视觉效果。viewer_options 控制交互式窗口;vis_options 控制查看器和每个相机共享的视觉属性(坐标系辅助图形、光照、反射)。传入 show_viewer=True 即可打开窗口:
scene = gs.Scene(
viewer_options=gs.options.ViewerOptions(
res=(1280, 960),
camera_pos=(3.5, 0.0, 2.5),
camera_lookat=(0.0, 0.0, 0.5),
camera_fov=40,
),
vis_options=gs.options.VisOptions(
show_world_frame=True, # draw the world coordinate frame at the origin
world_frame_size=1.0, # length of each axis, in meters
show_link_frame=False, # do not draw per-link frames
show_cameras=False, # do not draw camera meshes and frustums
plane_reflection=True,
ambient_light=(0.1, 0.1, 0.1),
),
show_viewer=True,
)
camera_pos 和 camera_lookat 以米为单位,位于右手、Z 轴朝上的世界坐标系中。camera_fov 是以度为单位的垂直视场角。若 res 为 None,Genesis World 会打开一个 4:3 的窗口,尺寸为显示器高度的一半。
查看器始终使用光栅化器渲染。若要选择场景相机使用的后端(光栅化器、光线追踪器或批处理渲染器),请参阅 渲染后端。
Note
如需限制查看器帧率,请在 ViewerOptions 上设置 refresh_rate。较旧的 max_FPS 参数已弃用,并会映射到 refresh_rate。
realtime_factor 设定仿真本身的节奏:一秒实际时间涵盖多少秒仿真时间,1.0 表示实时,2.0 表示两倍速。显示查看器时,仿真的每一步都会按此节流,跟不上时会平滑地落后;将其设为 None 则始终以最快速度运行。它也决定由 相机 录制视频的播放速度(无论是否显示查看器);设为 None 时因为没有节奏可循,会按实时录制。scene.viewer.realtime_factor 可在场景运行期间修改该值。
只有仿真的步进受节奏控制。在步进之外通过 entity.set_qpos(...) 之类的 setter 改变状态时,查看器会在下一次刷新时自行显示,既不需要调用 scene.visualizer.update(),也不会拖慢执行该操作的循环。scene.reset() 会立即重绘查看器。当从查看器暂停仿真时,步进循环等待的是查看器的下一次刷新,而不是仿真的节奏。某一步在等待节奏期间窗口仍保持响应:在 macOS 上窗口由步进循环驱动,等待期间它会持续重绘并处理鼠标和键盘事件。
用 scene.step(update_visualizer=False) 运行的步进不会改动查看器,也不受节奏控制。在此类步进之后调用 scene.visualizer.update(force=False),即可像其他步进一样显示并按节奏播放;或调用 scene.visualizer.update() 立即重绘全部内容。
场景创建后,可通过 scene.viewer 快捷方式访问查看器,在运行时读取或设置相机位姿:
pose = scene.viewer.camera_pose
scene.viewer.set_camera_pose(pos=(3.5, 0.0, 2.5), lookat=(0, 0, 0.5))
命令行工具#
安装 Genesis World 会添加一个 gs 命令及若干子命令,因此无需编写脚本即可打开查看器。不带参数运行 gs 可列出这些子命令。
每个子命令默认在 CPU 上运行。传入 -b BACKEND 可改为在 gpu、cuda、amdgpu 或 metal 上运行:环境数量少时用 CPU,因为编译更快;环境数量多时改用 GPU,因为它仿真更快。gpu 会选择机器上第一个可用的 GPU 后端,若不可用则回退到 CPU。
gs launch [asset] 在交互式查看器中打开一个资产。它接受 Mesh、URDF、MJCF 或 USD 文件;对于 USD stage,会加载其中的每个刚体实体。它也能打开由 scene.export 写出的 .gscene 文件,其中包含导出该场景时的所有实体和物理选项(见 检查点与仿真状态)。查看器的叠加层提供各关节的滑块以及播放、暂停、单步和重置控件,并且启动时处于暂停状态,方便你先检查资产并摆好位姿。不提供文件时,它会打开一个空场景,你可以在其中实时添加实体。常用标志:-c 可视化碰撞几何体,-r 缓慢旋转资产,-s SCALE 缩放资产,-l 显示连杆坐标系。
gs launch xml/franka_emika_panda/panda.xml
gs play [asset] 打开同样的交互式查看器,但会运行物理仿真,因此关节和刚体会在重力和接触作用下做出响应。不提供文件时,它会加载一个演示场景(地面上的 Franka 机械臂)。它接受 -c 和 -s SCALE。
gs play xml/franka_emika_panda/panda.xml
gs animate 'pattern' 将所有匹配 glob 模式的图像合成为视频,写入 video.mp4。传入 --fps 设置帧率(默认 30)。
gs animate 'frames/*.png' --fps 60
gs replay file.gstraj 打开录制轨迹时所在的场景,并在查看器中循环回放该记录,直到关闭查看器。回放按仿真原本的节奏进行,会遵循 realtime_factor,每一帧保持其跨越的步数所对应的时间。录制方法见 检查点与仿真状态。传入 -e 及要渲染的环境索引,这样多环境记录只绘制其中少数几个,回放更快。
gs replay run.gstraj -b gpu -e 0 3
Note
gs view 仍可作为 gs launch 的已弃用别名使用,并会打印弃用警告。请改用 gs launch。
另请参阅#
渲染:相机、图像类型、视频、光照和渲染后端。
交互式 GUI 与调试:检查对象、绘制调试几何体,以及查看器内的控制面板。
查看器交互与插件:通过按键绑定和插件扩展查看器。