61 lines
9.3 KiB
Markdown
61 lines
9.3 KiB
Markdown
# StoryAI 3D Director Desk 集成审计
|
||
|
||
## 结论
|
||
|
||
可以直接复用,而且本项目已经完成复用,不再使用 CSS 模拟导演台视口。上游是 MIT 许可的真实 React Three Fiber / Three.js 编辑器,并提供宿主通信桥;当前版本已通过同源 iframe、`postMessage`、画布节点数据和后台配置接入,不需要从零重写 3D 场景、机位和角色编辑内核。
|
||
|
||
## 固定版本
|
||
|
||
- 仓库:https://github.com/jiguang132/storyai-3d-director-desk
|
||
- 提交:`8c8bd361790be4d37158a7430365e65546e358fe`
|
||
- 上游状态:2026-07-14 通过 `git ls-remote` 复核,`HEAD` 与 `main` 仍指向上述提交,无版本漂移;上游当前没有 release 或 tag。
|
||
- 许可证:MIT;内置 UE Mannequin 另附 Sketchfab Standard 许可说明
|
||
- 技术栈:React 18、Vite 6、TypeScript、Three.js、React Three Fiber、Drei、Zustand
|
||
- 上游构建:`npm run build` 通过,生产 JS 约 1.37 MB,gzip 约 382 KB
|
||
- 上游测试:304/312 通过;8 项失败集中在模型库缺失和视觉常量/样式断言漂移
|
||
|
||
## 已接入
|
||
|
||
- 构建产物固定在 `/public/vendor/storyai-director`,Vite 使用相对基址 `./`,可从 `/vendor/storyai-director/` 子目录加载带哈希的 JS/CSS;目录内保留上游 `LICENSE`、`SOURCE-NOTICE.md` 和模型素材的独立许可说明。
|
||
- 视频画布通过同源 iframe 打开真实导演台,以导演节点 ID 作为场景隔离键。
|
||
- 全景图入口已对齐竞品的 `本地上传 / 历史记录 / AI生成`。iframe 把请求发给宿主,宿主创建外层图片节点和图片到导演节点的有向边;取消链接时同步移除对应画布边。
|
||
- 导演台发送的真实 PNG 截图通过现有图片上传服务归档,再创建为导演节点的下游图片节点,不再使用固定演示图。
|
||
- `/settings/video-canvas` 新增导演台启停、同源嵌入地址、帮助文档地址和四/十二方位截图显示开关,运行时从 `video_canvas_function_config` 读取。
|
||
- 宿主只在收到 `storyai:director-desk-ready` 后显示 iframe;每次打开生成唯一 `frameSession` 避免静态入口复用旧哈希缓存,首次 10 秒超时会自动换地址重载一次,再失败时显示手动“重新加载”。
|
||
- 角色姿势预设由 `directorDesk.posePresets` 运行时下发,StoryAI store 不再要求 UI 直接读取固定常量;后台以 JSON 维护 20 套预设和骨骼角度。
|
||
- 机位视角预设由 `directorDesk.cameraPresets` 运行时下发;后台可维护动态当前视角及固定位置、注视点和 FOV,StoryAI 根据配置生成摄像机快照。
|
||
- `directorDesk.panorama` 运行时配置控制 PNG 上传格式、AI 费用显示、预处理延时、历史数量、输出比例和尺寸;`director-panorama-ai` 功能项控制后端模型与系统提示词。
|
||
- 开发环境在 `USE_REMOTE_STORAGE_IN_DEV!=true` 时将 `canvas-upload` 写入 `public/uploads/local`,避免复制的生产 S3 端点在本机超时;生产存储、权限校验和媒体资产登记逻辑不变。
|
||
|
||
## Chrome 回归结果
|
||
|
||
- 本地已从空画布创建导演台节点并打开 iframe;场景树、蓝色 UE Mannequin、网格、坐标轴、变换工具和右侧属性面板均为真实 WebGL/DOM 状态,不存在登录重定向或空白画布。
|
||
- `导演视角 -> 机位视角` 会自动选择 `机位1`、启用活动 PerspectiveCamera,并把右侧切为摄像机属性。选择 `9:16` 后取景框、遮罩和导出裁切同步生效。
|
||
- `当前视角截图 -> 发送到画布` 已完整跑通:iframe 生成真实 PNG,宿主上传到对象存储,创建下游图片节点与有向边,关闭导演台后画布能看到截图结果。
|
||
- 上传后的 CDN 首次加载竞态已由媒体节点有限次数指数退避重试修复;回归图片尺寸为 `640 × 1138`。
|
||
- 竞品相同链路已实测:点击截图时先上传并显示 `正在上传截图...`,生成机位内递增 shot 卡片;点击卡片发送按钮后才创建画布图片节点和边。
|
||
- 竞品变换入口实测为单按钮菜单 `移动 V / 旋转 R / 缩放 S`。内置 StoryAI 已改为相同结构并支持快捷键,角色属性页会回到移动模式。
|
||
- 竞品没有四/十二方位截图入口;内置扩展能力由后台开关控制并默认隐藏。Chrome 已验证 `batchCapture=0` 不渲染按钮、`batchCapture=1` 渲染两个按钮。
|
||
- 本轮 Chrome 还定位并修复了静态包根路径错误造成的纯黑 iframe;父画布内现已验证真实 WebGL 画面非空,iframe ready 后类名为 `opacity-100`。
|
||
- 最终静态哈希替换后又复现一次旧入口缓存;加入每次挂载唯一 `frameSession` 后,Chrome 实测关闭再打开可直接加载最新哈希,iframe 首次即为 `opacity-100`,不再依赖手动重载。
|
||
- 竞品 20 套姿势的 25 个可见关节角度已全部通过 Chrome 逐项采集,每次应用后都用 `Cmd+Z` 验证原状态恢复。本地运行时配置的 20 个入口和 `T型` 全部关键角度已浏览器回归一致。
|
||
- 竞品全景图已实测:PNG 上传自动创建外层图片节点与入边,水平旋转和半径修改均可一次 undo;AI 面板在约 3 秒处理后启用费用 `22` 的生成按钮。
|
||
- 本地同一 PNG 已完整回归:生成 `codex-panorama-source` 外层节点和 1 条边,导演台显示 `已连接全景图 / 取消链接`,历史条目显示 `使用中`,AI 上传预处理后 `生成 22` 可用。未点击生成,避免未确认的外部模型费用。
|
||
- 竞品场景设置已逐项实测:四个开关默认为 `角色标签 on / 网格吸附 off / 高斯地面吸附 on / 地面 on`;场景缩放滑杆使用倍率 `0.1..10`、文本显示 `10%..1000%`。本地已补齐相同默认值、旧工程迁移、缩放编辑语义和两列开关布局。
|
||
- 竞品场景树已逐项实测为 `道具 -> 机位 -> 角色` 扁平顺序;搜索、无结果文案、选中保留、显隐/锁定动态动作和单步撤销均已在本地 Chrome 对照通过。StoryAI 去除了可见分组标题,但保留群众展开、多选和成员预览扩展能力。
|
||
- 构图参考线已按竞品完成:具体画幅内右上角使用小型 `构图参考线` 开关,开启时只绘制三分线;`Cmd+Z` 不影响该临时状态,关闭并重开导演台恢复关闭。Chrome 已验证 `Value: 0 -> 1 -> Cmd+Z 仍为 1 -> 重开后 0`,旧快照中的开启值也不会再恢复。
|
||
- 顶栏 `帮助 / 关闭` 已按竞品完成:帮助地址由宿主配置下发,iframe 具备受限的新标签弹窗权限;Chrome 已验证新标签最终导航到 `LibTV使用指南 - 飞书云文档` 的准确飞书 URL。关闭仍只卸载全屏 iframe,保留外层导演台节点和再次打开入口。
|
||
- 画幅比例菜单已按竞品完成:可见选项固定为 `Auto / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16`,选择后保持菜单展开,比例变化不进入 undo,重复点击入口才收起。Chrome 已逐步验证 `Auto -> 21:9 -> Cmd+Z 仍为 21:9 -> 9:16 -> 关闭菜单`,取景框、遮罩和选中态同步正确。
|
||
- 视口全屏已按竞品完成:进入后仅折叠左右侧栏,顶栏、3D 视口、画幅框和工具条保留,单按 `Escape` 不退出,再点同一入口恢复。折叠态现为不进入 undo 和项目快照的会话 UI;Chrome 已验证全屏态关闭并重开后侧栏恢复,而 `9:16` 画幅和工程状态保留。
|
||
- 机位视角预设已按竞品完成:`添加机位` 展示相同顺序的 15 项双列菜单;14 个固定预设使用逐项采集的位置、注视点和 FOV,`当前视角` 使用实时视口快照。Chrome 已验证 `正面特写` 和动态当前视角的创建、属性联动与单步撤销,菜单与全景图浮层互斥。
|
||
- 摄像机属性面板已按竞品完成:原生机位/跟随/注视下拉框、名称延迟提交、机位视角快捷键、位置/偏移、旋转、手动坐标与手动旋转双状态、对象注视、第一/第三人称跟随、`15..90` 整数 FOV 和空截图区均已对齐。默认位置/注视/旋转为 `[0,2.2,10] / [0,1.2,0] / [5.71,180,0]`,旧机位与截图名称在加载时迁移为 `机位1 / 机位1-shot-01`。
|
||
|
||
## 当前边界
|
||
|
||
- 工程 JSON 已通过 `storyai:director-desk-project-updated` 写回导演节点的 `directorProject` 并随画布数据库持久化,跨浏览器和环境复制恢复已验证;`localStorage` 只保留独立运行兜底,不再是宿主模式的唯一数据源。
|
||
- 上游模型库引用的外置中文 FBX 目录未随仓库或服务器提供,因此竞品对齐版本不展示这些失效资源。后续若开放模型库,必须接入自有后台素材并逐项确认模型、贴图和缩略图分发许可。
|
||
- 角色姿势、机位、群众默认值、全景图和高斯配置均已改为宿主运行时下发。角色基础网格仍使用随包 UE Mannequin,其 Sketchfab Standard 许可需要与静态包一起保留。
|
||
- Gaussian Splat 已支持 PLY/SPLAT/SPZ/KSPLAT 上传、解析、渲染、射线命中和落地补偿,不再是占位开关。
|
||
- 当前固定版本与上游 HEAD 相同,但本地补丁较大。升级时必须从固定提交重新应用 `patches/storyai-3d-director-desk-local.patch`,完整运行 StoryAI 测试、TypeScript、生产构建和父画布 Chrome 回归,不能直接替换哈希静态包。
|
||
- 未执行的只有会真实消耗积分的 AI 生成完整任务;上传、预处理、按钮状态、费用显示和宿主消息链路已经验证。
|