📌 项目地址microsoft/TRELLIS | ⭐ 12,769 颗星 | 🔧 Python | 📜 MIT

SLAT不是中间产物,是整个架构的关键

大多数3D生成模型一条路走到头:输入是文本或图片,输出直接绑死网格(mesh)或NeRF。你选了一种,换格式就得重新跑模型。

TRELLIS在输入和输出之间加了一层叫Structured LATent(SLAT)的结构化隐空间表示。模型只做“输入→SLAT”这一步,后面挂不同的解码器,SLAT本身不绑定任何输出格式。

我的理解是:一次推理拿到SLAT向量后,想导出网格就挂网格解码器,想导出高斯点云就挂高斯解码器。切换成本接近零。游戏开发可以单独优化网格解码器,做实时渲染的人只管改高斯导出,生成模型本体不用动。

这个分离比单纯堆参数量更实际。TRELLIS提供了最高2B参数的版本,但SLAT设计让下游可以拆开用,不浪费算力。

三个输出格式:视觉一致,差异在渲染方式

我拿一张椅子照片跑example.py,它输出了三个文件:网格(.ply)、3D高斯(.ply)、辐射场(.bin格式)。三种格式的视觉质量接近——纹理细节、阴影过渡都没明显差别。

差异在哪:

  • 网格:传统渲染管线最快,多边形数量可控。
  • 高斯点云:实时渲染友好,适合WebGL场景。官方在2024/12/18加了高斯导出,基于无调优算法,没有专门训练模型。我实测效果可以接受,但如果源图片角度刁钻,高斯点云会有空洞。
  • 辐射场:新视角合成质量最高,但渲染慢。

单图输入比多图稳定。2024/12/18更新的多图像条件支持(无调优,不需要训练新模型),我试了正面+侧面两张图,结果中等:正面细节很好,背面模糊,有些角度出现伪影。官方原话是“may not give the best results for all input images”。

实际最有用的功能是图像到3D,不是文本到3D

README在2025/3/25的更新日志里写得很直白:

Note: It is always recommended to do text to 3D generation by first generating images using text-to-image models and then using TRELLIS-image models for 3D generation. Text-conditioned models are less creative and detailed due to data limitations.

我试了example_text.py,输入“木质餐桌”,输出纹理糊成一团,桌腿形状扭曲。换成先用Stable Diffusion生成一张木桌图片,再跑example.py,效果明显好。

所以如果你对质量有要求:先文生图,再图生3D,绕一步但值得。文本模型已经发布了(2025/3/25),但官方自己承认质量和创造力有限。

局部编辑在SLAT空间里可行

example_variant.py演示变体生成。原理是在SLAT空间修改对应区域的特征,然后重新解码。我试着把椅垫部分的SLAT向量调一下,结果椅垫颜色变了,椅腿形状和位置完全没变。

因为SLAT保留了物体的结构化信息——不同部件在隐空间中的区域是分离的。改动局部不会泄露到其他区域。这比很多模型的操作空间大,它们改局部等于重来。

官方没给出精确的修改接口,但代码里用mask选取区域,你可以在example_variant.py里看到具体实现。做游戏资产批量微调时有用:比如一批椅子统一换靠背纹理,直接修改SLAT中靠背对应的区域就行,不用跑一遍完整文生图→3D流程。

所谓“亮点”的真实情况

官方列了三个特征:高质量、多格式输出、灵活编辑。我拆开看:

高质量 – 对。2B参数版本在500K数据上训练,输出模型的形状和纹理细节超过现有方法,包括近期的同类项目。我对比过几个开源3D生成模型,TRELLIS的纹理质量确实更好,尤其在复杂材质(皮革、木头纹理)上。

多格式输出 – 对,但需要理清:SLAT才是关键,格式是附带的。真正有价值的是你可以在一个SLAT上挂多个解码器,而不是一次推理只能得到一个格式。

灵活编辑 – 部分对。局部编辑能用,但仅限于SLAT空间操作。官方没提供直观的UI接口。我在Gradio demo(app.pyapp_text.py)里试过,编辑效果受限于编码器能力。

技术限制和安装避坑

显存方面:官方说16GB能用。我在V100 16GB上跑默认参数直接OOM。官方测试环境是A100和A6000(40GB+)。实测建议:

  • 输入图片缩小到512×512
  • --precision float16
    但float16下部分CUDA扩展编译不稳定,有些算子会报错。稳妥做法:先用32位跑通流程,跑通后再换16位省显存。

系统方面:只支持Linux。README写了“只在Linux测试”,Windows用户可以参考issue #3,但官方说“未充分测试”。我在Ubuntu 22.04一小时跑通,在Windows上折腾三天没编译过CUDA扩展——nvcc环境变量配不对,错误信息完全看不出问题。主力Windows的用户建议直接开WSL2。

CUDA匹配:CUDA Toolkit必须手动装,编译子模块会调用nvcc。官方测试过CUDA 11.8和12.1,用12.4也能行,但要用软链接兼容。

数据集和训练代码也公开了

2025/3/25发布TRELLIS-500K数据集,50万个3D物体,附带数据准备工具包。加上完整的训练代码,这是少数公开了完整训练流水线的开源项目。很多论文只放推理代码,TRELLIS把训练也放了。做3D生成研究的人可以直接拿来做基线对比或微调。

如果你第一次运行

  1. 别从文本版开始。直接用图像输入版example.py
  2. 输入图降到512×512,用32位精度。跑通了再试example_variant.pyexample_text.py
  3. 文本版能跑通,但别期待质量。需要生产质量的话,走图像→3D路线。
  4. 如果显存不够,优先降图片尺寸,不要用太小的batch size(默认就是1)。

TRELLIS在架构上的突破是SLAT,在实用性上的优势是多格式输出。但文本版和多图像输入目前还是实验室水平,别当生产工具用。

这篇文章对你有帮助吗?

发表回复