系列文章目录
- 【3DV 进阶-4】VecSet 论文+代码对照理解
- 【3DV 进阶-5】3D生成中 Inductive Bias (归纳偏置)的技术路线图
- 【3DV 进阶-6】为什么3D点云是无序集合?而2D图片是有序的呢?
- 【3DV 进阶-7】Hunyuan3D2.1-ShapeVAE 整体流程
- 【3DV 进阶-10】Trellis 中的表示 SLat 理解
- 【3DV 进阶-11】Trellis.2 数据处理与训练流程图
- 【3DV 进阶-12】Trellis.2 数据处理脚本细节
文章目录
- 系列文章目录
- [TRELLIS 1 与 TRELLIS 2 架构对比:从统一表示到分离建模](#TRELLIS 1 与 TRELLIS 2 架构对比:从统一表示到分离建模)
-
- 摘要
- [1. 核心架构对比](#1. 核心架构对比)
-
- [1.1 Pipeline 流程差异](#1.1 Pipeline 流程差异)
- [1.2 关键组件对比表](#1.2 关键组件对比表)
- [2. 纹理建模机制的根本性变革](#2. 纹理建模机制的根本性变革)
-
- [2.1 TRELLIS v1: 隐式纹理编码](#2.1 TRELLIS v1: 隐式纹理编码)
- [2.2 TRELLIS v2: 显式纹理分离](#2.2 TRELLIS v2: 显式纹理分离)
- [3. 多分辨率 Cascade 机制](#3. 多分辨率 Cascade 机制)
-
- [3.1 TRELLIS v1: 单分辨率生成](#3.1 TRELLIS v1: 单分辨率生成)
- [3.2 TRELLIS v2: 多分辨率 + Cascade](#3.2 TRELLIS v2: 多分辨率 + Cascade)
- [4. 代码示例对比](#4. 代码示例对比)
-
- [4.1 推理代码](#4.1 推理代码)
- [4.2 训练配置对比](#4.2 训练配置对比)
- [6. 技术细节深度剖析](#6. 技术细节深度剖析)
-
- [6.1 为什么 8 维能编码纹理?](#6.1 为什么 8 维能编码纹理?)
- [6.2 为什么 v2 要分离 Shape/Texture?](#6.2 为什么 v2 要分离 Shape/Texture?)
- [6.3 Cascade 采样的技术细节](#6.3 Cascade 采样的技术细节)
- [7. 性能与质量对比](#7. 性能与质量对比)
-
- [7.1 推理速度](#7.1 推理速度)
- [7.2 质量提升](#7.2 质量提升)
- [8. 选择建议](#8. 选择建议)
-
- [8.1 使用场景推荐](#8.1 使用场景推荐)
- [9. 未来展望](#9. 未来展望)
-
- [9.1 可能的演进方向](#9.1 可能的演进方向)
- [9.2 研究机会](#9.2 研究机会)
- [10. 总结](#10. 总结)
- 参考资料
TRELLIS 1 与 TRELLIS 2 架构对比:从统一表示到分离建模
摘要
TRELLIS 是微软研究院开发的大规模 3D 生成模型系列。本文深入对比 TRELLIS v1 和 v2 的核心架构差异,重点分析其在 3D 表示、纹理建模、分辨率支持等方面的演进。
1. 核心架构对比
1.1 Pipeline 流程差异
TRELLIS v1 - 两阶段 Pipeline
输入图像
│
├─► Stage 1: Sparse Structure Generation
│ ├─ SS Flow Model (64³ 分辨率)
│ └─ SS Decoder → 稀疏体素结构
│
└─► Stage 2: Structured Latent Generation
├─ SLat Flow Model (🔥8 维 latent)
└─ 多格式 Decoder
├─ Gaussian Decoder → 3D Gaussians
├─ Mesh Decoder → Textured Mesh
└─ RF Decoder → Radiance Field
TRELLIS v2 - 三阶段 Pipeline
输入图像
│
├─► Stage 1: Sparse Structure Generation
│ ├─ SS Flow Model (64³ 分辨率)
│ └─ SS Decoder → 稀疏体素结构
│
├─► Stage 2: Shape Latent Generation
│ ├─ Shape Flow Model (🔥32 维 latent)
│ │ - 支持多分辨率 (512/1024/1536)
│ │ - Cascade 采样机制
│ └─ Shape Decoder → O-Voxel Mesh
│
└─► Stage 3: Texture Latent Generation
├─ Texture Flow Model (🔥32 维 latent)
│ - 输入: 32 (noise) + 32 (shape_cond)
└─ Texture Decoder → PBR Materials
├─ Base Color (RGB)
├─ Metallic
├─ Roughness
└─ Alpha
1.2 关键组件对比表
| 组件 | TRELLIS v1 | TRELLIS v2 | 说明 |
|---|---|---|---|
| Sparse Structure | 64³ 分辨率 | 64³ 分辨率 | 稀疏体素结构生成 |
| 主 Flow Model | SLat Flow (8维) | Shape Flow (32维) | 几何生成模型 |
| 纹理 Flow | ❌ 无 | ✅ Texture Flow (32维) | 独立纹理生成 |
| Latent 表示 | 统一 SLat | Shape + Texture 分离 | 核心架构变化 |
| 输出格式 | Mesh/GS/RF | O-Voxel Mesh + PBR | 更现代的表示 |
| 分辨率支持 | 单一 (64) | 多分辨率 (512/1024/1536) | 可扩展性提升 |
| Image Encoder | DINOv2 | DINOv3 | 特征提取升级 |
2. 纹理建模机制的根本性变革
2.1 TRELLIS v1: 隐式纹理编码
TRELLIS v1 采用统一 Latent 表示 ,8 维 SLat 同时编码几何和纹理信息。
编码过程:
python
# TRELLIS v1 配置
{
"encoder": {
"name": "ElasticSLatEncoder",
"args": {
"resolution": 64,
"in_channels": 1024, # DINOv2 特征
"latent_channels": 8, # 统一 8 维 latent (几何+纹理)
"num_blocks": 12
}
}
}
纹理来源:
- 训练数据: 多视角渲染图 → DINOv2 特征 (1024 维)
- 编码过程: VAE Encoder 将高维特征压缩到 8 维 SLat
- 训练监督: 渲染损失 (L1 + SSIM + LPIPS) 强制保留外观信息
python
# 训练损失配置
"trainer": {
"loss_type": "l1",
"lambda_ssim": 0.2, # 结构相似性 (几何)
"lambda_lpips": 0.2, # 感知损失 (纹理质量)
"lambda_kl": 1e-06 # Latent 正则化
}
Decoder 解码纹理:
python
# Gaussian Decoder 输出布局
layout = {
'_xyz': (num_gaussians, 3), # 位置
'_features_dc': (num_gaussians, 1, 3), # 👈 RGB 颜色 (纹理)
'_scaling': (num_gaussians, 3), # 尺度
'_rotation': (num_gaussians, 4), # 旋转
'_opacity': (num_gaussians, 1) # 透明度
}
局限性:
- ❌ 几何与纹理耦合,无法独立编辑
- ❌ 纹理质量受 8 维 latent 容量限制
- ❌ 不支持物理材质 (PBR)
2.2 TRELLIS v2: 显式纹理分离
TRELLIS v2 采用分离式架构,Shape 和 Texture 各自独立建模。
Shape Latent (32 维):
python
# Shape Flow Model 配置
{
"denoiser": {
"name": "ElasticSLatFlowModel",
"args": {
"in_channels": 32, # 纯几何信息
"out_channels": 32,
"model_channels": 1536,
"num_blocks": 30
}
}
}
Texture Latent (32 维):
python
# Texture Flow Model 配置
{
"denoiser": {
"name": "ElasticSLatFlowModel",
"args": {
"in_channels": 64, # 32 (noise) + 32 (shape_cond)
"out_channels": 32, # PBR 材质 latent
"model_channels": 1536
}
}
}
PBR 材质输出:
python
# Texture Decoder 输出布局
pbr_attr_layout = {
'base_color': slice(0, 3), # RGB 基础色
'metallic': slice(3, 4), # 金属度
'roughness': slice(4, 5), # 粗糙度
'alpha': slice(5, 6) # 透明度
}
优势:
- ✅ 几何与纹理解耦,支持独立编辑
- ✅ 32 维 latent 提供更大表达能力
- ✅ 基于 PBR 的物理真实渲染
- ✅ 条件化纹理生成 (shape-conditioned)
3. 多分辨率 Cascade 机制
3.1 TRELLIS v1: 单分辨率生成
python
# v1 固定分辨率
pipeline.run(
image,
# sparse_structure: 64³
# slat_resolution: 64
)
3.2 TRELLIS v2: 多分辨率 + Cascade
Pipeline 类型:
| Pipeline | SS 分辨率 | Shape 分辨率 | 说明 |
|---|---|---|---|
512 |
32 | 512 | 低分辨率,快速生成 |
1024 |
64 | 1024 | 高分辨率,直接生成 |
1024_cascade |
32 | 512→1024 | 级联采样,平衡质量与效率 |
1536_cascade |
32 | 512→1536 | 超高分辨率 |
Cascade 采样流程:
python
# v2 级联生成 (默认)
pipeline.run(
image,
pipeline_type='1024_cascade' # 512 → 1024
)
# 内部流程
# 1. 512 分辨率条件生成 low-res shape latent
# 2. Shape Decoder 上采样到 1024 分辨率
# 3. 1024 分辨率条件生成 high-res shape latent
# 4. Texture Flow 在高分辨率上生成纹理
自适应 Token 管理:
python
# 自动调整分辨率以适应显存限制
max_num_tokens = 49152 # 约 49K tokens
if num_tokens > max_num_tokens:
resolution -= 128 # 降低分辨率
4. 代码示例对比
4.1 推理代码
TRELLIS v1:
python
from trellis.pipelines import TrellisImageTo3DPipeline
# 加载模型
pipeline = TrellisImageTo3DPipeline.from_pretrained(
"microsoft/TRELLIS-image-large"
)
pipeline.cuda()
# 运行生成
outputs = pipeline.run(
image,
sparse_structure_sampler_params={"steps": 12, "cfg_strength": 7.5},
slat_sampler_params={"steps": 12, "cfg_strength": 3.0}
)
# 输出: dict with keys ['gaussian', 'radiance_field', 'mesh']
mesh = outputs['mesh'][0]
gaussian = outputs['gaussian'][0]
TRELLIS v2:
python
from trellis2.pipelines import Trellis2ImageTo3DPipeline
# 加载模型
pipeline = Trellis2ImageTo3DPipeline.from_pretrained(
"/path/to/trellis2"
)
pipeline.to('cuda')
# 运行生成
meshes = pipeline.run(
image,
pipeline_type='1024_cascade', # 级联采样
sparse_structure_sampler_params={"steps": 12, "cfg_strength": 7.5},
shape_slat_sampler_params={"steps": 12, "cfg_strength": 3.0},
tex_slat_sampler_params={"steps": 12, "cfg_strength": 3.0}
)
# 输出: List[MeshWithVoxel] 包含 PBR 材质
mesh = meshes[0]
# mesh.attrs 包含 base_color, metallic, roughness, alpha
4.2 训练配置对比
TRELLIS v1 - SLat Flow 训练:
json
{
"models": {
"denoiser": {
"name": "SLatFlowModel",
"args": {
"resolution": 64,
"in_channels": 8,
"out_channels": 8,
"model_channels": 1024
}
}
},
"dataset": {
"name": "ImageConditionedSLat",
"args": {
"image_size": 518,
"latent_model": "dinov2_vitl14_reg"
}
}
}
TRELLIS v2 - Shape Flow 训练:
json
{
"models": {
"denoiser": {
"name": "ElasticSLatFlowModel",
"args": {
"resolution": 32,
"in_channels": 32,
"out_channels": 32,
"model_channels": 1536,
"num_blocks": 30
}
}
},
"dataset": {
"name": "ImageConditionedSLatShape",
"args": {
"resolution": 512,
"image_size": 512,
"image_cond_model": "DinoV3FeatureExtractor"
}
}
}
6. 技术细节深度剖析
6.1 为什么 8 维能编码纹理?
答案:结构化稀疏 + 高容量 Decoder
-
稀疏表示的局部性:
- 每个 voxel 只需存储局部信息
- 8 维 × N voxels = 有效信息量远大于 8
-
Decoder 的表达能力:
pythonEncoder: 1024维 → 8维 (压缩) Decoder: 8维 → 高维特征 → RGB/材质 (解压) -
训练监督信号:
- LPIPS 感知损失强制保留视觉重要特征
- 多视角一致性约束
6.2 为什么 v2 要分离 Shape/Texture?
原因:解耦带来的灵活性
-
独立编辑:
- 固定几何,重新生成纹理
- 纹理迁移 (texture transfer)
-
条件化生成:
python# Texture Flow 以 Shape 为条件 tex_latent = texture_flow( noise, concat_cond=shape_latent # Shape 作为强条件 ) -
更大的表达空间:
- 32维 Shape + 32维 Texture = 64维总容量
- v1 仅 8 维
6.3 Cascade 采样的技术细节
为什么需要 Cascade?
python
# 直接 1024 分辨率生成
num_tokens = 1024³ * occupancy_ratio # 可能超过 100K tokens
memory_required = num_tokens * attention_cost # OOM!
# Cascade 策略
# Step 1: 512 分辨率 (约 8K tokens)
# Step 2: 上采样引导 → 1024 分辨率 (约 32K tokens)
上采样引导机制:
python
# 512 分辨率 shape latent
lr_shape = shape_flow_512(noise, cond_512)
# Decoder 上采样获取 1024 分辨率坐标
hr_coords = shape_decoder.upsample(lr_shape, upsample_times=4)
# 在上采样坐标上生成高分辨率 latent
hr_shape = shape_flow_1024(
noise_at_hr_coords,
cond_1024,
guide_coords=hr_coords # 几何引导
)
7. 性能与质量对比
7.1 推理速度
| Pipeline | 分辨率 | Token 数 | 推理时间 (A100) | 显存占用 |
|---|---|---|---|---|
| TRELLIS v1 | 64 | ~4K | ~15s | ~8GB |
| TRELLIS v2 (512) | 512 | ~8K | ~25s | ~12GB |
| TRELLIS v2 (1024) | 1024 | ~32K | ~60s | ~24GB |
| TRELLIS v2 (1024_cascade) | 512→1024 | 8K→32K | ~45s | ~18GB |
7.2 质量提升
几何精度:
- v1: 64 分辨率 → 约 1.5cm 体素精度
- v2: 1024 分辨率 → 约 1mm 体素精度
纹理质量:
- v1: 8维隐式编码,细节有限
- v2: 32维显式 PBR,物理真实感
灵活性:
- v1: 输出格式固定
- v2: 支持部件编辑、纹理迁移
8. 选择建议
8.1 使用场景推荐
选择 TRELLIS v1 如果:
- ✅ 需要快速原型验证
- ✅ 显存受限 (< 16GB)
- ✅ 对纹理质量要求不高
- ✅ 需要多种输出格式 (GS/RF/Mesh)
选择 TRELLIS v2 如果:
- ✅ 追求最高质量
- ✅ 需要物理真实感渲染 (PBR)
- ✅ 需要纹理编辑功能
- ✅ 有充足的计算资源
9. 未来展望
9.1 可能的演进方向
- 更高分辨率: 2K/4K 级别精度
- 动态纹理: 支持程序化材质生成
- 语义感知: 部件级语义理解
- 物理仿真: 集成刚体/柔体模拟
9.2 研究机会
- 高效 Cascade: 减少上采样开销
- 纹理先验: 利用材质数据库
- 跨模态融合: 文本+图像联合控制
- 可控生成: 精细化用户交互
10. 总结
TRELLIS v1 和 v2 代表了 3D 生成模型的两代设计哲学:
v1: 统一简洁
- 8 维统一 Latent
- 隐式纹理编码
- 多格式解码
- 适合快速迭代
v2: 分离精细
- Shape/Texture 解耦
- 显式 PBR 建模
- 多分辨率支持
- 面向高质量应用
参考资料
- TRELLIS v1 GitHub: https://github.com/microsoft/TRELLIS
- TRELLIS v2 GitHub: https://github.com/microsoft/TRELLIS.2