Image Blaster:一张图炸出一个 3D 世界,5 分钟内跑完建模、场景和音效
- Smars
- Agent skill , 3D 生成
- 16 May, 2026
你有了一张概念图、一张实拍照片,或者一段电影分镜参考。把它变成可探索的 3D 场景需要建模、UV、贴图、灯光、渲染——几个工种,几天时间。即使你用 AI 生成了一张图,从图到 3D 的那一步,仍然卡着。
Image Blaster 就是解决这个卡点的。它是一个 Claude Code skill,输入一张图,输出一个完整的 3D 世界——包括物体模型、静态场景、环境音效。全程在 Claude 终端里对话式完成,不到 5 分钟。
Image Blaster 做了什么
Image Blaster 串联了三个 AI 生成管线,把一张图拆开、理解、重建:
- World Labs Marble 模型生成可探索的 3D 环境(高斯泼溅 spz 格式),处理静态背景
- FAL 平台上的 Hunyuan 3D 模型把图中的动态物体提取出来,生成带贴图的 3D 模型(glb、obj 格式)
- ElevenLabs SFX 模型为场景生成环境音效和物体交互音效(mp3 格式)
一句话总结管线:一张图 -> 空间重建 + 物体提取 + 音效匹配 -> 可导入引擎的完整资产包。
整个过程通过 Claude Code 的 skill 机制驱动。你把图放进 input/ 目录,在 Claude 终端里说一句”blast it”,skill 就会自动调用 World Labs 和 FAL 的 API,分步生成、逐个确认。你不需要写一行代码去调这些 API。
工具架构:8 个 Skill + 5 个外部服务
Image Blaster 不是一个单一的 skill,而是由 8 个 Claude Code skill 组成的协作管线,每个 skill 负责管线中的一个环节。
内部 Skill 管线:
| Skill | 职责 |
|---|---|
| image-blast-project | 项目总控。创建 world 目录结构,生成 project.json 和 scene.json,跟踪整个管线的状态 |
| image-blast-uncover | 图像分析核心。读取图片,识别动态物体(可分离的独立物件),生成场景描述和物体列表 |
| image-blast-plate | 生成干净背景(clean plate)。把确认的物体从原图中擦除,留下空白场景用于环境生成 |
| image-blast-world | 调用 World Labs API 生成 3D 静态环境(高斯泼溅),用干净的 background 还原场景的空间感 |
| image-blast-3d | 为每个动态物体生成 3D 模型,支持 Hunyuan(默认)和 Meshy 两个供应商 |
| image-blast-sfx | 生成三种音效:环境氛围音、物体碰撞音、自定义提示音效 |
| image-blast-image-edit | 通用图片编辑 skill,支撑 plate 生成和物体参考图裁剪 |
| image-blast-wildcard | 万能出口。用户想调用任何 FAL 平台上的模型时使用(如额外的 AI 图像生成) |
外部 AI 服务:
| 服务 | 模型 | 用途 |
|---|---|---|
| World Labs | marble-1.1 | 从单张图片生成可探索的 3D 高斯泼溅环境 |
| FAL AI | hunyuan-3d | 把图片中的物体提取并生成为带 PBR 材质的 3D 模型(glb/obj) |
| FAL AI | nano-banana | 默认图片编辑模型,用于物体去除、背景修复、参考图裁剪 |
| FAL AI | gpt-image-2 | 备选图片编辑模型,用户可指定切换 |
| ElevenLabs | elevenlabs-sfx | 生成环境氛围音、物体碰撞音效 |
所有的 skill 通过 .claude/settings.json 中声明的权限和钩子串在一起。SessionStart 钩子自动执行 setup-check 脚本,确保依赖和环境变量就位。UserPromptSubmit 钩子监听 input/ 目录的文件变化。
8 个 Skill 的协作流程
Image Blaster 的执行不是并发的,是一条严格有序的流水线。每一步的输出是下一步的输入:
1. image-blast-project(项目初始化)
接收用户指令后,创建 worlds/<任务名>/ 项目文件夹,生成初始 project.json,把 input/ 中的源图分片到 source/ 目录。这一步是所有下游 skill 的前置条件。
脚本位置:.claude/scripts/project/project-state.mjs
2. image-blast-uncover(图像分析与物体识别)
核心理解步骤。Claude 用自己的视觉能力逐张分析 source/ 中的图片,提取:
- 场景名称和概括描述
- 环境特征、视觉风格、光照、氛围
- 所有可分离的独立物体(判断标准:人能不能搬起来?)——墙上的涂鸦不拆、地上的地毯不拆,但桌上的杯子、路边的贩卖机要拆
分析结果写入 worlds/<任务名>/source/<图片名>.json,合并成 image.json。然后等待用户确认哪些物体要生成 3D 模型。
3. image-blast-plate(清理背景)
用户确认物体列表后,调用 FAL 的 nano-banana(或 gpt-image-2)模型,把这些物体从原图中擦除,生成一张干净的背景图(plate)。这张图去掉了动态物体,只保留静态环境,给 world 生成用。
4. image-blast-world(环境生成)
用 clean plate 和修正后的场景描述,调用 World Labs Marble API,生成高斯泼溅格式的 3D 可探索环境。输出 spz 文件 + 碰撞体 glb + 全景图。
5. image-blast-3d(物体建模)
对每个确认的物体,先做一步 image edit 裁剪出干净的目标参考图,然后调用 Hunyuan 3D(或 Meshy)生成带贴图的 3D 模型。支持面数、PBR、贴图类型等参数控制。
6. image-blast-sfx(音效生成)
最后一步。根据场景描述生成环境氛围音(循环),根据物体材质生成撞击音效。通过 ElevenLabs SFX API 完成,输出后自动做静音裁剪和音量归一化。
7. image-blast-image-edit / image-blast-wildcard(辅助/扩展)
image-blast-image-edit 是底层图片编辑 skill,被 plate、3d 等 skill 内部调用。image-blast-wildcard 是万能出口,用户想调用 FAL 上其他模型时用(比如额外生成一张概念图)。
什么时候用
Image Blaster 不是万能的 3D 生产管线。它定位在概念验证和快速原型。
- 游戏关卡概念:画一张场景概念图,Image Blaster 给你一个能走进去的初版 3D 布局,直接拖进 Unity/Unreal/Godot
- 建筑可视化快稿:渲染一张建筑效果图,炸出一个可旋转查看的空间,给客户做第一轮 demo
- 电影勘景参考:街拍一张实景照片,转换成 3D 环境做镜头规划
- 机器人仿真环境:需要快速搭一个测试场地,用参考图直接生成
生成的资产可以嵌入任何游戏引擎(Unity、Unreal、Godot)、DCC 软件(Blender、Maya、3DS Max)或 Web 应用(Three.js、Electron)。导出格式是行业标准的 glb、obj、spz、mp3,不需要中间转换。
它的边界在哪
Image Blaster 很快,但快有快的代价。
- 不是高质量生产管线:生成的是概念稿级别的 3D 资产,面数、贴图精度、UV 质量都不适合直接用于最终产品。后续需要在 Blender 或 Maya 里精修
- 场景复杂度有限:一张图的视角决定了它能提取的信息量。被遮挡的物体、图外的空间、复杂的透明材质,生成模型是猜出来的,不是算出来的
- 依赖外部 API:需要 World Labs 和 FAL 两个平台的 API key。两者都是独立服务,任何一个挂了或限流,管线就不通
- 面数默认偏保守:Hunyuan 3D 的面数默认 50000,可以调到 150 万,但大面数对应更长的生成时间和更高 API 费用
- 不适合多图场景重建:Image Blaster 处理单张图片。需要一个完整建筑或大型场景的精确扫描,用摄影测量或 NeRF 方案更靠谱
安装和配置
前置要求:已安装 Claude Code CLI。
# 1. 克隆仓库
git clone https://github.com/neilsonnn/image-blaster
cd image-blaster
# 2. (如果没装)安装 Claude Code
curl -fsSL https://claude.ai/install.sh | bash
# 3. 启动 Claude
claude
进入 Claude 终端后,把你的 World Labs API key 和 FAL API key 告诉 Claude。它会自动配置到项目中。
申请 API key:
- World Labs: https://platform.worldlabs.ai/
- FAL: https://fal.ai/
项目目录中有 .env.example 文件作为配置参考,Claude 会按这个模板帮你设置环境变量。
使用流程
准备一张图片放到 input/ 目录,然后在 Claude 里说:
blast it and confirm each step with me
Claude 会按顺序执行 8 个 skill 的全流程:
- project skill 创建项目文件夹,初始化状态
- uncover skill 分析图片,提取物体列表,等你确认
- plate skill 擦除物体,生成 clean plate
- world skill 调用 World Labs 生成高斯泼溅场景
- 确认后 3d skill 逐个生成物体模型
- sfx skill 生成环境音效和物体 SFX
- 每步完成后暂停,等你确认再继续
生成的资产在 worlds/ 目录下,按任务组织的子目录存放。
Hunyuan 3D 参数控制
如果你需要调整模型的生成精度和风格,在对话中告诉 Claude 修改 Hunyuan 参数:
| 参数 | 取值范围 | 说明 |
|---|---|---|
| face-count | 40000 ~ 1500000 | 目标面数,默认 50000 |
| enable-pbr | true / false | 是否生成 PBR 材质,默认 true |
| generate-type | Normal / LowPoly / Geometry | Normal 带贴图,LowPoly 减面,Geometry 纯白模 |
| polygon-type | triangle / quadrilateral | LowPoly 模式的面片类型,默认 triangle |
“把汽车模型调到 20 万面,开 PBR”——附在 blast 命令后面就行。
实践示例
假设你有一张赛博朋克风格的街道概念图 cyberpunk-alley.png。放进 input/ 目录,启动 Claude:
> blast cyberpunk-alley.png and confirm each step
>> image-blast-project: 创建项目目录 worlds/cyberpunk-alley/
- 移动源图到 source/0-cyberpunk-alley.png
- 生成 project.json 和 scene.json 骨架
>> image-blast-uncover: 分析图片
- 识别 3 个动态物体: neon-sign, vending-machine, hover-bike
- 场景特征: 窄巷子、湿沥青地面、霓虹蓝紫光、远处城市嗡鸣
- 等待确认... (用户确认 3 个物体)
>> image-blast-plate: 生成 clean plate
- 调用 nano-banana 擦除 3 个物体
- 输出: source/1-cyberpunk-alley-plate.png
>> image-blast-world: 生成 3D 环境
- 调用 World Labs Marble
- 输出: worlds/cyberpunk-alley/output/world/environment.spz
>> image-blast-3d (neon-sign):
- 裁剪参考图 -> 调用 Hunyuan 3D
- 输出: neon-sign.glb (50000 面, PBR)
>> image-blast-3d (vending-machine):
- 裁剪参考图 -> 调用 Hunyuan 3D
- 输出: vending-machine.glb (50000 面, PBR)
>> image-blast-3d (hover-bike):
- 裁剪参考图 -> 调用 Hunyuan 3D (用户指定 100000 面)
- 输出: hover-bike.glb (100000 面, PBR)
>> image-blast-sfx:
- 环境音: worlds/cyberpunk-alley/output/sfx/city-hum.mp3
- 物体音: neon-buzz.mp3, machine-hum.mp3, bike-hover.mp3
- 后处理: 静音裁剪、音量归一化
All assets generated. Ready for import.
每步之间 Claude 都会暂停等你确认。你想跳过某个物体、调整面数、换一个生成模型——在确认前说就行。
拖进 Unity 或 Blender,直接开始细化。
结尾
Image Blaster 把”图到 3D”这个本来需要多个工种协作的步骤压缩成了一个终端命令。它不是要取代 3D 艺术家——它取代的是”在什么都没有的时候,先把东西搭出来”的那段空白。
下次你有了一张参考图,别先打开 Blender。先 blast 一下。