Files
worldmodel/plans/game_engine_simulation_plan.md
T

22 KiB
Raw Blame History

title, date, draft, tags, categories
title date draft tags categories
结合 3D 游戏引擎的室内世界模型验证方案 2026-05-31 false
规划
3D游戏引擎
仿真
数字孪生
物理
机器人
GameEngine

结合 3D 游戏引擎的室内世界模型验证方案

1. 方案定位

本方案在现有 RoomPlan / ZED 2i / PRISM / 世界模型 技术链路之外,引入 3D 游戏引擎作为一个新的工程层:

3D 游戏引擎不是替代 SLAM、PRISM 或 Isaac Sim,而是作为“可交互数字孪生运行时”:负责实时渲染、交互编辑、轻量物理验证、合成数据生成、多人演示与人工标注。

它解决现有方案中的三个缺口:

  1. 可视化缺口:研究系统输出的 mesh、3DGS、场景图、语义层需要一个直观、可交互、可调试的前台。
  2. 交互缺口:机器人任务不仅要离线评测,还要让研究员快速拖拽物体、修改材质、设置碰撞体、回放动作。
  3. 数据缺口:真实酒店采集成本高,游戏引擎可生成可控扰动、光照变化、遮挡、人流和任务变体。

2. 总体架构

flowchart TB
    subgraph CAPTURE["真实世界采集"]
        IPHONE["iPhone RoomPlan<br/>USDZ / JSON / CAD"]
        ZED["ZED 2i<br/>RGB-D / VIO / 点云"]
    end

    subgraph MEMORY["空间记忆与世界模型"]
        PRISM["PRISM<br/>L1-L4 空间记忆"]
        WM["World Model<br/>M-JEPA / DreamerV3 / Video WM"]
    end

    subgraph ASSET["资产转换层"]
        CLEAN["Mesh 清洗<br/>尺度/坐标/法线/拓扑"]
        SEM["语义绑定<br/>object_id / affordance / material"]
        USD["USD / glTF / FBX<br/>统一资产包"]
    end

    subgraph ENGINE["3D 游戏引擎运行时"]
        VIEW["实时可视化<br/>PBR / 灯光 / UI"]
        PHYS["轻量物理沙盒<br/>碰撞 / 约束 / 关节"]
        SYN["合成数据<br/>RGB / Depth / Seg / Flow"]
        EDIT["交互编辑<br/>拖拽 / 标注 / Remix"]
    end

    subgraph ROBOT["机器人与评测"]
        ROS["ROS 2 Bridge"]
        TASK["任务脚本<br/>导航 / 抓取 / 推拉"]
        EVAL["评测指标<br/>成功率 / 偏差 / 鲁棒性"]
    end

    IPHONE --> CLEAN
    ZED --> CLEAN
    CLEAN --> SEM --> USD --> ENGINE
    PRISM --> SEM
    ENGINE --> ROS --> TASK --> EVAL
    ENGINE --> SYN --> WM
    WM --> PRISM
    PRISM --> ENGINE

3. 引擎选型建议

引擎 适合角色 优点 局限 建议定位
Unreal Engine 高保真酒店数字孪生、演示、复杂交互 渲染质量强,Chaos Physics 支持刚体、约束、破坏、流体等实时物理能力 机器人生态需要自建桥接,工程复杂度高 主推荐:视觉与交互前台
Unity 快速原型、Web/移动端、CrowdRoom 编辑器 C# 开发快,生态适合工具型产品,Unity Robotics 有 ROS TCP Connector 官方 ROS TCP Connector 最近主版本较旧,长期维护风险需评估 推荐:MVP 和产品化编辑器
Godot 开源轻量工具、内部标注器 开源、轻量、部署灵活 高保真渲染、机器人仿真生态弱 可选:低成本标注/浏览工具
NVIDIA Isaac Sim 机器人精确仿真、传感器、合成数据 基于 OpenUSD,面向机器人仿真、测试与合成数据,天然适合 URDF/CAD/USD 资产链路 不适合作为普通用户产品前台,学习和硬件成本较高 保留:严肃机器人仿真后端

推荐采用“双引擎分工”:

  • Unreal / Unity:面向人类研究员和产品用户的交互前台。
  • Isaac Sim:面向机器人控制、传感器仿真、强化学习和 sim-to-real 的高可信仿真后端。

4. 核心管线

4.1 真实扫描到游戏场景

iPhone RoomPlan / ZED 2i
  → 坐标系统一:米制、Z-up/Y-up 转换、世界原点锚定
  → Mesh 清洗:去噪、补洞、简化、法线修复
  → 语义绑定:room_id、object_id、category、bbox、affordance
  → 碰撞体生成:墙体 box collider、家具 convex hull、可操作物体 articulated body
  → 材质重建:PBR baseColor / roughness / metallic / normal
  → 导出:USD 为主,glTF/FBX 为 Web 和通用引擎备选

关键原则:

  • 视觉资产和物理资产分离:高精 mesh 用于渲染,低复杂度 collider 用于物理。
  • PRISM ID 贯穿全链路:游戏引擎中的每个物体都保留 spatial_node_id,方便回写空间记忆。
  • 可编辑但可追溯:人工在引擎中修正的材质、碰撞体、关节参数,要以 patch 形式回写,而不是覆盖原始扫描。

4.2 游戏引擎到 PRISM

游戏引擎不是只读 viewer,而是 PRISM 的交互标注和实验入口:

引擎事件 回写到 PRISM
研究员拖动椅子 delta/object_pose_changed
修正门的旋转轴 L4 节点 joint.axis / joint.limit
标注“可抓取”区域 affordance.graspable_regions
设置碰撞体 L2/L4 物理代理属性
回放机器人失败轨迹 episode memory + anomaly

4.3 游戏引擎到世界模型

游戏引擎可生成有控制变量的训练数据:

数据类型 用途
RGB / Depth / Normal 训练感知 encoder
Instance Segmentation 训练 2D/3D 语义分割
Optical Flow 训练动态预测
Action-State Pair 训练 DreamerV3 / TD-MPC2
Counterfactual Rollout 训练“如果推椅子会怎样”类预测

5. 可交互数字孪生运行时详细方案

本节把“可交互数字孪生运行时”具体化为一个可开发的软件系统。它不是简单的 3D Viewer,而是一个面向研究员、机器人算法工程师和数据标注人员的 Scene Lab:能看、能查、能改、能模拟、能回放、能把修改写回 PRISM。

5.1 产品形态

建议先做桌面端,再做 Web 端:

形态 技术路线 目标用户 适合阶段
桌面 Scene Lab Unity Editor Runtime / Unreal Editor Utility 研究员、算法工程师 P0 MVP
Web Viewer Three.js/R3F 或 Unity WebGL PM、合作酒店、标注人员 P1 展示与轻编辑
Pixel Streaming 高保真版 Unreal Pixel Streaming 远程演示、客户评审 P1/P2

P0 阶段推荐做 Unity 桌面 Scene Lab,原因是迭代快、UI 工具多、和 JSON/glTF/ROS 接口打通成本低。Unreal 分支用于高保真展示,不阻塞 MVP。

5.2 主界面布局

┌──────────────────────────────────────────────────────────────┐
│ Top Bar: 场景选择 | 模式切换 | 保存 Patch | 运行任务 | 导出数据 │
├───────────────┬──────────────────────────────┬───────────────┤
│ Scene Tree    │                              │ Inspector     │
│ - room_305    │        3D Viewport            │ object_id     │
│ - wall_01     │  轨道相机 / 第一人称 / 机器人视角 │ pose/bbox      │
│ - bed_01      │  语义高亮 / 热力图 / 轨迹回放     │ material      │
│ - chair_01    │                              │ physics       │
├───────────────┴──────────────────────────────┴───────────────┤
│ Timeline / Logs: episode 回放 | 事件列表 | PRISM delta diff   │
└──────────────────────────────────────────────────────────────┘

核心交互模式:

模式 快捷操作 用途
Explore orbit / fly / first-person 浏览房间、走廊、大堂
Inspect click object 查看 PRISM 节点、语义、bbox、来源帧
Edit translate / rotate / scale 修正物体位姿、墙体边界、家具尺寸
Physics add collider / set joint / simulate 设置碰撞体、质量、摩擦、门/抽屉关节
Annotate paint / box / polygon 标注可抓取区域、不可通行区、危险区
Replay play / pause / scrub 回放机器人轨迹和失败 episode
Generate randomize / capture 生成合成 RGB-D、分割、扰动样本

5.3 模块拆分

flowchart LR
    LOAD["Scene Loader<br/>USD/glTF/JSON"]
    REG["Registry<br/>object_id ↔ actor"]
    VIEW["Viewport<br/>render layers"]
    SEL["Selection<br/>raycast/pick"]
    EDIT["Edit Tools<br/>transform/material/collider"]
    PHYS["Physics Sandbox<br/>simulate/reset"]
    PATCH["Patch Recorder<br/>diff/event log"]
    BRIDGE["PRISM Bridge<br/>load/save/query"]
    EXPORT["Export<br/>dataset/episode"]

    LOAD --> REG --> VIEW
    VIEW --> SEL --> EDIT --> PATCH
    EDIT --> PHYS --> PATCH
    PATCH --> BRIDGE
    VIEW --> EXPORT
    PHYS --> EXPORT
模块 职责 P0 要做到
Scene Loader 加载 scene.glb/usdscene_graph.json、材质贴图 一个客房可稳定加载
Object Registry 建立 spatial_node_id 到引擎 actor 的映射 点击物体能查 PRISM ID
Viewport 多视角浏览、图层开关、语义上色 支持 RGB / semantic / collider 三种视图
Inspector 展示和编辑节点属性 可改类别、名称、位姿、物理参数
Edit Tools 拖拽、旋转、缩放、吸附、撤销 支持家具位姿修正
Physics Sandbox 局部物理仿真与 reset 支持椅子推动、门旋转、抽屉滑动
Patch Recorder 记录所有人工修改 导出 JSON Patch
PRISM Bridge 读取/写回 PRISM 数据 文件级 API 即可,不要求实时服务
Dataset Exporter 截图、深度、分割、episode log 导出一组训练样本

5.4 数据输入与目录结构

每个场景打包为一个可版本化目录:

hotel_305_scene/
  manifest.json
  assets/
    room_shell.glb
    furniture.glb
    textures/
  prism/
    scene_graph.json
    spatial_nodes.json
    spatial_edges.json
  physics/
    colliders.json
    joints.json
    materials.json
  episodes/
    nav_fail_001.json
  patches/
    2026-05-31_manual_fix.json

manifest.json 作为运行时入口:

{
  "scene_id": "hotel_305",
  "unit": "meter",
  "up_axis": "Y",
  "origin": "room_center",
  "render_assets": ["assets/room_shell.glb", "assets/furniture.glb"],
  "prism_graph": "prism/scene_graph.json",
  "physics": {
    "colliders": "physics/colliders.json",
    "joints": "physics/joints.json",
    "materials": "physics/materials.json"
  }
}

5.5 实时可视化能力

运行时至少提供 6 个可切换视图:

视图 显示内容 用途
Render View PBR 材质、灯光、阴影 检查视觉真实感
Semantic View 不同类别用不同颜色 检查语义分割和类别错误
Instance View 每个实例独立颜色 检查实例切分
Physics View collider、joint、mass center 检查物理代理
Navigation View 可通行区域、障碍物、路径 调试机器人导航
Memory View PRISM L1-L4 图层 看空间记忆如何覆盖场景

关键 UI 功能:

  • 点击任意物体,高亮对应 SpatialNode,并显示来源:RoomPlan / ZED / 人工修正 / WM 推断。
  • 支持按类别过滤:只看门、床、桌椅、可移动物、可抓取物、动态障碍。
  • 支持显示不确定性:低置信度物体用闪烁边框或热力图提示。
  • 支持对比模式:真实扫描 vs 人工修正后 vs 世界模型预测后

5.6 交互编辑能力

编辑不是自由建模,而是围绕 PRISM/机器人验证需要设计的受控编辑。

编辑对象 可编辑字段 保存位置
房间结构 墙体位置、高度、门洞、窗洞 patches/*.json + PRISM L2
家具 位姿、尺寸、类别、是否可移动 PRISM L4 SpatialNode
材质 roughness、metallic、friction 映射 physics/materials.json
碰撞体 box/capsule/convex mesh physics/colliders.json
关节 revolute/prismatic、轴向、范围 physics/joints.json
导航区域 walkable、blocked、slow zone PRISM L2/L3
可供性 graspable、pushable、openable PRISM L4

编辑操作必须满足三条规则:

  1. 所有修改都是 patch:保留原始扫描结果,不直接覆盖。
  2. 每个 patch 有来源:记录 authortimestamptoolreason
  3. 可回放和可撤销patch 可以按顺序 apply,也可以 rollback。

示例 patch

{
  "patch_id": "manual_fix_20260531_001",
  "scene_id": "hotel_305",
  "author": "researcher",
  "ops": [
    {
      "op": "replace",
      "path": "/nodes/chair_305_01/pose_world",
      "value": [1.42, 0.0, -0.33, 0.0, 0.707, 0.0, 0.707],
      "reason": "RoomPlan 椅子朝向错误"
    },
    {
      "op": "add",
      "path": "/nodes/drawer_305_02/joint",
      "value": {
        "type": "prismatic",
        "axis": [1, 0, 0],
        "limit_m": [0.0, 0.42]
      },
      "reason": "为床头柜抽屉补充可操作关节"
    }
  ]
}

5.7 轻量物理沙盒

游戏引擎中的物理层只负责快速验证和交互调试,不作为最终物理真值。

P0 支持:

  • 刚体:椅子、行李箱、垃圾桶、床头柜小物体。
  • 静态碰撞体:墙、地面、床、柜体、卫生间台面。
  • 关节:门的旋转关节、抽屉的滑动关节。
  • 材质参数:摩擦、弹性、质量、重心。
  • 局部 reset:只重置当前物体或当前房间,不重载全场景。

P1 再支持:

  • 布料近似:床单、窗帘只做视觉和碰撞近似。
  • 液体/破碎效果:只做异常事件可视化,不进入机器人控制闭环。
  • 多人/多机器人:用于拥堵和动态障碍测试。

5.8 与 PRISM 的读写接口

P0 不需要数据库服务,直接文件接口即可:

load_scene(manifest.json)
  → load_assets()
  → load_prism_graph()
  → bind_actor_to_spatial_node()

edit_object()
  → update_runtime_actor()
  → append_patch_op()

save_patch()
  → validate_patch()
  → write patches/*.json
  → optional: export prism_delta.json

P1 可以升级为本地 HTTP 服务:

API 方法 用途
/scene/:id GET 获取场景 manifest
/scene/:id/nodes GET 获取 PRISM 节点
/scene/:id/patches POST 保存人工修正
/scene/:id/query POST 自然语言或类别查询
/scene/:id/episodes POST 上传任务回放

5.9 MVP 功能清单

P0 版本只追求一个客房跑通:

优先级 功能 验收标准
P0 加载一个 RoomPlan/ZED 转换后的客房 10 秒内打开,尺度正确
P0 Scene Tree + 物体点击选择 点击椅子能显示 chair_305_01
P0 语义/实例/物理三种视图 一键切换,颜色稳定
P0 家具位姿修正 拖动椅子后能保存 patch
P0 Collider 可视化与编辑 可给椅子生成 box/convex collider
P0 门/抽屉关节编辑 可设置轴向和运动范围
P0 简单物理运行/暂停/reset 推椅子不穿墙,reset 后回初始状态
P0 episode 回放 加载一条机器人轨迹并显示路径
P0 patch 导出 输出可被 PRISM 消化的 JSON

P1 再做增强:

  • 多房间/走廊拼接;
  • Web 只读展示;
  • 合成 RGB-D/Segmentation 数据批量导出;
  • 自然语言查询:“显示所有可移动椅子”;
  • 和 ROS 2/Nav2 做在线联调。

6. 典型应用场景

场景 A:酒店机器人导航调试

  1. PRISM 导出酒店走廊拓扑和局部几何。
  2. 游戏引擎加载场景,放置机器人 avatar 和动态行人。
  3. 通过 ROS 2 bridge 接入 Nav2 或自研控制器。
  4. 在引擎里批量生成拥堵、清洁车占道、门半开等扰动。
  5. 输出成功率、碰撞次数、路径偏差和重规划次数。

场景 B:客房物体操作验证

  1. RoomPlan/ZED 重建客房,PRISM 生成语义场景图。
  2. 游戏引擎把床头柜、椅子、抽屉、门转成可交互 actor。
  3. 研究员人工修正关节轴、摩擦、质量和可抓取区域。
  4. 世界模型在引擎中做 rollout,预测推、拉、拿、放的结果。
  5. 高风险动作再交给 Isaac Sim 或真实机器人验证。

场景 CCrowdRoom Web 编辑器

  1. 用户上传 RoomPlan 房间。
  2. 后端转成 glTF/meshopt/Draco 轻量包。
  3. Web 端以 Unity WebGL、Unreal Pixel Streaming 或 Three.js/R3F 展示。
  4. 用户替换家具、材质、灯光,生成 Remix。
  5. Remix 的变更以 overlay 形式保存,不复制底层几何。

7. 技术实现建议

7.1 Unreal 路线

适合做“酒店数字孪生高保真演示 + 复杂交互调试器”。

引擎:
  - Unreal Engine 5.x
核心模块:
  - USD Stage / Datasmith / glTF Importer
  - Chaos Physics
  - Control Rig / Sequencer
  - Pixel Streaming
  - Python Editor Script
输入:
  - USD: 主资产格式
  - glTF/FBX: 轻量备选
  - JSON: PRISM 场景图和语义属性
输出:
  - episode log
  - RGB-D/Segmentation 合成数据
  - PRISM patch

适合优先验证:

  • 高保真酒店大堂/走廊渲染;
  • 门、抽屉、椅子、行李车等刚体交互;
  • 研究演示和远程评审;
  • 复杂光照、反射、材质对感知模型的影响。

7.2 Unity 路线

适合做“MVP 工具 + CrowdRoom 产品化编辑器 + 快速 ROS 原型”。

引擎:
  - Unity LTS
核心模块:
  - URP/HDRP
  - Addressables
  - ArticulationBody
  - ROS TCP Connector
  - WebGL / iOS / Desktop Build
输入:
  - glTF/FBX/USD 转换资产
  - PRISM JSON scene graph
输出:
  - 用户编辑 overlay
  - 标注 patch
  - 简化 episode log

适合优先验证:

  • RoomPlan 房间浏览器;
  • 家具/材质替换;
  • 简单移动机器人导航;
  • 低门槛标注工具。

7.3 Isaac Sim 路线

适合做“机器人高可信仿真后端”,与游戏引擎形成互补。

核心定位:
  - 机器人传感器仿真
  - URDF/USD 机器人资产
  - 合成数据生成
  - Isaac Lab / RL 训练
  - ROS 2 联调
输入:
  - USD 场景
  - URDF / CAD 机器人
  - PRISM 语义图
输出:
  - 机器人任务评测
  - 合成传感器数据
  - sim-to-real 实验记录

8. 数据格式扩展

建议在 PRISM SpatialNode 上增加一个可选的 engine_proxy 字段:

{
  "spatial_node_id": "chair_305_01",
  "category": "chair",
  "pose_world": [0, 0, 0, 1, 0, 0, 0],
  "bbox": [0.55, 0.58, 0.92],
  "material": {
    "base": "fabric",
    "roughness": 0.75
  },
  "affordance": {
    "movable": true,
    "sittable": true,
    "pushable": true
  },
  "engine_proxy": {
    "asset_uri": "assets/hotel_305/chair_305_01.usd",
    "render_mesh": "chair_305_01_high",
    "collision_mesh": "chair_305_01_convex",
    "rigid_body": {
      "mass_kg": 6.2,
      "friction": 0.6,
      "restitution": 0.05
    },
    "lod": ["high", "mid", "low"]
  }
}

9. MVP 计划:4 周验证闭环

周期 目标 交付物 验收标准
W1 资产链路打通 RoomPlan/ZED 场景 → glTF/USD → Unity 或 Unreal 尺度误差 < 2%,坐标轴正确
W2 PRISM 语义绑定 场景图 JSON 驱动物体高亮、查询、筛选 输入“床头柜”可定位对应 actor
W3 物理代理 为门、椅子、抽屉生成 collider/rigid body/joint 推拉动作无明显穿模
W4 任务回放 机器人轨迹回放 + episode log + PRISM patch 可复现一次失败案例并回写 delta

MVP 只做一个客房或一段走廊,不追求完整酒店。优先证明“真实扫描资产能进入游戏引擎,并与 PRISM 双向通信”。


10. 风险与对策

风险 表现 对策
扫描 mesh 不适合物理 面数过高、破洞、碰撞异常 渲染 mesh 与 collider 分离;自动 convex decomposition;人工修正工具
坐标系统混乱 RoomPlan、ROS、Unreal、Unity 轴向不一致 定义 world_frame.md,所有转换写单元测试
游戏物理不够真实 摩擦、接触、关节误差导致 sim-to-real 差 游戏引擎只做快速筛选;关键实验进入 Isaac Sim 或真实机器人
资产管线过重 USD/glTF/FBX 来回转换丢属性 USD 作为主格式,glTF 只做 Web 分发
双引擎维护成本高 Unreal、Unity、Isaac Sim 三套工程发散 MVP 先选一个主前台;共享资产转换脚本和 PRISM schema

11. 推荐决策

短期采用:

  1. Unity 优先做 MVP:快速做出 RoomPlan 房间浏览、语义高亮、家具替换、简单物理交互。
  2. Unreal 做高保真展示分支:用于酒店场景演示、复杂光照材质、远程评审。
  3. Isaac Sim 保持机器人仿真后端:用于 ROS 2、传感器、RL 和严肃物理评测。

中期目标是形成一条统一管线:

真实扫描 → PRISM 空间记忆 → USD/glTF 资产包 → 游戏引擎交互验证 → episode/patch 回写 → 世界模型训练

这样 WorldModel 项目会多出一个非常实用的“中间地带”:既不像纯研究代码那样难演示,也不像纯游戏场景那样脱离真实数据,而是把真实室内世界变成可运行、可编辑、可评测的 3D 交互实验场。


参考资料