先记住一句话

一个 Genesis Scene 内含一个 Simulator;Simulator 只激活场景实际需要的 solvers,并用一个 coupler 在每个 substep 交换跨 solver 的接触与作用。

Scene + entitiesmaterial selects solverbuild batched worldssolver substepscoupler interactionrender / observe
Rigidrigid solver
Scenecoupler per substep
Soft / fluidMPM / SPH / FEM
统一接口state + render
“统一多物理”不等于一个 solver 处理一切,而是多个 solver 通过 coupler 交换作用。

1. 先更新对 Genesis 的认识

2024 年的项目已演化并更名为 Genesis World。当前开源主干不是“一个生成式世界模型”,而是 conventional physics + rendering + simulation API。编译底座已从早期资料常写的 Taichi 演化为 Quadrants,照片级渲染主路线是 Nyx。理解当前系统应以新仓库与版本文档为准。

核心职责关键概念
Simulation Interface资产、entity、controller、sensor、并行环境与 GUISceneEntityscene.step()
Physics刚体、软体、颗粒、流体和跨物理耦合solvers + coupler + per-solver state
Render实时、批量与照片级 camera sensingRasterizer、BatchRenderer、Nyx
Compiler把 Python kernel 降到多种硬件后端Quadrants、autodiff、GPU graph、fastcache

2. Entity 如何决定 physics solver

一个 entity 可以理解为三部分:Morph 描述几何、pose 与导入来源,Material 描述物理模型,Surface 描述视觉外观。Material 决定实体被路由到哪个 solver:

Scene
└── Simulator
    ├── RigidSolver   ← rigid robot / URDF / MJCF
    ├── MPMSolver     ← granular / elastoplastic / viscous material
    ├── FEMSolver     ← elastic / plastic deformable solid
    ├── PBDSolver     ← cloth / soft body / particles
    ├── SPHSolver     ← liquid
    ├── SFSolver      ← Eulerian smoke / gas
    ├── ToolSolver    ← kinematic one-way tool interaction
    └── Coupler       ← interactions across active solvers

没有对应实体的 solver 不激活、不分配主要运行状态。scene.build() 是 authoring/runtime 边界:它冻结场景结构、分配 device arrays,并为实际配置编译需要的 kernel。USD/MJCF/URDF 是 importer 输入,不像 Isaac Sim 那样持续充当整个运行时的 scene truth。

3. Coupler 是“统一多物理”的关键

刚体夹爪抓 MPM 软物体、布料落在 rigid table 上、液体推动 rigid wheel,都跨越了 solver 边界。Genesis 用 scene-level coupler 处理这些界面:

  • LegacyCoupler:通用旧路径,文档标记为将弃用。
  • SAPCoupler:Semi-Analytic Primal contact formulation,适合特定 rigid–deformable 组合。
  • IPCCoupler:Incremental Potential Contact,强调无穿透的稳健接触,但通常更昂贵。

“多个 solver 能放在同一 scene”不代表任意 solver × material 组合都同样成熟。双向力、摩擦、守恒、梯度和性能仍需按组合验证。

4. 一次 scene.step()

control step dt
  ├─ substep 1: solvers prepare → coupler resolves → solvers finish
  ├─ substep 2: solvers prepare → coupler resolves → solvers finish
  └─ ...
then publish state / sensors / render

SimOptions 给出全局 dtsubsteps、gravity 与 differentiable mode;某个 solver 也可覆盖自己的时间参数。substeps 越多通常更稳但更慢,且不同 solver 的内部稳定条件并不相同。

RigidSolver 内部使用 generalized qpos/qvel:先做 forward kinematics 与 mass matrix/无约束加速度,再经 broad/narrow phase 生成接触,把 contact、joint limit 与 equality constraint 转成约束修正,最后 semi-implicit integration。它的一个 constraint solver 选项名为 Newton,这里只指牛顿数值迭代,绝不是 Newton Physics 引擎。

5. 并行环境为什么写起来简单

场景定义不变,在 scene.build(n_envs=B) 时打开 batch dimension。之后 state getter/setter 前面多一个 B 维,相同 kernel 同时推进多个环境:

scene.build(n_envs=4096)
qpos = robot.get_qpos()       # [4096, n_q]
robot.control_dofs_position(target_qpos)
scene.step()

同构 batch 最容易跑满 GPU;Genesis 也支持 subset reset/control、heterogeneous environments、batch rendering 和多 GPU 多进程。多 GPU 典型是一进程绑定一张卡再配 PyTorch DDP,并不是一个 physics world 自动横跨所有 GPU。

6. 渲染路径与 sensor 思维

Rasterizer

默认快速路径,适合交互、debug 与 control loop。

BatchRenderer

面向很多并行环境的高吞吐相机输出。

Nyx

自研 GPU path tracer,以 camera sensor 插件接入,可提供 PBR、HDRI、Gaussian splats 和多 camera/env。

Luisa RayTracer

旧照片级路径,官方路线正迁移到 Nyx。

把 Nyx 作为 per-camera sensor 而非 scene-wide renderer,允许控制相机走快速路径、只对保留的数据帧走照片级路径。不过 Nyx 是独立 package,其公开安装状态应按当时文档核对。

7. 可微分物理的正确边界

开启 SimOptions(requires_grad=True) 后,Genesis 记录 substep 中间状态,state getter 返回与 scene 关联的 tensor,loss 可以反传到控制或参数。v1.3 release 继续扩展 differentiable rigid-body simulation。

但“平台支持 autodiff”不代表全部 solver、coupler、collision 和 sensor 操作都有可靠梯度。当前文档仍把 ToolSolver 描述为 rigid tool → soft body 的临时单向可微路径;长 horizon 显存随时间增长,接触变化仍不光滑。实际支持应以安装版本和具体 solver/coupler 测试为准。

8. 什么时候 Genesis 特别有吸引力

  • 任务同时涉及刚体与 cloth、soft body、颗粒、液体或 smoke。
  • 希望用同一 Python API 面向 NVIDIA/AMD GPU、Apple Metal 或 CPU 后端。
  • 想快速构建大量 batched env,又不需要 Omniverse 完整工业栈。
  • 研究 differentiable simulation、材料参数拟合或 rigid-soft manipulation。

9. 四个 Genesis 量级计算

例 1:并行环境 tensor

4096 个环境、每个 6 DoF,position tensor shape 为 [4096,6],共 24,576 个 fp32,约 96 KiB。

例 2:substep 时间

Scene dt=0.02 s,substeps=4,则每个 solver 子步 0.005 s;50 个 scene steps 推进 1 秒物理时间,内部执行 200 个 substeps。

例 3:多物理组合成本

Rigid solver 每 substep 0.4 ms、MPM 1.1 ms、coupler 0.3 ms,若串行总计 1.8 ms;4 substeps 约 7.2 ms/scene step,不含 render。

例 4:real-time factor

模拟 10 s 物理时间用 2 s wall time,real-time factor=$10/2=5×$;若加入渲染后用 8 s,则降为 1.25×,不能沿用无渲染 FPS。

常见误解:

Genesis 的单项超高 FPS 宣传不是跨引擎结论。版本、模型、环境数、solver、contact、精度、渲染和统计方法不同,数字不能直接用于选型。

自测

1. Genesis 怎样决定一个 entity 由哪个 solver 推进?

由 entity 的 Material 类型路由到对应 solver;scene 只激活实际需要的 solver。

2. Coupler 与 solver 的职责有什么不同?

solver 推进自己物理域内的状态;coupler 处理不同 solver 所属实体之间的接触和交换。

3. 为什么 Nyx 设计成 camera sensor 有意义?

同一场景可以让快速控制相机与照片级数据相机采用不同路径,避免所有 camera 都承担同样成本。

一手资料

Genesis World Repository 描述当前四层架构;Physics Engine 定义 solver/coupler;Parallel Simulation 解释 batch 语义;Differentiable Simulation 记录能力与限制;v1.3.3 Release 是本文快照版本。