docs: update mocap delivery timeline and migration workflow
This commit is contained in:
144
docs/ue5_led_context.md
Normal file
144
docs/ue5_led_context.md
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
# 项目背景:UE5 + 3D LED 大屏展示系统
|
||||||
|
|
||||||
|
> 供其他 AI 快速了解项目背景和当前状态。
|
||||||
|
> 最后更新:2026-04-14
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、项目定位
|
||||||
|
|
||||||
|
这不是一个普通的桌面地球应用,而是一套**领导演示用的 3D 沉浸式展示系统**。
|
||||||
|
|
||||||
|
核心逻辑:
|
||||||
|
- 态势感知数据(超算、海缆、卫星)是内容
|
||||||
|
- 3D LED 大屏 + 实时渲染 + 动捕交互是"醋"——没有它,内容再好也只是普通屏幕
|
||||||
|
- 主要受众:领导/决策层,注重视觉冲击力
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、硬件配置
|
||||||
|
|
||||||
|
| 硬件 | 规格 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 3D LED 大屏 | 5.12m × 2.88m,P1.538mm,被动偏振式 | 观众戴无源 3D 眼镜(≤18g),60Hz 即可出稳定 3D |
|
||||||
|
| 渲染工作站 | 双路国产 X86 CPU + RTX 5090 32GB | 驱动 UE5 实时渲染 |
|
||||||
|
| 视频处理器 | 随屏配套(品牌待确认) | 接收 GPU 信号,驱动 LED 墙 |
|
||||||
|
| 动捕摄像头 | RGB 摄像头 ×2,4K,直连电脑 | 无穿戴姿态识别 |
|
||||||
|
| 音响 | 解码功放 + 吸顶喇叭 ×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/TbB,IPD 可调 |
|
||||||
|
| `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`
|
||||||
@@ -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 里引用这些资产即可调用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 答复到位后的操作清单
|
## 答复到位后的操作清单
|
||||||
|
|
||||||
拿到答案后告诉我,我来:
|
拿到答案后告诉我,我来:
|
||||||
|
|||||||
Reference in New Issue
Block a user