Sketchfab下载器上手指南:一个Firefox用户脚本,把网页里的3D模型一键存成OBJ
【免费下载链接】sketchfabsketchfab download userscipt for Tampermonkey by firefox only项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab
Sketchfab下载器是一款专为Firefox设计的Tampermonkey用户脚本(sketchfab download userscript),它能在Sketchfab模型页面的工具栏里注入一个红色DOWNLOAD按钮,点击后自动把当前模型的几何数据、材质定义和纹理贴图打包下载到本地,面向3D设计师、游戏开发者和教育工作者,让3D模型下载从"手动截图+抓包"变成"一键完成"。如果你经常在Sketchfab上找素材,又受限于平台不提供直接的模型下载入口,这篇文章会带你从零装好脚本、看懂它的工作原理,并了解它的边界。
想要一个3D模型,却要跟网页搏斗半小时?
在Sketchfab上看到一个心仪的3D模型,通常意味着什么?
- 平台只提供在线预览,右键菜单里并没有"保存模型";
- 想用开发者工具抓资源,面对密密麻麻的网络请求和压缩后的JS代码无从下手;
- 退而求其次截图、录屏,得到的只是平面画面,没有可编辑的几何数据;
- 即使想办法拿到了贴图,模型结构、UV、法线仍然全部缺失。
结果就是:花了15到30分钟,收获一堆"看起来像"却无法进Blender、Maya的素材。Sketchfab下载器正是冲着这个痛点来的——它不是一个简单的"资源嗅探器",而是一个能从Sketchfab的渲染流程内部直接取走模型数据的注入式脚本。
📌一句话概括:打开模型页 → 点一下红色DOWNLOAD → 得到
.obj+.mtl+ 全部纹理贴图。
一次点击 vs 手工提取:这笔时间账怎么算
| 对比维度 | 传统手工方式 | Sketchfab下载器 |
|---|---|---|
| 耗时 | 15–30分钟,随模型复杂度上升 | 页面渲染完成后1次点击,下载时间主要取决于网络 |
| 几何数据 | 基本拿不到,只能截图 | 完整顶点、法线、UV坐标,输出标准OBJ |
| 材质信息 | 需要手动整理 | 自动生成MTL文件,映射漫反射、法线、高光等通道 |
| 纹理贴图 | 逐个抓取、容易漏 | 自动遍历并下载全部关联贴图 |
| 技术门槛 | 需要理解网络面板和JS | 零门槛,按钮式操作 |
需要说明的是,具体耗时取决于模型大小和网络速度,上面的对比是典型情况下的量级参考。真正有价值的不只是"快",而是拿到手的资源是结构完整的——OBJ里每一组v(顶点)、vn(法线)、vt(UV坐标)和f(面)都来自Sketchfab渲染时正在使用的真实数据,不是截图后的猜测重建。
3步装好下载器:从克隆仓库到看到红色按钮
由于脚本依赖Firefox独有的beforescriptexecute事件(Chrome、Edge均不支持),安装前请确认你使用的是Firefox浏览器(建议78及以上版本)。
第1步:安装Tampermonkey扩展
打开Firefox的扩展商店,搜索并安装Tampermonkey(官方文档见https://www.tampermonkey.net/)。安装后浏览器工具栏会出现它的图标。
第2步:克隆项目并复制脚本内容
git clone https://gitcode.com/gh_mirrors/sk/sketchfab仓库里有两个文件,各有分工:
sketchfab.js:主用户脚本,共277行,全部功能都在这里;viewer.txt:一份Sketchfab viewer的源码快照(约5.7MB),用于脚本作者分析注入位置,你日常使用不需要碰它。
用编辑器打开sketchfab.js,全选复制。
第3步:粘贴进Tampermonkey并保存
- 点击Tampermonkey图标 → "管理面板"(Dashboard);
- 选择"添加新脚本"(+号);
- 清空默认模板,粘贴刚才复制的全部内容;
- 按
Ctrl+S保存,确认脚本状态为"已启用"。
然后访问任意Sketchfab模型页面,等待页面完整渲染(约3–5秒),你会发现标题栏多了一个红色DOWNLOAD按钮。首次点击时浏览器可能询问是否允许下载多个文件,选择"允许"即可让OBJ、MTL和贴图全部落盘。
💡排错提示:如果按钮没出现,先刷新页面;仍不行就检查脚本是否启用、访问的URL是否以
sketchfab.com开头。脚本的匹配规则是https://或http://下的www.sketchfab.com任意路径。
它不是"抓包",而是"截胡":脚本的注入式工作原理
为什么说这个脚本比普通下载器高明?因为它不是在页面外面找资源,而是混进Sketchfab自己的渲染代码里,等模型对象被创建时直接截下来。整个流程可以拆成三层来看:
第1层|监听层:盯住每一个将要执行的脚本
脚本以@run-at document-start在页面加载最开始就运行,并注册beforescriptexecute监听器。这个事件是Firefox特有的:任何脚本在真正执行前,都会先"路过"这里。当检测到脚本地址包含web/dist/或standaloneViewer(即Sketchfab的viewer核心代码)时,脚本立即preventDefault()阻止它原始执行,转而用同步请求把源码取下来。
第2层|注入层:在渲染函数里埋一个"钩子"
拿到的源码会经过一次正则匹配,定位到drawImplementation: function(...) { ... }这个WebGL绘制入口,并在函数体最前面插入一行window.drawhook(this);。这相当于在模型的绘制流水线上装了一个分线器:每当viewer准备绘制一个模型时,drawhook会把这个模型的内部对象收集进window.allmodel数组(通过_faked标记去重,避免重复收集)。注入成功后,脚本再等3秒、以每秒1次的频率重试,直到在页面标题栏挂上红色下载按钮。
第3层|导出层:把内部对象翻译成标准3D格式
点击按钮后,脚本遍历window.allmodel,从每个模型对象里读出三类数据:
_attributes:顶点、法线、UV坐标数组;_primitives:绘制单元及索引(只处理mode == 4的三角形和mode == 5的三角条带);- 材质状态集(
stateset):从中提取纹理URL,并按通道映射成MTL关键字。
随后用Blob生成.obj和.mtl文件并触发下载,纹理图片则逐个以独立文件方式保存。整个过程不需要你打开一次开发者工具。
🔹比喻:这就像快递分拣中心的中转环节——别的工具在门口等包裹出来再拍照,这个脚本直接进了传送带内部,把每一件包裹的完整内容复制了一份。
下载包里有什么:OBJ、MTL与贴图的完整清单
一次点击后,浏览器会陆续下载多个文件,结构大致如下:
模型名称/ ├── 模型名称.obj # 几何:v顶点 / vn法线 / vt UV坐标 / f面 ├── 模型名称.mtl # 材质:newmtl + 各纹理通道引用 ├── 贴图A.jpg # 如漫反射贴图 ├── 贴图B.png # 如法线贴图 └── 贴图C.jpg # 如高光/自发光贴图OBJ文件内部会写入mtllib引用MTL文件,并用o、usemtl、s on标记模型名、材质和光滑组,主流3D软件(Blender、Maya、3ds Max)都能直接导入。MTL文件的纹理通道映射规则是写死的,常见对应关系如下:
| Sketchfab内部通道 | MTL关键字 | 含义 |
|---|---|---|
| DiffusePBR / DiffuseColor | map_Kd | 漫反射贴图 |
| SpecularPBR / SpecularColor | map_Ks | 高光贴图 |
| NormalMap | map_bump | 法线贴图 |
| EmitColor | map_Ke | 自发光贴图 |
| AlphaMask / Opacity | map_d/map_o | 透明通道 |
值得注意的是,脚本按"一个文件一个下载"的方式输出,并不会自动打包成zip;模型有多个部件时,浏览器会触发多次下载,这是正常现象。
三个典型场景:教学、原型、研究各取所需
场景一|课堂教学:把在线模型变成离线教具
教师准备3D建模课程时,最头疼的就是"课堂上演示的模型,课后学生拿不到"。传统做法是截图+录屏凑合讲解。用这个脚本,教师只需在Firefox里打开目标模型页、点击DOWNLOAD,就能把完整OBJ连同贴图放进课件素材库,学生课后用Blender打开即可继续练习。
场景二|游戏原型:快速攒一批占位模型
独立开发者做玩法验证时,不需要高精度商业模型,但需要快速拿到一批结构合理的占位素材。批量打开多个Sketchfab页面,逐个点击红色按钮,就能在几分钟内收集一套可导入Unity或Godot的基础模型,直接进入原型搭建阶段。
场景三|数据研究:以统一格式收集3D样本
做3D视觉或形态学相关研究时,需要把大量模型转换成统一格式。OBJ是业界通用的交换格式,脚本输出的文件保留了材质和纹理信息,配合标准化命名,可以批量导入分析管线。
常见问题与已知边界:哪些模型下不了,遇到报错怎么办
Q:下载按钮没出现?A:确认Tampermonkey已启用、脚本已保存;刷新页面等待完整渲染。若脚本的注入正则没匹配到viewer代码,按钮永远不会出现(见下方"维护状态")。
Q:浏览器反复拦截多个文件下载?A:在Firefox设置中允许该站点的多文件下载,或手动逐个确认。
Q:下载的模型打不开?A:确认用支持OBJ+MTL的软件导入;贴图文件需与OBJ/MTL放在同一目录下才能正确显示材质。
Q:为什么有些模型下载内容不全?A:脚本只能截获实际渲染过的模型对象,受DRM保护或未在页面中显示的模型无法获取;另外它只处理三角形和三角条带两种绘制模式,其他模式会被跳过并在控制台输出提示。
必须知道的边界与合规要求:
- ⚠️仅限Firefox:
beforescriptexecute是Firefox特性,脚本在其他浏览器上无法工作; - ⚠️依赖viewer内部结构:脚本读取的是Sketchfab内部对象的下划线私有属性(
_attributes、_primitives、stateset等),这类结构随时可能变动; - ⚠️项目已标记"未维护":README开头明确写着"OUT OF DATE"(已过时),作者本人也标注为停止维护。这意味着脚本可能因Sketchfab前端更新而失效;
- 📌合法使用:请只下载明确允许免费使用的模型,遵守原作者许可协议,不要用于商业销售或绕过付费内容。工具的价值在于辅助学习和创作,而非替代原创。
写在最后:把时间还给创作,也请理性看待它
Sketchfab下载器的思路很有启发性——与其在页面外"嗅探"资源,不如在渲染流程里"截胡"模型对象,再用OBJ/MTL这套公开标准重新组织数据。这种注入式设计,让一个277行的脚本完成了一套小型3D导出工具的活。
不过请记住它的现状:一个已标注过时、仅限Firefox、依赖特定渲染版本的个人项目。它适合作为快速获取素材的便利工具,不建议在关键生产流程上完全依赖。如果你的使用场景高度依赖它,可以阅读仓库中的sketchfab.js和viewer.txt,根据当前viewer代码调整注入正则和属性读取路径——这也是一个理解WebGL渲染管线与前端注入技巧的绝佳学习样本。
现在就试试:克隆仓库、装上脚本、打开一个模型页面,点下那个红色按钮,看看3D模型资源是如何从浏览器渲染管线里"走"出来的。下载器能省下的每一分钟,都可以用来做真正重要的事——创作本身。
【免费下载链接】sketchfabsketchfab download userscipt for Tampermonkey by firefox only项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考