【3D-AICG 系列-1】Trellis v1 和 Trellis v2 的区别和改进

系列文章目录

文章目录

  • 系列文章目录
  • [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
        }
    }
}

纹理来源:

  1. 训练数据: 多视角渲染图 → DINOv2 特征 (1024 维)
  2. 编码过程: VAE Encoder 将高维特征压缩到 8 维 SLat
  3. 训练监督: 渲染损失 (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

  1. 稀疏表示的局部性:

    • 每个 voxel 只需存储局部信息
    • 8 维 × N voxels = 有效信息量远大于 8
  2. Decoder 的表达能力:

    python 复制代码
    Encoder: 1024维 → 8维 (压缩)
    Decoder: 8维 → 高维特征 → RGB/材质 (解压)
  3. 训练监督信号:

    • LPIPS 感知损失强制保留视觉重要特征
    • 多视角一致性约束

6.2 为什么 v2 要分离 Shape/Texture?

原因:解耦带来的灵活性

  1. 独立编辑:

    • 固定几何,重新生成纹理
    • 纹理迁移 (texture transfer)
  2. 条件化生成:

    python 复制代码
    # Texture Flow 以 Shape 为条件
    tex_latent = texture_flow(
        noise,
        concat_cond=shape_latent  # Shape 作为强条件
    )
  3. 更大的表达空间:

    • 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 可能的演进方向

  1. 更高分辨率: 2K/4K 级别精度
  2. 动态纹理: 支持程序化材质生成
  3. 语义感知: 部件级语义理解
  4. 物理仿真: 集成刚体/柔体模拟

9.2 研究机会

  • 高效 Cascade: 减少上采样开销
  • 纹理先验: 利用材质数据库
  • 跨模态融合: 文本+图像联合控制
  • 可控生成: 精细化用户交互

10. 总结

TRELLIS v1 和 v2 代表了 3D 生成模型的两代设计哲学:

v1: 统一简洁

  • 8 维统一 Latent
  • 隐式纹理编码
  • 多格式解码
  • 适合快速迭代

v2: 分离精细

  • Shape/Texture 解耦
  • 显式 PBR 建模
  • 多分辨率支持
  • 面向高质量应用

参考资料

  1. TRELLIS v1 GitHub: https://github.com/microsoft/TRELLIS
  2. TRELLIS v2 GitHub: https://github.com/microsoft/TRELLIS.2

相关推荐
三年模拟五年烧烤2 小时前
easy-threesdk快速一键搭建threejs3d可视化场景
3d·threejs
BestSongC2 小时前
基于 YOLO11 的智能行人摔倒检测系统
人工智能·深度学习·yolo·目标检测
mit6.8242 小时前
模运算|z函数 字符串匹配
算法
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-02-05
大数据·数据库·人工智能·经验分享·搜索引擎·产品运营
阿豪只会阿巴2 小时前
【吃饭香系列】二周目|代码随想录算法训练营第七天|454.四数相加II |383. 赎金信 |15. 三数之和 |18. 四数之和
算法
狂奔蜗牛飙车2 小时前
Python学习之路-Python3 迭代器与生成器学习详解
开发语言·python·学习·#python学习笔记·python迭代器生成器
小O的算法实验室2 小时前
2025年COR SCI2区,考虑风场影响的无人机搜救覆盖路径规划精确界算法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
xqqxqxxq2 小时前
洛谷算法1-3 暴力枚举(NOIP经典真题解析)java(持续更新)
java·开发语言·算法
子非鱼9212 小时前
机器学习之逻辑回归
人工智能·机器学习·逻辑回归