用途
blender-skill 面向 3D 资产的批处理与交付前处理,通过本地无界面 Blender(blender -b)完成检查、转换、优化、渲染、烘焙与校验。它适用于需要把 3D 模型转换为不同格式、压缩体积、按目标平台预算核对、或生成预览图的流水线,也可在用户提到 3D 模型/资产文件、网格、面数、UV、贴图烘焙、减面、转盘渲染、AR/游戏引擎导入等场景时使用,即便用户没有直接说“Blender”。
主要能力
工具以一组脚本提供,脚本位于本文件旁的 scripts/ 目录,运行方式为 python3 <skill-dir>/scripts/<name>.py。每个脚本都是仅用标准库的宿主端 CLI,内部调用 Blender 无界面运行(blender -b --factory-startup --python scripts/bpy/<name>.py -- args.json result.json),并读取写入磁盘的 JSON 结果,绝不解析 Blender 自身日志。
主要脚本:
info.py FILE:统计对象/网格/材质/贴图/动画/骨架数量,单位缩放、包围盒、非流形边、重复顶点、自相交、翻转法线、未应用缩放、原点偏移、UV 越界/零面积/重叠检测,顶点色层与自定义属性,逐动画片段骨骼数与根运动检测,骨骼层级与未加权顶点检测,默认 LOD 比例建议,绘制调用估算,透明与贴图色彩空间配置检查,glb/gltf 的extensionsUsed/extensionsRequired,重复网格/实例化检测,.obj的.mtlPhong 参数与 Ns->roughness 启发式,射线投射壁厚分析,点云检测。convert.py FILE -o OUT [--verify] [--up-axis ...] [--forward-axis ...]:跨格式转换 glb/gltf、fbx、obj、stl、usd、usdz、ply、abc、.blend,并做显式坐标系转换(glTF 仅上轴 Y/Z,无前向轴;ABC/.blend 不支持)。--verify会重新导入输出并与输入对比对象/三角形/顶点/材质/动画数量。split.py FILE --out-dir DIR:把一个多对象文件拆分为每个独立对象层级一个输出文件。anim.py:提取仅动画数据(骨架与动作,无网格),或把多个文件的动作按骨骼名合并到一个基础角色,每个动作各为独立片段;--combine仅支持 glTF/glb 与 FBX。lod.py FILE --out-dir DIR:批量生成 LOD0(原始)到 LOD3,默认 50%/25%/10% 比例,或指定--target-triangles。optimize.py FILE -o OUT [...]:削减三角形、贴图尺寸与孤立数据,支持焊接重复点、清理网格、补洞、烘焙缩放、重定位原点、重算法线、三角化、贴图分辨率限制、WebP 转换、色彩空间修正,以及去除未用骨骼、限制骨骼数、关键帧抽减、去除未用形态键、合并重复网格、合并材质、按目标预设(web/mobile/ar/sketchfab/vrchat/roblox/gltf-viewer/quicklook)优化,并可通过 gltf-transform 与 ktx 工具做 Draco/Meshopt/KTX2 处理,生成 mipmap,翻转法线贴图绿通道。render.py FILE -o OUT:生成缩略图(默认)、360° 转盘(PNG 序列或 FFmpeg 视频)或四视图渲染,可选 Cycles 与摄影棚/户外光照。look.py:生成 UV 布局(SVG)、线框渲染、贴图网格或前后对比图;--compare还给出 PSNR/SSIM 相似度分数。check.py FILE --target NAME:按 three.js、unity、unreal、godot、ios-ar、android-ar、webxr、3d-print、sketchfab 等目标的预算给出 PASS/WARN/FAIL 及每行修复命令;对.usdz还校验包的 zip 结构。
共享参数:所有脚本都支持 --json(结构化结果,适合程序化处理)、--blender PATH(覆盖 Blender 查找顺序:--blender > $BLENDER > PATH > 操作系统常规安装位置)、--timeout SECONDS(默认 1800)。写入类工具还支持 --dry-run(仅打印将执行的命令与 bpy 脚本)与 --fast(低质量预览)。
使用方式
官方要求的工作流顺序:
0. 不要假设已安装 Blender。找不到时脚本会以 kind: missing_tool 失败并给出各系统安装提示,应如实报告,不要猜测路径。
- 操作前先探测:对每个将要改动的输入运行
info.py,依据真实数字而非假设来规划。 - 用最窄的工具做对应的事:纯格式转换用
convert.py,而非不带参数的optimize.py;确有需要时再串联工具(如先减面、再烘焙、再检查)。 - 验证转换是否忠实:
convert.py --verify会重新导入输出并对比计数;差异不一定是缺陷(例如 STL 没有共享顶点索引缓冲,立方体 24 -> 36 顶点是该格式固有特性),但应报告变化,而不是静默信任。 - 按交付目标检查:
check.py FILE --target NAME依据本工具自身的保守预算给 PASS/WARN/FAIL,每一行可机械修复的问题都会给出精确修复命令;WARN 应视为“值得对照该目标当前文档核实”。 - 几何或贴图变化后务必看图:
look.py --wireframe、--textures、--compare BEFORE AFTER(附带 PSNR/SSIM)、--uv(无界面 Blender 的 PNG UV 导出需要-b没有的 GPU 离屏上下文,故仅用 SVG)。探测看不到减面后是否仍可读、烘焙贴图是否落在预期位置。 - 报告精确数字:前后三角形/顶点数、贴图尺寸、PASS/WARN/FAIL 行、
bake.py的像素最小值/最大值/均值。 - 绝不覆盖用户原始文件:每个脚本都写入新输出(约定为
<input>_<operation>.<ext>,或由-o/--out指定),不会原地修改输入。
适用场景
需要把 3D 资产转换格式、压缩体积、生成预览图、烘焙贴图、拆分为多文件、生成 LOD、合并动画、按游戏引擎或 AR/WebXR/3D 打印平台预算做交付前校验,以及与 three.js、Unity、Unreal、Godot、Sketchfab 等目标对接的流水线。
限制
- 仅无界面(
blender -b),不是交互式建模的替代品,也不替代官方 Blender MCP 插件,而是与之互补。 - 需要机器上安装 Blender 4.2+。
- 不使用 API 密钥、不依赖云端、无 pip 依赖。
--target-*预设基于本工具自身的保守预算,而非各平台官方公布的数字;WARN 应再对照目标平台当前文档。- 各脚本的具体行为细节(如色彩空间、法线贴图约定、关键帧抽减的精确性限制等)在官方文档中有说明;未在资料中给出的功能、收费、价格、平台、效果或步骤,暂未提供。