https://preview.redd.it/6mzhrppyl6ph1.png?width=2048&format=png&auto=webp&s=f0642e2511eb9113c648010da9f86d14c025c731
https://preview.redd.it/lqxkrrqzl6ph1.png?width=2048&format=png&auto=webp&s=de895484300958c28ec61f45950a64ff47788507
https://preview.redd.it/33wg6rc1m6ph1.png?width=2048&format=png&auto=webp&s=6a604614fdf78e0b2586deecc1e82e9debbf8655
输入提示。大约11分钟后,就能得到一个带有纹理、经过优化、可直接用于游戏的3D资产,包含LOD、碰撞体、PBR纹理、预览渲染图和验证结果。所有工作都在一张RTX 5090上完全本地完成,无需任何托管API。
我花了一天时间,将当前一些最优秀的开源模型和工具整合成一个完全本地化、可由代理调用的文本→3D游戏资产流水线,运行在Docker Desktop下。
目标是看看当前的开源工具栈在多大程度上能实现一个实用的“输入提示,输出可用游戏资产”的工作流,而无需手动在图像生成器、3D模型、Blender和游戏引擎之间来回搬运文件。
你给它一个提示。它给你:
- 带纹理的高质量主GLB文件
- 在目标三角形预算下优化好的、可直接用于游戏的网格
- 在目标分辨率下烘焙好的PBR纹理
- 多个LOD
- 凸碰撞网格
- 预览渲染图
- glTF + Godot验证
- 一个包含所有设置、测量、警告、模型修订版本等信息的清单
所有数据都不离开本机。无需托管API。
仓库:https://github.com/zorrobyte/asset-studio
流水线
1. 提示 → 结构化资产提示
输入被规范化成一个为图像到3D生成设计的资产模板:单个物体、纯色背景、四分之三视角、无文本或标志,并带有风格预设,如手游离线游戏工厂风格。
2. Qwen-Image-2512 → 参考图像
通过Diffusers以BF16格式全质量运行50步。
仅Transformer部分就约41GB,因此,由于我的Docker虚拟机只有46GB内存,模型的一部分会在5090和CPU内存之间分摊。
3. Pixal3D → 3D主模型
我使用的是基于TRELLIS.2的较新Pixal3D流水线,并采用MoGe-2相机估计。
典型输出大致为:
- ~100万个三角形
- PBR材质
- 4K纹理
4. 无头Blender → 游戏资产
Blender自动处理:
- 缩放/原点归一化
- 网格清理
- 网格优化
- UV生成
- PBR纹理烘焙
- LOD生成
- 凸碰撞
- Cycles预览渲染
对于减面,我使用meshoptimizer,采用误差有界、属性感知的简化算法。它基本上与gltfpack使用的简化器相同。
5. 验证
每个输出都经过检查:
- Khronos glTF验证器
- 无头Godot导入
然后整个运行过程被写入一个清单。
代理/API支持
整个系统运行在FastAPI背后,带有持久化的SQLite作业管理:
POST /v1/jobs
然后你可以轮询状态、下载工件、取消作业、重试作业,或从特定阶段开始重新处理。
此外还有:
- 无依赖的CLI
- 轻量级MCP封装
- Blender对比查看器
因此,AI编码代理可以像这样直接请求:
……然后就能收到一个可直接用于游戏的资产。
对比查看器会将主模型、优化网格、LOD和碰撞网格并排显示,同时展示带纹理和不带纹理的状态。
RTX 5090的实际数据
以下是在我本机上测量得到的数据,并非上游H100基准测试:
| 阶段 | 时间 | 峰值显存 |
|---|---|---|
| Qwen-Image 1328² / 50步 | ~290秒/图像 | ~27至31GB |
| Pixal3D 1024 | ~4分钟 | ~15GB |
| Pixal3D 1536 | ~3.7分钟 | ~25GB |
| Blender + meshoptimizer | ~75秒 | CPU |
一个正常“平衡”的资产大约需要11分钟端到端。
质量模式下,会先生成两个参考候选,大约需要16分钟。
我踩过的一些坑
Pixal3D网格的优化难度出乎意料。
主模型通常有约100万三角形,分布在大约200个独立的壳上。
Blender的标准坍缩减面以及我测试过的大多数快速简化器,在游戏就绪三角形预算下会彻底破坏薄几何体。木板变成空洞,尖刺出现,边缘坍缩等等。
使用误差边界约5%的meshoptimizer效果显著更好。
如果即使这样也无法干净地达到所需预算,流水线会先将一个副本体素重网格化为单个壳。这个回退方案会在清单中明确记录为警告。
其他一些发现:
- PyPI上的
meshoptimizer封装器缺少simplifyWithAttributes的ctypesargtypes,会导致段错误。我最终手动绑定了C函数。 - Pixal3D的NAF上采样器需要NATTEN。Torch 2.11没有对应的wheel,但NATTEN 0.21.0可以针对
sm_120正常编译。 - 不要要求图像模型在物体上生成文字或标志。它们仍然会频繁搞砸。
- Pixal3D默认使用RMBG-2.0进行抠图,但该模型有访问限制。BiRefNet可以作为开源替代方案。
所有依赖都固定了版本,包括提交哈希、模型修订版和容器镜像摘要,记录在一个依赖清单中。
仓库还包含三个实际样本输出:
- 板条箱
- 泵站
- 保留手柄开口的马克杯
以及包含测量数据的BENCHMARKS.md。
下一步
我接下来正在开发一个Web界面:
提示 → 图像变体 → 选择候选 → 3D生成队列 → 资产库 → 下载
更大的目标是让这个系统能够被编码和游戏开发代理用作一个真正的本地资产生成后端,而不仅仅是另一个需要人工在五个不同工具之间手动搬运文件的Gradio演示。
玩得开心,如果你改进了它,请提交PR!
评论 (0)