docs: update mocap delivery timeline and migration workflow

This commit is contained in:
linkong
2026-04-14 19:20:40 +08:00
parent 7ffc8537e4
commit a4e6ce7489
2 changed files with 181 additions and 15 deletions

144
docs/ue5_led_context.md Normal file
View File

@@ -0,0 +1,144 @@
# 项目背景UE5 + 3D LED 大屏展示系统
> 供其他 AI 快速了解项目背景和当前状态。
> 最后更新2026-04-14
---
## 一、项目定位
这不是一个普通的桌面地球应用,而是一套**领导演示用的 3D 沉浸式展示系统**。
核心逻辑:
- 态势感知数据(超算、海缆、卫星)是内容
- 3D LED 大屏 + 实时渲染 + 动捕交互是"醋"——没有它,内容再好也只是普通屏幕
- 主要受众:领导/决策层,注重视觉冲击力
---
## 二、硬件配置
| 硬件 | 规格 | 说明 |
|------|------|------|
| 3D LED 大屏 | 5.12m × 2.88mP1.538mm,被动偏振式 | 观众戴无源 3D 眼镜≤18g60Hz 即可出稳定 3D |
| 渲染工作站 | 双路国产 X86 CPU + RTX 5090 32GB | 驱动 UE5 实时渲染 |
| 视频处理器 | 随屏配套(品牌待确认) | 接收 GPU 信号,驱动 LED 墙 |
| 动捕摄像头 | RGB 摄像头 ×24K直连电脑 | 无穿戴姿态识别 |
| 音响 | 解码功放 + 吸顶喇叭 ×5 + 低音炮 | 配套 |
---
## 三、软件架构
```
摄像头×2直连
↓ 动捕插件(供应商提供 UE5 插件)
UE5 主程序(我们开发)
├── Cesium 地球(实时渲染)
├── 超算数据点(可交互)
├── 其他可交互物件
└── 立体渲染输出
↓ 视频信号(格式待确认)
视频处理器(随屏配套)
↓ LED 驱动信号(行偏振)
5m 被动偏振 3D LED 大屏
```
---
## 四、分工
| 部分 | 谁做 | 状态 |
|------|------|------|
| LED 屏体 + 视频处理器 | 屏幕供应商 | 采购中 |
| 动捕插件UE5 插件形式) | 动捕供应商 | 待交付 |
| UE5 基础工程(关卡+角色+动捕绑定) | 动捕供应商 | 待交付 |
| 地球场景 + 数据可视化 + 交互逻辑 | 我们(本项目) | 开发中 |
| 后端数据接口 | 我们(本项目) | 已完成 |
| 其他 9 个定制 3D 资产和动画 | 3D 内容供应商 | 采购中 |
---
## 五、动捕交互方式
**交付形式(已确认)**
- 供应商给我们**完整 UE5 工程**,包含:
- 视频动捕插件
- 已配好绑定和重定向的 3D 角色
- 3D 模型和动画资产
- 接两台摄像头即可直接运行
- **我们的任务**:把他们工程的内容(插件 + 角色 + 资产)**迁移进我们的 `ue_client/` 工程**,然后把角色动作映射到地球操作
**待确认**:角色动作的触发点是什么形式?
- 蓝图 Custom Event`OnGestureRotate`
- AnimNotify
- 需要我们自己判断骨骼姿态?
**交互目标(一期)**
1. 手势旋转地球
2. 手势缩放地球
3. 手势指向/确认 → 选中数据点,弹出信息卡
4. 鼠标作为备用输入(始终可用)
---
## 六、立体渲染
**待确认**
1. 供应商基础工程里是否已配好立体渲染输出?
2. 如果没有视频处理器接受什么格式Side-by-Side / Top-Bottom / 其他)
3. 给供应商的文件形式UE5 工程 / .exe / 视频文件 / 直连实时输出?
**已准备**`StereoRenderingManager.h/.cpp` 支持运行时切换 SbS/TbB格式确认后直接启用。
---
## 七、已完成的代码
### 后端 (`backend/app/api/v1/ue_data.py`)
- `GET /api/v1/ue/status` — 健康检查
- `GET /api/v1/ue/compute-points` — TOP500 超算(平铺 JSON
- `GET /api/v1/ue/landing-points` — 海缆登陆点
- `GET /api/v1/ue/cables` — 海缆路由几何
- `GET /api/v1/ue/satellites` — 卫星 TLE 数据
### UE5 C++ (`ue_client/Source/PlanetClient/`)
| 文件 | 功能 |
|------|------|
| `PlanetDataTypes.h` | FComputePoint 等数据结构 |
| `PlanetDataManager` | HTTP 拉取 + mock 数据 + 生成 Actor |
| `ComputePointActor` | 超算点 Actor三态材质正常/悬停/选中)|
| `InteractiveObjectBase` | 所有可交互物件的基类 |
| `GlobeInteractionComponent` | 拖拽旋转地球(改 Cesium 经纬度原点)+ 缩放,带惯性 |
| `StereoRenderingManager` | 立体渲染开关SbS/TbBIPD 可调 |
| `MotionCaptureInterface.h` | 动捕接口抽象(待用插件 API 替换实现)|
| `PlanetPlayerController` | 统一处理鼠标 + 动捕输入 |
| `PlanetGameMode` | 场景入口 |
### 文档
- `docs/ue_client_setup_guide.md` — 编辑器操作 step-by-step 指南
- `docs/ue_todo.md` — 待供应商回复的 TODO
- `docs/ue5_mvp_fused_plan.md` — 完整实施方案v3.0
---
## 八、交付时间线
| 时间 | 内容 | 状态 |
|------|------|------|
| 本周末前 | 动捕供应商:含动捕插件 + 3D 角色(绑定/重定向已配好)的基础 UE5 工程 | 等待中 |
| 之后尽快 | 动捕供应商:动画资产(复制进 Content/ 即可直接调用) | 等待中 |
| TBD | LED 屏供应商:视频处理器接受的 3D 信号格式(或直接技术支持对接) | 等待中 |
**拿到基础工程后可立即做**:迁移插件和角色,接摄像头做动捕调试,然后对接动作→地球操作映射。
**双目 3D 显示**:供应商可提供技术支持,等视频处理器到位后直接对接。
---
## 九、当前阻塞项
1. **动捕基础工程**(本周末前到)→ 迁移内容,确认动作触发方式,完成交互对接
2. **动画资产**(尽快)→ 复制入 Content/,在场景中引用
3. **3D 显示格式**(有供应商技术支持)→ 配置 `StereoRenderingManager`

View File

@@ -29,30 +29,45 @@ ue_client/Source/PlanetClient/StereoRenderingManager.cpp — EnableStereo() 函
--- ---
## TODO-2动捕插件 API 文档 ## TODO-2动捕角色接入
**已确认**动捕识别以 UE5 插件形式交付,摄像头直连电脑,不走 Live Link 转接。 **已确认**
- **本周末前**:供应商交付含动捕插件 + 3D 角色(已配好绑定和重定向)的基础 UE5 工程
- 接入两台摄像头4080 以上显卡即可直接运行动捕调试
- **之后尽快**:动画资产单独交付,复制到工程 Content/ 目录即可直接调用
- **我们的任务**:把他们工程内容迁移进 `ue_client/`,把角色动作映射到地球操作
**等待信息**:供应商提供插件文件 + API 文档后,需要知道: ---
### 阶段 A拿到基础工程后本周末
**迁移步骤**
1. **迁移动捕插件**
- 从供应商工程 `Plugins/` 拷到 `ue_client/Plugins/`
- `PlanetClient.uproject``Plugins` 数组添加插件条目(`Enabled: true`
- `PlanetClient.Build.cs``PublicDependencyModuleNames` 加插件模块名
2. **迁移角色**
- 把角色 Blueprint、动画、骨骼网格从供应商 `Content/` 拷到 `ue_client/Content/`
- 在关卡里放置角色 Actor确认摄像头接入后能正常驱动
3. **接入动作触发(关键,看到工程后确认方式)**
| 需要确认的内容 | 用途 | | 需要确认的内容 | 用途 |
|-------------|------| |-------------|------|
| 插件模块名称(`ModuleName` | 加入 `PlanetClient.Build.cs` 依赖 | | 角色动作怎么暴露给外部? | Blueprint Custom Event / AnimNotify / 骨骼姿态变量? |
| 手势事件的 C++ 类名 / 委托名 | 替换 `MotionCaptureInterface.h` 里的抽象接口 | | 手势集合有哪些? | 填写 `EMotionGesture` 枚举,配置 `FMotionActionMapping` |
| 手势集合(能识别哪些手势) | 填写 `EMotionGesture` 枚举,配置 `FMotionActionMapping` | | 是否持续输出旋转增量? | 旋转地球用"持续增量"还是"离散手势触发" |
| 是否支持持续输出旋转增量 | 决定旋转地球用"持续增量"还是"离散手势触发" | | 插件模块名称(`ModuleName`| 加入 `Build.cs` 依赖 |
| 数据回调是 C++ 委托还是 Blueprint 事件 | 决定绑定方式 |
**拿到插件后的接入步骤(我来做)** **拿到工程后(我来做)**
1. 插件放到 `ue_client/Plugins/` 目录 - 插件实际 API 实现 `UMotionCaptureReceiver` 子类
2.`PlanetClient.uproject` 里启用插件 -`PlanetPlayerController::BeginPlay` 里取消注释 `BindMotionCaptureEvents()`
3.`PlanetClient.Build.cs` 里加插件模块依赖
4. 用插件实际 API 实现 `UMotionCaptureReceiver` 子类
5.`PlanetPlayerController::BeginPlay` 里取消注释 `BindMotionCaptureEvents()`
**代码位置(接口已预留)** **代码位置(接口已预留)**
``` ```
ue_client/Source/PlanetClient/MotionCaptureInterface.h — 基类和手势枚举 ue_client/Source/PlanetClient/MotionCaptureInterface.h — 基类和手势枚举
ue_client/Source/PlanetClient/PlanetPlayerController.cpp — BindMotionCaptureEvents() ue_client/Source/PlanetClient/PlanetPlayerController.cpp — BindMotionCaptureEvents()
ue_client/Source/PlanetClient/PlanetClient.Build.cs — TODO 注释处加插件模块名 ue_client/Source/PlanetClient/PlanetClient.Build.cs — TODO 注释处加插件模块名
ue_client/PlanetClient.uproject — Plugins 数组加插件条目 ue_client/PlanetClient.uproject — Plugins 数组加插件条目
@@ -60,6 +75,13 @@ ue_client/PlanetClient.uproject — Plugins 数组加
--- ---
### 阶段 B动画资产到位后
- 把供应商提供的动画资产直接复制到 `ue_client/Content/` 对应目录
-`PlanetDataManager` / 场景 Actor 里引用这些资产即可调用
---
## 答复到位后的操作清单 ## 答复到位后的操作清单
拿到答案后告诉我,我来: 拿到答案后告诉我,我来: