dsh-3d-model-studio: Preview 3D models and parse Three.js scenes in the DSH right sidebar

前言

在 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 页面或粘贴代码)。

社区目录站点与 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 文件模式简要步骤:

  1. 选择工作区内的 .html/.htm,或在输入框填相对会话工作目录或绝对路径,点「加载并渲染」。
  2. 工具用同源 iframe 执行页面脚本,扫描 window 上可达的 THREE.Scene(页面需暴露 scene,例如 window.scene = scene 或 window.__town = { scene })。
  3. 左下角显示网格 / 三角面 / 材质统计;底部选格式导出,默认写到 HTML 同目录。
  4. GLB/glTF 可选「按不透明导出」开关(默认开),用于缓解透明材质深度排序导致的遮挡问题;FBX/OBJ/STL/PLY 不受该开关影响。
  5. 「拆分预览…」进入分组导出:按连通性与包围盒拆成独立个体,缩略图勾选后每个个体一个文件,写入源文件同目录下的 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye