前言¶
在 DeepSeek Harness(DSH)里做智能体或前端实验时,工作区里常会堆着 .glb、.fbx 或手写 three.js 的 HTML 页面。传统做法是另开 Blender、在线查看器,或单独写 Node 脚本做格式转换;运行时拼出来的 THREE.Scene 更难直接落成可分享的模型文件。下面介绍的插件把预览、格式互转和「场景 → 模型文件」放进右侧栏,并给 Agent 提供同名语义的 three_export 工具。
这是什么¶
dsh-3d-model-studio(维护者 act27)是 DSH 客户端类 bundle 插件,当前资料中的版本为 0.3.1,许可证 MIT。它是 three-export-kit 的 DSH 插件化版本:在右侧栏预览常见 3D 格式,并把 three.js 场景解析导出为 GLB / glTF / FBX / OBJ / STL / PLY,支持整场景一次导出和按个体分组导出两种粒度。既可打开已有模型文件,也可加载运行时构建的场景(HTML 页面或粘贴代码)。
- 目录页:https://www.skillhub.cn/plugins/act27/dsh-3d-model-studio
- 源码与说明:https://github.com/act27/dsh-3d-model-studio
社区目录站点与 DeepSeek / 幻方无官方从属关系;安装前建议自行查看仓库源码与许可证。插件以当前 DSH 进程权限运行,加载本地 HTML 时 iframe 内脚本与 GUI 同源,只应对信任的页面使用场景导出能力。
核心功能¶
右侧栏预览与工具栏导出¶
在右侧栏「文件」页打开模型,支持 .glb、.gltf、.stl、.ply、.obj、.fbx。资料说明包含 PBR 材质、15 个贴图槽位、多剪辑动画与自适应取景。预览窗口底部工具栏提供重置视角、自动旋转、线框、贴图、法线、地面网格、动画切换,以及导出。
点「导出」可选 GLB、glTF、FBX、OBJ、STL、PLY。导出的是当前已加载的场景(贴图、动画一并保留)。落盘时优先由宿主写到模型同目录(<名字>.<新后缀>,同名自动 -1);宿主通道不可用或禁用写盘时改为浏览器下载。导出前会临时还原视口(贴图全开、线框关闭、动画回第 0 帧),导出后恢复你的查看状态。
场景导出页(HTML / 粘贴 three.js 代码)¶
右侧栏「场景导出」页面向「代码运行时拼出来的场景」:把 HTML 页面或粘贴的 three.js 代码渲染出来,再导出为上述模型格式。
HTML 文件模式简要步骤:
- 选择工作区内的
.html/.htm,或在输入框填相对会话工作目录或绝对路径,点「加载并渲染」。 - 工具用同源 iframe 执行页面脚本,扫描
window上可达的THREE.Scene(页面需暴露 scene,例如window.scene = scene或window.__town = { scene })。 - 左下角显示网格 / 三角面 / 材质统计;底部选格式导出,默认写到 HTML 同目录。
- GLB/glTF 可选「按不透明导出」开关(默认开),用于缓解透明材质深度排序导致的遮挡问题;FBX/OBJ/STL/PLY 不受该开关影响。
- 「拆分预览…」进入分组导出:按连通性与包围盒拆成独立个体,缩略图勾选后每个个体一个文件,写入源文件同目录下的
split-export/(如object-001.glb)。资料中的 voxel-town 实测:139 网格 / 48,912 三角面 → 88 个个体。
three.js 代码模式:粘贴代码(使用注入的 THREE,勿 import;场景变量须名为 scene),点「渲染代码」后使用相同导出与拆分流程;代码模式默认输出到工作区根目录的 scene-export.<后缀>。
导出前会移除灯光、雾、背景;跨 three 实例的场景会在导出前归一化到插件引擎,避免 buffer 类型不匹配。导出字节经 /api/dsh-3d-model-studio/export 落盘;浏览 HTML 走 /api/dsh-3d-model-studio/browse,/scene 与 /browse 在 owner 鉴权之后,仅本机 GUI 会话可调用。
Agent 工具 three_export¶
在工作区按路径转换模型,或用 inspect 只读统计,参数语义与 UI 导出一致:
| 参数 | 说明 |
|---|---|
action |
convert(默认)或 inspect |
input |
必填,模型路径;支持 .glb .gltf .fbx .obj .stl .ply |
output / format |
输出路径与格式;省略时按资料中的默认规则推断 |
preset |
FBX 坐标预设:threejs / unity / unreal / blender / maya,默认取插件配置(blender) |
textures / maxTextureSize |
是否保留贴图、贴图最长边上限 |
overwrite |
是否覆盖已有输出(默认自动改名) |
示例(来自 README):
// 转 FBX 给 Blender
{ "input": "assets/robot.glb" }
// 转 GLB 并限制贴图 2048
{ "input": "assets/robot.fbx", "format": "glb", "maxTextureSize": 2048 }
// 只看模型规模
{ "action": "inspect", "input": "assets/robot.glb" }
Agent 侧走独立 Node 转换管线,与浏览器内预览导出共用同一套导出语义。
安装与启用¶
本包是标准 DSH bundle(package.json 含 dsh.bundle.patch)。要求 DSH >= 0.2.2-rc.1、Node >= 20。发布后可从 npm 包名安装:
# 在 DSH 插件页「添加插件」输入包名,或:
# plugin_manager action=install_bundle target="dsh-3d-model-studio"
# CLI:
# dsh plugin --profile desktop add dsh-3d-model-studio
也可从 Git 仓库安装:
# plugin_manager action=install_bundle target="https://github.com/act27/dsh-3d-model-studio"
本地开发或离线安装需先打 tarball,再由 DSH 安装(不要用目录 link 安装,资料说明 link 可能导致依赖未安装或删除 bundle 时误伤源码目录):
# 1) 打 tarball(会先在本目录安装运行时依赖)
pwsh -NoProfile -File .\scripts\install.ps1
# 产物:dist\dsh-3d-model-studio-0.3.1.tgz
# 2) 在 DSH 里安装(target 用本目录下 tarball 的绝对路径)
# plugin_manager action=install_bundle target="<本目录>\dist\dsh-3d-model-studio-0.3.1.tgz"
装完 profile 资料中约 74 MB(含 three 与可选 @napi-rs/canvas)。修改源码后需重新执行 scripts/install.ps1 与 install_bundle 并重启 DSH;Host 半代码不随 HMR 自动生效,可按提示重启或禁用/启用 bundle 强制重载。
典型用法¶
预览并转换工作区模型:在「文件」页打开 assets/robot.glb,用工具栏导出为 FBX,或在对话中让 Agent 调用 three_export,input 填 assets/robot.glb。
从 voxel-town 类 HTML 导出 GLB:在「场景导出」选 voxel-town.html,加载后点 GLB;需要进 Blender 逐个编辑时走「拆分预览…」,勾选个体导出到 split-export/。
无 GUI 时复现场景:资料提到可用 Node 脚本重建场景后导出,需与页面一致的场景构造与固定随机种子;可参考仓库示例中的 scripts/export-model.mjs(node scripts/export-model.mjs --all)。
适用场景与注意¶
适合在 DSH 会话内快速查看模型、在 glTF/FBX/OBJ/STL/PLY 之间转换,以及把程序化 three.js 场景固化成文件供下游 DCC 或引擎使用。分组导出面向合并大网格或大量 Group 组成的场景,自动跳过地形与零碎装饰,主体建筑、角色、道具类对象更易单独勾选。
注意:场景导出执行的是你提供的 HTML/代码,等价于在本机以 GUI 权限运行页面脚本;ShaderMaterial 无法直接进 glTF,导出前会替换为可导出的标准材质。无 GUI 的 Node 路径需自行补齐 three 在 Node 下的环境依赖(README 中说明了 FileReader、requestAnimationFrame 等要点)。
结尾¶
dsh-3d-model-studio 把 3D 预览、多格式导出和 three.js 场景解析收进 DSH 右侧栏,并用 three_export 让智能体在同一语义下批处理工作区模型。需要功能细节、截图与 Agent 返回字段时,以仓库 README 为准。