任务中心
转换任务队列 · 状态机:排队 → 解析 → 转换 → 压缩 → 编码 → 完成
任务列表
—
| 任务号 | 源文件 | 输出目标 | 状态 | 耗时 | 创建时间 | 完成时间 | 操作 |
|---|---|---|---|---|---|---|---|
连接服务中… | |||||||
新建转换
输入源 → 输出目标 → 参数 → 预估 → 提交
① 输入源
浏览器直传或服务器路径 · 支持 RVM / STEP / FBX / OBJ / STL / IFC / DXF / glb / glTF
拖入模型文件夹,或点击多选模型、材质和贴图
OBJ 建议选择整个文件夹,保留 MTL 和贴图子目录 · 每次合计上限 8GB
浏览器只能读取您选择的文件。单选 OBJ 时不能自动读取旁边的 MTL 或贴图;请选择文件夹或同时多选附件。
服务器样本源:
② 输出目标
多选 · 各目标独立编码,共享同一次中间表示(实测导出链 <10% 总耗时)
.dpepack
DPE 编辑器
原生格式 · 实例化 + 4 档 LOD + 列式属性 · 编辑器内一键置入
.glb
glTF 2.0 通用
EXT_mesh_gpu_instancing 实例化保留 · 孪大师客户端及通用三维软件直接导入
3D Tiles
大场景流式
OGC 1.1 · 扇区→tile、LOD→geometricError 阶梯 · 孪大师大场景 / GIS 生态
.fbx
FBX 通用交换
Binary 7.4 · 独立构件、材质颜色、UV 与内嵌贴图 · 静态三角网格
③ 转换参数
灰色项为规划中参数,当前不参与提交
LOD 档位
4 档(默认)仅 lod0
按构件简化;默认保留全部构件
LOD 架构
proto(推荐)sector
推荐按原型生成 LOD,保留重复构件实例
几何压缩
几何压缩;实际体积以转换结果为准
缺失材质处理
OBJ 缺少材质或贴图时允许降级;任务会标记外观待核验
STEP 几何精度
STEP 曲面离散化精度;数值越小,通常生成更多三角面
源单位制
这是额外的尺寸缩放;STEP、IFC 和 GIM 已自动换算为米,通常保持默认
动画模型:GLB 输入可完整保留动作、骨骼蒙皮和形变,输出请选择 GLB / dpepack。自动采用无损压缩并保留源坐标,不执行静态减面。FBX 动画直转及 FBX / 3D Tiles 动画导出尚未开放。
坐标轴约定
额外旋转模型;GIM、IFC 已自动调整朝向,请保持默认
3D Tiles 定位
默认本地坐标;地图定位请填写实际经纬度与椭球高
经度 / 纬度 / 高度
GIM 转换范围
仅对 GIM 生效。电气专项便于核对设备;需要完整全站时选择全专业
LOD 误差目标
允许误差越小,通常保留更多几何;实际体积以转换结果为准
网格焊接容差
W89:重复顶点/微缝合并粒度——哈希量化步长(全格式生效)
小构件过滤
W2-①:removeSmallParts——三角数小于阈值的构件整体丢弃(LOD 前清理)
简化质量预设
控制允许的几何偏差,与上方误差目标共同生效
边界保留
保留网格边界,减少装配接缝处的简化变形
LOD 目标比例
LOD1/2/3 的目标面数比例;受误差限制时会保留更多面
量化精度
P1
坐标轴约定
P1
实例化归并
M4 rot-merge
④ 预估
服务端经验系数 · 提交后以任务实测为准
选择输入源与输出目标后显示预估
提交后进入任务队列 · 可通过 API / MCP 跟踪状态
产物仓库
已完成任务的输出产物 · 体积对比与交付
产物列表
—
| 产物 | 来源任务 | 体积对比(原始 → 产物) | 创建时间 | 操作 |
|---|---|---|---|---|
连接服务中… | ||||
体积对比取任务实测值;导出链在构建完成后独立执行(「一次构建、多目标导出」)。glb 产物经编码器内建读回验证(三角 / 实例守恒)。
模型视口
轻量化 glb 产物在线预览 · 实例化 + meshopt 压缩原生支持
对接管理
消费端连接 · 交付协议 · 凭据
DPE 编辑器
交付通道已通
- 消费端
- DPE 编辑器(BS 架构 · 本机或局域网)
- 交付协议
- REST POST /api/v1/tasks/{id}/deliver → picimos-deliver-v1 产物清单
- 拉取方式
- glb 单文件直链;dpepack / 3dtiles 目录深路径(manifest.json / tileset.json)
- 装载校验
- 编辑器内置加载器运行时对账(三角 / 实例零偏差)
- 降级行为
- 编辑器离线时任务照常执行,产物转入仓库待领取
- 联调状态
- 双头鉴权联调闭环;「从平台导入」通道已实测(dpepack / 3dtiles 置入 + 属性回读 + 批量回写)
最近交付
| 任务 | 消费端 | 交付物 | 时间 |
|---|---|---|---|
暂无交付记录 · 产物仓库中点击「置入 DPE 编辑器」发起首次交付 | |||
孪大师客户端
标准格式输出 · 无专有协议
- 常规导入
- .glb(实例化保留)—「导入 glb」直接消费
- 大场景
- 3D Tiles 1.1 — 大场景模式流式加载(SSE 驱动 LOD)
- 导出预设
- glb · Y-up · 单位米 · 纹理嵌入(可修改)
API 凭据
私有化 / 云端形态启用
| 名称 | Key | 作用域 | 状态 |
|---|---|---|---|
| dpe-editor | plw_7f3a…c21e | tasks:read artifacts:read deliver | 活跃 |
| mcp-gateway | plw_92bd…08af | tasks:write artifacts:read | 活跃 |
| ci-pipeline | plw_e550…9d3c | tasks:write | 未使用 30 天 |
本地形态回环绑定免鉴权(当前);凭据体系随私有化部署启用(P1)。
变更审计
业务属性回写台账 · 谁在何时改了哪个构件的什么
回写记录
按时间倒序 · 最近 12 条
| 任务 | 消费端 | 构件 | 变更键 | 时间 |
|---|---|---|---|---|
暂无回写记录 · 在 DPE 编辑器属性卡双击业务属性值,或通过 PATCH 端点发起首次回写 | ||||
回写协议:PATCH /api/v1/tasks/{id}/artifacts/dpepack/attributes/biz/rows/{cid}(单构件)·
PATCH …/biz/bulk(批量:多构件 × 多键原子应用,任一构件不存在整体拒绝)。
契约:键集不可变(仅允许改已有键的值)+ 类型强约束(schema 推导)+ 改后 schema 自动重算(消费端分组口径保持一致)。
台账随任务持久化(重启不丢,上限 100 条滚动);产物文件是唯一事实源,台账为审计辅助。
API · SDK · MCP
/api/v1 · 本地服务免鉴权(回环绑定)· 全响应 CORS 开放
REST 端点
以下端点均为本服务真实实现
POST/api/v1/tasks提交转换(sourcePath + targets + options)· v2.3 参数:linearDeflection / sourceUnit / upAxis / lodErrorScale / weldTolerance
GET/api/v1/tasks · /{id}任务列表 / 详情(v2.3:列表支持 ?search=&status=&format= 三参过滤)
DEL/api/v1/tasks/{id}v2.3 新增:删除任务(取消运行 worker + 清产物目录 + 保留源文件)
GET/api/v1/tasks/{id}/artifacts产物清单(格式 / 体积 / 三角 / 验证标记)
GET/api/v1/tasks/{id}/artifacts/{a}[/*]产物下载(目录产物支持深路径)
POST/api/v1/tasks/{id}/deliver交付协议 picimos-deliver-v1(一键置入)
POST/api/v1/estimate体积 / 耗时预估(服务端经验系数)
GET/api/v1/sources服务器样本源清单(输入源数据)
GET/api/v1/formats输出目标支持矩阵
GET/api/v1/health · /stats健康检查 / 队列与吞吐统计
MCP 工具集
AI 大模型接入通道(M4+ 规划)
| 工具 | 语义 |
|---|---|
| submit_conversion | 提交:源 + 输出目标 + 参数 |
| get_task · list_tasks | 状态查询与跟踪 |
| list_artifacts · download_artifact | 产物检索与获取 |
| estimate_source | 体积 / 耗时预估 |
| list_formats | 能力矩阵查询 |
自然语言示例:「把服务器上的装置模型转成孪大师能用的格式」→ submit_conversion(targets=["glb"]) → get_task 轮询 → download_artifact。
调用示例
SDK:@picimos/lightweight-sdk(JS/TS 同构)· M4+ 规划,当前用原生 fetch / curl
# 提交转换并等待完成 curl -X POST http://localhost:8800/api/v1/tasks \ -H "Content-Type: application/json" \ -d '{ "sourcePath": "/data/big120.glb", "targets": ["dpepack", "glb", "3dtiles"], "options": { "compress": true, "lodArch": "proto" } }' # 交付协议(一键置入——DPE 编辑器消费) curl -X POST http://localhost:8800/api/v1/tasks/<id>/deliver \ -H "Content-Type: application/json" \ -d '{"consumer": "dpe-editor"}'
// 原生 fetch(控制台同款调用,浏览器 / Node 同构) const base = "http://localhost:8800"; const task = await fetch(base + "/api/v1/tasks", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ sourcePath: "/data/big120.glb", targets: ["dpepack", "glb"], options: { compress: true, lodArch: "proto" } }) }).then(r => r.json()); // 轮询至完成 → 拉产物清单 const done = await (async () => { for (;;) { const t = await fetch(base + "/api/v1/tasks/" + task.id) .then(r => r.json()); if (t.status !== "running" && t.status !== "queued") return t; await new Promise(r => setTimeout(r, 2000)); } })(); console.log(done.artifacts.map(a => a.name)); // → ["big120.dpepack", "big120.glb"]
系统状态
服务 · 队列 · 存储 · 引擎能力
服务
运行中
—
队列深度
—任务
—
累计转换
—任务
—
产物输出
—
输入累计 —
运行时
- 平台版本
- —(引擎 m2-pack)
- 运行时长
- —
- 并发 Worker
- —
- 执行隔离
- worker_threads(build 链独立线程)
- 任务持久化
- tasks-index.json · 重启恢复 completed
- 鉴权
- —
引擎能力(实测)
数据源:Pilot 实现报告实测数据
- 实例去重
- 244.9×(120 副本 · 604 原型)
- 几何压缩
- 6.11×(EXT_meshopt_compression)
- LOD 收敛
- 29.9% / 7.8% / 1.9%(原型级 · 4 档)
- 转换吞吐
- 400 MB 输入全链路 28.3s
- 导出矩阵
- glb 122.7× · 3D Tiles 86.2×(big120 实测)
- 质量校验
- 三角 / 属性对账零偏差 · glTF 规范校验零违规