7.4 KiB
Workbench 与 3dgrid 迁移评估
1. 评估范围
本文完成路线图中的两个评估目标:
- 阶段 3:评估 workbench 是否值得继续迁到 Three.js。
- 阶段 4:决定
3dgrid是否需要迁到 Three.js。
本次评估基于当前代码状态,而不是基于“理论上能否实现”。
2. 已验证的 Three.js 覆盖面
当前已经稳定并通过验证的 Three.js 路径:
- 简单单模型
GLB预览 - 单模型
GLB的 readonly annotations - direct file view 的单模型
GLBedit annotations
已执行的验证:
npm run verify:previewnode scripts/verify-preview.mjs --mode direct-edit
这意味着 Three.js 已经覆盖“高频阅读态”和“轻量单模型编辑态”的核心路径。
3. Workbench 评估结论
3.1 当前 workbench 真实依赖
workbench 不是单纯的“打开一个模型”,它当前还依赖:
- 编辑态标注
- 点击 pin 后将相机聚焦到世界坐标
- explode slider / reset
- 动画播放控制
- 更完整的摘要、选中部件、标签、模板插入联动
- 非
GLB输入链路(通过prepareModelInput()进入转换流程)
这些依赖在代码里的入口很明确:
focusPin()调用preview.focusWorldPoint(...)- 分解面板调用
preview.setExplode(...)/preview.resetExplode() - workbench 加载模型时固定传入
requireWorkbenchFeatures=true - workbench 模型准备流程仍允许转换后的非
GLB输入
3.2 Three.js 当前已经具备的部分
Three 预览当前已经具备:
- annotation provider
- pick world point
- readonly / direct-view edit annotation overlay 支持
- 动画播放开关
- focusWorldPoint
- explode / reset
- render quality / render scale
- focus selection / wireframe / bounding box / orientation gizmo
- snapshot / model info / selected part info
这说明 Three.js 作为“单模型主链”已经成立,并且关键交互能力已经开始对齐 workbench 契约;是否切换 workbench 的核心问题已经从“能力完全缺失”转为“路由、格式覆盖、验证面和 3dgrid 统一收益是否足够”。
3.3 阻塞缺口
当前不建议立刻把 workbench 切到 Three.js,原因不是“还没试”,而是迁移缺口已经转移到工作流级别:
- workbench 入口仍通过
requireWorkbenchFeatures=true固定回落到 Babylon,尚未开放 Three 路由。 - Three 的 workbench 级关键接口已经进入隐藏能力探针,但这个探针仍是验证模式,不等于生产 workbench 路由已经开放。
- workbench 仍承接转换链输入;即使 Three 支持直接
GLB/GLTF/STL/PLY/OBJ,也需要确认转换后路径、缓存路径、贴图资源和错误反馈在工作台内一致。 3dgrid仍是独立 Babylon 多视口 renderer;如果 workbench 单独切到 Three,统一栈收益仍然有限。
换句话说,direct view 已经能切到 Three,是因为它的验证面更窄;workbench 下一步不再是补一个单点接口,而是要把完整工作流验证、转换链和回退策略一起纳入。
3.4 决策
结论:workbench 暂不迁移到 Three.js,继续保留 Babylon.js 作为专项能力后端。
主要理由:
- direct view 已经覆盖更高频的单模型编辑场景。
- workbench 保留下来的价值,正集中在转换链、explode / focusWorldPoint 等更重交互组合,以及知识面板联动。
- 如果只做“GLB-only 的 Three workbench”,会把 workbench 自己再切成两种体验,收益不够高。
- 即使 workbench 迁过去,只要
3dgrid还在 Babylon,统一栈收益也会被明显打折。
3.5 重开条件
只有在以下条件满足后,才建议重新打开 workbench 迁移议题:
- Three 的
focusWorldPoint、explode / reset、标注和工具栏联动通过真实 workbench UI、转换链和错误反馈验证 - 团队确认 workbench 可以接受 Three 直接格式覆盖范围,或转换链输出统一进入 Three 可承载的路径
3dgrid的后端策略也发生变化
4. 3dgrid 评估结论
4.1 当前 3dgrid 的技术形态
3dgrid 不是 workbench 的“简化版”,而是一套独立渲染器契约:
PreviewGridRenderer是独立接口,不是ModelPreviewcreateGridRenderer()当前直接返回 Babylon grid renderer- Babylon grid 使用一个 Scene + 多个 Camera + 多个 viewport
- 每个 cell 通过
layerMask隔离,可支持 preset 布局和单 canvas 多视口渲染 compare/gallery/compose/timeline等 preset 已经围绕这套模型组织
这说明 3dgrid 迁移不是“把路由改成 Three.js”,而是要新写一套 Three grid renderer。
4.2 迁移成本与收益判断
如果把 3dgrid 迁到 Three.js,至少要重建:
- 多视口 camera 编排
- placement / cell layout 映射
- 多模型共享场景与快照导出
- 现有 preset 结果到 Three renderer 的装配逻辑
- wireframe / reset / export info 等辅助能力
而当前 3dgrid 已经:
- 行为稳定
- 能承载现有 preset
- 没有因为 Babylon 而阻塞单模型主链迁移
因此它带来的主要收益会是“技术统一”,而不是用户体验跃迁。
4.3 决策
结论:3dgrid 暂不迁移到 Three.js,继续保留 Babylon.js 作为 grid 专项后端。
4.4 重开条件
只有在以下条件同时更明确时,才建议重新评估:
- 团队明确要继续缩小 Babylon 依赖面
- 已有清晰的 Three 多视口编排方案
- Babylon grid 的维护成本已经高于重写成本
3dgrid本身获得新的产品诉求,要求与单模型 Three 路径深度统一
5. 剩余迁移缺口
如果未来要继续推进统一栈,当前剩余缺口已经不再是单个 ModelPreview 接口,而是生产路径与工作流验证:
- 决定是否开放 workbench 到 Three 的生产路由,以及失败时的回退策略
- 用真实 workbench UI 覆盖标注、聚焦、explode、工具栏和知识面板联动
- 验证转换链输出、缓存路径、贴图资源和错误反馈
- 明确 workbench 是否继续支持非
GLB输入,或者统一转成 Three 可承载的资源路径 - 新的 Three grid renderer(多视口 / preset / snapshot / export)
这份缺口列表说明 workbench 迁移已经进入产品工作流层面,也说明了为什么 3dgrid 现在不该继续迁。
6. 原型验证结果
本次没有把 “Three workbench” 或 “Three 3dgrid” 接入生产主路径。workbench 已经有隐藏 Three 能力探针,用来确认关键契约是否可承载;3dgrid 仍未接入 Three 原型,因为它不是 ModelPreview,而是独立 grid renderer 体系。
- workbench 生产路径仍要求更完整的转换链、知识面板和错误反馈验证
- Three 能力探针只证明关键接口可用,不代表要立即改变默认路由
3dgrid路径仍需要新的 Three grid renderer 才能迁移
因此本次评估采取的验证标准是:
- 确认 Three 单模型主链已稳定成立。
- 确认 workbench 缺口已经从接口补齐转为工作流验证与生产路由决策。
- 在此基础上给出是否继续迁移的决定。
最终结论:
- Three.js 负责单模型主链
- Babylon.js 保留 production workbench 和
3dgrid专项能力 - Three workbench 保留为受验证的候选路径,等真实工作流验证完成后再决定是否开放
这与路线图中的“终态 A + 终态 B”一致,也是当前收益最高、风险最低的落点。