
一个几周前,微软发布了一种用于创建多功能高质量 3D 资源的新型 3D 生成方法,名为 Trellis。该模型使用统一结构化潜在表示 (SLAT),通过将稀疏 3D 网格与多视图视觉特征相结合,将其解码为各种格式,例如辐射场、3D 高斯和网格。
好吧,这听起来有点拗口,但简单来说,Trellis 确实擅长创建高质量的 3D 模型,这些模型看起来逼真,并且与您提供的描述或图片相符。对于艺术家、开发人员和设计师来说,这是一款非常棒的工具,可以高效地制作出令人惊叹的 3D 内容。
我过去曾谈论过人工智能驱动的 3D 对象生成器,但这个在速度和质量方面尤其令人印象深刻。
Trellis 如何工作?
该方法使用整流流变压器,与现有方法相比取得了优异的结果,并表现出灵活的编辑能力。
该模型在大型3D 资产数据集(500K 个对象)上进行训练,并通过大量实验和用户研究证明其在质量和多功能性方面超越了现有方法。

Trellis 中的 3D 对象生成是一个两阶段过程,使用称为“Structured LATent”(SLAT)的特殊代码。
工作原理如下:
第一阶段:构建结构
- 稀疏结构: Trellis 首先使用一组“活动体素”创建对象的基本框架。体素就像 3D 空间中的微小立方体。活动体素勾勒出对象的大致形状。想象一下构建一个乐高模型,首先将主要块拼凑在一起以获得大致形状。
- 压缩结构:为了提高效率,Trellis 使用一种称为 VAE(变分自动编码器)的技术将该框架压缩为一组更小的指令。
- 生成框架: Trellis 使用一种称为“整流转换器”的特殊人工智能来获取此备忘单,并将其转换为对象框架的详细计划。该计划会告诉计算机在 3D 空间中将活动体素准确放置在何处。

第二阶段:添加细节
- 局部潜在信息:框架到位后,Trellis 会使用“局部潜在信息”为每个活动体素添加细节。这些潜在信息包含有关对象外观的信息,如颜色和纹理。
- 特征聚合:为了确定每个局部潜在特征应该是什么样子,Trellis 使用了一个强大的视觉模型 (DINOv2)。该视觉模型从多个不同角度分析物体的图片,并提取重要特征,如边缘、形状和颜色。
- 生成细节: Trellis 使用另一个 Rectified Flow Transformer 来获取这些特征并将其转换为详细的局部潜在特征。然后将这些潜在特征附加到活动体素以完成 3D 模型。
这两个阶段的过程让 Trellis 能够高效地创建高质量的 3D 模型。它利用人工智能和计算机视觉的强大功能,从文本描述或图片中理解和重建复杂的 3D 对象。
Trellis 可以将此 SLAT 表示转换为各种 3D 模型格式,例如:
- 3D 高斯
- 光辉场
- 网格
查看这些高质量示例:

Trellis 压缩结构和添加细节的方式让人想起专业 3D 艺术家的工作方式——从基础网格开始,然后分层添加细节。
然而,与人类艺术家不同的是,Trellis 只用了极短的时间就完成了这一任务。
如何尝试 Trellis
您可以在HuggingFace上尝试 Trellis 。
上传图片并点击“生成”即可创建 3D 资源。如果图片有 alpha 通道,它将被用作蒙版。您可以尝试生成设置或 GLB 提取设置,也可以保留默认设置。

以下是 3D 输出示例:

如果您对 3D 资产感到满意,请点击“提取 GLB”以提取 GLB 文件并下载。您还可以在GLTF Viewer等在线工具中查看 3D 资产。


注意:高斯文件可能非常大(~50MB),显示和下载需要一段时间。
以下是更多示例:
提示:带有金色和银色设计的球形机器人。


总体而言,结果看起来相当不错。金色和银色的纹理增添了不错的触感,从远处看,效果很棒。但是如果放大,您会注意到它仍然有点低多边形。细节不够精致,有些边缘看起来很粗糙。话虽如此,对于如此快速生成的东西,很难抱怨。如果您追求速度,这是一个不错的结果,并且对于大多数用例来说已经足够好了。
这是使用图像作为输入的另一个示例。



我非常喜欢 3D 模型与原始参考图像的接近程度。整体形状和结构感觉非常准确,这非常令人印象深刻。但是当你关注较小的细节时,比如绳索或侧面的复杂纹理,它们并不完美。即便如此,从常规观看距离来看,它仍然看起来相当不错。对于在几秒钟内生成的东西,它确实比我预期的要好。如果你可以接受微小的瑕疵,那么这是一个很好的起点。
Trellis 还擅长根据文本提示创建单个 3D 对象的多个变体。此功能非常适合快速迭代设计。

但它的功能还不止于此,因为 Trellis 还非常擅长创作复杂且充满活力的 3D 艺术设计。

这个 3D 场景的质量让我印象深刻。微软正在用这个高质量、可扩展的模型在 3D 生成方面树立新标准。事实上,一些用户已经用 Trellis 制作了 3D 打印模型,这太酷了!

本地运行 Trellis
您可以在GitHub上找到 Trellis 的代码,并按照以下步骤在本地运行它:
- 克隆存储库:
git clone --recurse-submodules https://github.com/microsoft/TRELLIS.
git clone --recurse-submodules https://github.com/microsoft/TRELLIS.git
cd TRELLIS
2.创建一个名为的新conda环境trellis
并安装依赖项:
./setup.sh --new-env --basic --xformers --flash-attn --diffoctreerast --spconv --mipgaussian --kaolin --nvdiffrast.sh --new-env --basic --xformers --flash-attn --diffoctreerast --spconv --mipgaussian --kaolin --nvdiffrast
setup.sh
可以通过运行来查看的详细用法. ./setup.sh --help
。
Usage: setup.sh [OPTIONS]
Options:
-h, --help Display this help message--help Display this help message
--new-env Create a new conda environment
--basic Install basic dependencies
--xformers Install xformers
--flash-attn Install flash-attn
--diffoctreerast Install diffoctreerast
--vox2seq Install vox2seq
--spconv Install spconv
--mipgaussian Install mip-splatting
--kaolin Install kaolin
--nvdiffrast Install nvdiffrast
--demo Install all dependencies for demo
以下是一个如何使用预训练模型生成3D资产的示例。
import os
# os.environ['ATTN_BACKEND'] = 'xformers' # Can be 'flash-attn' or 'xformers', default is 'flash-attn'
os.environ['SPCONV_ALGO'] = 'native' # Can be 'native' or 'auto', default is 'auto'.
# 'auto' is faster but will do benchmarking at the beginning.
# Recommended to set to 'native' if run only once.
import imageio
from PIL import Image
from trellis.pipelines import TrellisImageTo3DPipeline
from trellis.utils import render_utils, postprocessing_utils
# Load a pipeline from a model folder or a Hugging Face model hub.
pipeline = TrellisImageTo3DPipeline.from_pretrained("JeffreyXiang/TRELLIS-image-large")
pipeline.cuda()
# Load an image
image = Image.open("assets/example_image/T.png")
# Run the pipeline
outputs = pipeline.run(
image,
seed=1,
# Optional parameters
# sparse_structure_sampler_params={
# "steps": 12,
# "cfg_strength": 7.5,
# },
# slat_sampler_params={
# "steps": 12,
# "cfg_strength": 3,
# },
)
# outputs is a dictionary containing generated 3D assets in different formats:
# - outputs['gaussian']: a list of 3D Gaussians
# - outputs['radiance_field']: a list of radiance fields
# - outputs['mesh']: a list of meshes
# Render the outputs
video = render_utils.render_video(outputs['gaussian'][0])['color']
imageio.mimsave("sample_gs.mp4", video, fps=30)
video = render_utils.render_video(outputs['radiance_field'][0])['color']
imageio.mimsave("sample_rf.mp4", video, fps=30)
video = render_utils.render_video(outputs['mesh'][0])['normal']
imageio.mimsave("sample_mesh.mp4", video, fps=30)
# GLB files can be extracted from the outputs
glb = postprocessing_utils.to_glb(
outputs['gaussian'][0],
outputs['mesh'][0],
# Optional parameters
simplify=0.95, # Ratio of triangles to remove in the simplification process
texture_size=1024, # Size of the texture used for the GLB
)
glb.export("sample.glb")
# Save Gaussians as PLY files
outputs['gaussian'][0].save_ply("sample.ply")
以下是您将获得的结果列表:
- Sample_gs.mp4:展示 3D 高斯表示的视频
- Sample_rf.mp4:展示辐射场表现的视频
- Sample_mesh.mp4:展示网格表示的视频
- Sample.glb:包含提取的纹理网格的 GLB 文件
- Sample.ply:包含 3D 高斯表示的 PLY 文件
Pingback: 如何在服务器上部署多个应用并启用 HTTPS? - 奇点漫游