File size: 7,327 Bytes
0cf1ca0
 
77bc72c
 
 
 
 
 
 
 
0cf1ca0
77bc72c
 
 
 
45f0041
77bc72c
99ac109
77bc72c
 
 
 
45f0041
 
 
 
 
 
 
 
77bc72c
 
 
45f0041
 
 
 
77bc72c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45f0041
77bc72c
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
---
license: mit
pipeline_tag: image-to-3d
tags:
- 3d
- novel-view-synthesis
- triangle-splatting
- simulation
datasets:
- lhmd/re10k_torch
---

<h1 align="center">TriSplat: Simulation-Ready Feed-Forward 3D Scene Reconstruction</h1>

<p align="center">
  <a href="https://arxiv.org/abs/2605.26115"><img src="https://img.shields.io/badge/Paper-B31B1B?style=for-the-badge&logo=arxiv&logoColor=white" alt="Paper"></a>
  <a href="https://lhmd.top/trisplat"><img src="https://img.shields.io/badge/Project%20Page-000000?style=for-the-badge&logo=googlechrome&logoColor=white" alt="Project Page"></a>
  <a href="https://github.com/ziplab/TriSplat"><img src="https://img.shields.io/badge/Code-181717?style=for-the-badge&logo=github&logoColor=white" alt="Code"></a>
  <a href="https://huggingface.co/lhmd/TriSplat"><img src="https://img.shields.io/badge/Models-FFD21E?style=for-the-badge&logo=huggingface&logoColor=black" alt="Models"></a>
</p>

<p align="center">
  <a href="https://lhmd.top/">Weijie Wang</a><sup>1,*</sup> &nbsp;
  <a href="https://github.com/puLangMu">Zimu Li</a><sup>1,*</sup> &nbsp;
  <a href="https://chuan-10.github.io/">Jinchuan Shi</a><sup>1</sup> &nbsp;
  <a href="https://steve-zeyu-zhang.github.io/">Zeyu Zhang</a><sup>1</sup> &nbsp;
  <a href="https://botaoye.github.io/">Botao Ye</a><sup>2,3</sup> <br />
  <a href="https://people.inf.ethz.ch/~pomarc/">Marc Pollefeys</a><sup>2,4</sup> &nbsp;
  <a href="https://donydchen.github.io/">Donny Y. Chen</a><sup>5</sup> &nbsp;
  <a href="https://bohanzhuang.github.io/">Bohan Zhuang</a><sup>1</sup> &nbsp;
</p>

<p align="center">
  <sup>1</sup>Zhejiang University &nbsp; &nbsp;
  <sup>2</sup>ETH Zurich &nbsp; &nbsp;
  <sup>3</sup>ETH AI Center &nbsp; &nbsp;
  <sup>4</sup>Microsoft &nbsp; &nbsp;
  <sup>5</sup>Monash University
</p>

<p align="center">
  <img src="https://lhmd.top/trisplat/assets/images/teaser.jpg" alt="TriSplat teaser" width="100%">
</p>

TriSplat is a feed-forward 3D reconstruction model that predicts simulation-ready triangle meshes from sparse, unposed images. Unlike Gaussian-splatting pipelines that require post-hoc mesh extraction, TriSplat directly predicts oriented triangle primitives, camera poses, point maps, and appearance attributes in one forward pass. We train on RealEstate10K and DL3DV, and evaluate zero-shot generalization on ScanNet with RE10K-trained models.

## Method

<p align="center">
  <img src="https://lhmd.top/trisplat/assets/figures/web/pipeline2.png" alt="TriSplat pipeline" width="100%">
</p>

Given sparse input views, TriSplat predicts dense local point maps, triangle attributes, camera poses, and optional intrinsics. Point-map geometry anchors triangle orientation through geometry normals, a learned normal refiner, and a monocular-normal bootstrap. A differentiable triangle rasterizer renders RGB, depth, and normals, while mesh export only needs opacity filtering, winding correction, and duplicate-vertex merging.

## Installation

Create the environment:

```bash
conda create -y -n trisplat python=3.10
conda activate trisplat
pip install --upgrade pip
```

Install PyTorch and Python dependencies:

```bash
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 \
  --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt --no-build-isolation
```

Build CUDA extensions:

```bash
bash scripts/env/rebuild_extensions.sh
```

Download initialization weights used by the model:

```bash
mkdir -p pretrained_weights
wget -O pretrained_weights/pi3.safetensors \
  https://huggingface.co/yyfz233/Pi3/resolve/main/model.safetensors
wget -O pretrained_weights/omnidata_dpt_normal_v2.ckpt \
  'https://zenodo.org/records/10447888/files/omnidata_dpt_normal_v2.ckpt?download=1'
```

## Models

Download released TriSplat checkpoints from [lhmd/TriSplat](https://huggingface.co/lhmd/TriSplat):

```bash
mkdir -p checkpoints
wget -O checkpoints/re10k_trisplat.ckpt \
  https://huggingface.co/lhmd/TriSplat/resolve/main/re10k_trisplat.ckpt
wget -O checkpoints/dl3dv_trisplat.ckpt \
  https://huggingface.co/lhmd/TriSplat/resolve/main/dl3dv_trisplat.ckpt
```

## Datasets

Packed `.torch` datasets default to:

```text
data/re10k
data/dl3dv
```

You can also set:

```bash
export RE10K_ROOT="$PWD/data/re10k"
export DL3DV_ROOT="$PWD/data/dl3dv"
```

## Training

Train on RealEstate10K:

```bash
bash scripts/train/train_re10k.sh --gpus 0,1,2,3,4,5,6,7 --wandb-mode offline
```

Train on DL3DV:

```bash
bash scripts/train/train_dl3dv.sh --gpus 0,1,2,3,4,5,6,7 --wandb-mode offline
```

Extra arguments after `--` are passed to Hydra. Use `--ckpt` to resume or initialize from a checkpoint.

## Evaluation

Evaluate and render RealEstate10K meshes:

```bash
bash scripts/eval/eval_re10k_mesh.sh \
  --ckpt checkpoints/re10k_trisplat.ckpt \
  --data-root "$RE10K_ROOT"
```

Evaluate and render DL3DV meshes:

```bash
bash scripts/eval/eval_dl3dv_mesh.sh \
  --ckpt checkpoints/dl3dv_trisplat.ckpt \
  --data-root "$DL3DV_ROOT"
```


## Simulation

TriSplat exports ordinary triangle meshes, so the output can be opened directly by common graphics and simulation tools. The evaluation scripts above write per-scene meshes under:

```text
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh.ply
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh.off
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh_post.ply
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh_post.off
```

The `_post` mesh is the default rendering and simulation output. It applies connected-component cleanup to the direct mesh, keeping the largest components and removing small disconnected floaters, unreferenced vertices, and degenerate triangles. For example, after running `scripts/eval/eval_re10k_mesh.sh`, use:

```bash
ls outputs/re10k_mesh_eval/re10k_mesh_eval/*/mesh/DIRECT_triangle_mesh_post.ply
```

The exported `_post.ply` mesh is vertex-colored and can be imported into [Blender](https://www.blender.org/), [Open3D](https://www.open3d.org/), [Isaac Sim](https://developer.nvidia.com/isaac/sim), [Unity](https://unity.com/), or [PyBullet](https://pybullet.org/) as a static triangle mesh. For simulation, use the `.ply` mesh for visual geometry and generate a collision mesh in your simulator if needed; for example, simplify or convex-decompose it before rigid-body simulation when the raw mesh is too dense.

## Citation

If you find this repository useful, please cite:

```bibtex
@article{wang2026trisplat,
  title={TriSplat: Simulation-Ready Feed-Forward 3D Scene Reconstruction},
  author={Wang, Weijie and Li, Zimu and Shi, Jinchuan and Zhang, Zeyu and Ye, Botao and Pollefeys, Marc and Chen, Donny Y. and Zhuang, Bohan},
  journal={arXiv preprint arXiv:2605.26115},
  year={2026}
}
```

## Acknowledgements

This codebase builds on open-source work including [YoNoSplat](https://github.com/justimyhxu/YoNoSplat), [MVSplat](https://github.com/donydchen/mvsplat), [pixelSplat](https://github.com/dcharatan/pixelsplat), [CroCo](https://github.com/naver/croco), [DINOv2](https://github.com/facebookresearch/dinov2), [Omnidata](https://github.com/EPFL-VILAB/omnidata), [3D Gaussian Splatting](https://github.com/graphdeco-inria/gaussian-splatting), and [Triangle Splatting](https://github.com/trianglesplatting/triangle-splatting).