Update README.md
Browse files
README.md
CHANGED
|
@@ -1,3 +1,186 @@
|
|
| 1 |
---
|
| 2 |
license: mit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: mit
|
| 3 |
+
pipeline_tag: image-to-3d
|
| 4 |
+
tags:
|
| 5 |
+
- 3d
|
| 6 |
+
- novel-view-synthesis
|
| 7 |
+
- triangle-splatting
|
| 8 |
+
- simulation
|
| 9 |
+
datasets:
|
| 10 |
+
- lhmd/re10k_torch
|
| 11 |
---
|
| 12 |
+
|
| 13 |
+
<h1 align="center">TriSplat: Simulation-Ready Feed-Forward 3D Scene Reconstruction</h1>
|
| 14 |
+
|
| 15 |
+
<p align="center">
|
| 16 |
+
<a href="https://lhmd.top/trisplat"><img src="https://img.shields.io/badge/Paper-B31B1B?style=for-the-badge&logo=arxiv&logoColor=white" alt="Paper"></a>
|
| 17 |
+
<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>
|
| 18 |
+
<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>
|
| 19 |
+
<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>
|
| 20 |
+
</p>
|
| 21 |
+
|
| 22 |
+
<p align="center">
|
| 23 |
+
<a href="https://lhmd.top/">Weijie Wang</a><sup>1,*</sup>
|
| 24 |
+
<a href="https://github.com/puLangMu">Zimu Li</a><sup>1,*</sup>
|
| 25 |
+
<a href="https://chuan-10.github.io/">Jinchuan Shi</a><sup>1</sup>
|
| 26 |
+
<a href="https://steve-zeyu-zhang.github.io/">Zeyu Zhang</a><sup>1</sup>
|
| 27 |
+
<a href="https://botaoye.github.io/">Botao Ye</a><sup>2,3</sup>
|
| 28 |
+
<a href="https://people.inf.ethz.ch/~pomarc/">Marc Pollefeys</a><sup>2,4</sup>
|
| 29 |
+
<a href="https://donydchen.github.io/">Donny Y. Chen</a><sup>5</sup>
|
| 30 |
+
<a href="https://bohanzhuang.github.io/">Bohan Zhuang</a><sup>1</sup>
|
| 31 |
+
</p>
|
| 32 |
+
|
| 33 |
+
<p align="center">
|
| 34 |
+
<sup>1</sup>Zhejiang University
|
| 35 |
+
<sup>2</sup>ETH Zurich
|
| 36 |
+
<sup>3</sup>ETH AI Center
|
| 37 |
+
<sup>4</sup>Microsoft
|
| 38 |
+
<sup>5</sup>Monash University
|
| 39 |
+
</p>
|
| 40 |
+
|
| 41 |
+
<p align="center">
|
| 42 |
+
<img src="https://lhmd.top/trisplat/assets/images/teaser.jpg" alt="TriSplat teaser" width="100%">
|
| 43 |
+
</p>
|
| 44 |
+
|
| 45 |
+
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.
|
| 46 |
+
|
| 47 |
+
## Method
|
| 48 |
+
|
| 49 |
+
<p align="center">
|
| 50 |
+
<img src="https://lhmd.top/trisplat/assets/figures/web/pipeline2.png" alt="TriSplat pipeline" width="100%">
|
| 51 |
+
</p>
|
| 52 |
+
|
| 53 |
+
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.
|
| 54 |
+
|
| 55 |
+
## Installation
|
| 56 |
+
|
| 57 |
+
Create the environment:
|
| 58 |
+
|
| 59 |
+
```bash
|
| 60 |
+
conda create -y -n trisplat python=3.10
|
| 61 |
+
conda activate trisplat
|
| 62 |
+
pip install --upgrade pip
|
| 63 |
+
```
|
| 64 |
+
|
| 65 |
+
Install PyTorch and Python dependencies:
|
| 66 |
+
|
| 67 |
+
```bash
|
| 68 |
+
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 \
|
| 69 |
+
--index-url https://download.pytorch.org/whl/cu118
|
| 70 |
+
pip install -r requirements.txt --no-build-isolation
|
| 71 |
+
```
|
| 72 |
+
|
| 73 |
+
Build CUDA extensions:
|
| 74 |
+
|
| 75 |
+
```bash
|
| 76 |
+
bash scripts/env/rebuild_extensions.sh
|
| 77 |
+
```
|
| 78 |
+
|
| 79 |
+
Download initialization weights used by the model:
|
| 80 |
+
|
| 81 |
+
```bash
|
| 82 |
+
mkdir -p pretrained_weights
|
| 83 |
+
wget -O pretrained_weights/pi3.safetensors \
|
| 84 |
+
https://huggingface.co/yyfz233/Pi3/resolve/main/model.safetensors
|
| 85 |
+
wget -O pretrained_weights/omnidata_dpt_normal_v2.ckpt \
|
| 86 |
+
'https://zenodo.org/records/10447888/files/omnidata_dpt_normal_v2.ckpt?download=1'
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
## Models
|
| 90 |
+
|
| 91 |
+
Download released TriSplat checkpoints from [lhmd/TriSplat](https://huggingface.co/lhmd/TriSplat):
|
| 92 |
+
|
| 93 |
+
```bash
|
| 94 |
+
mkdir -p checkpoints
|
| 95 |
+
wget -O checkpoints/re10k_trisplat.ckpt \
|
| 96 |
+
https://huggingface.co/lhmd/TriSplat/resolve/main/re10k_trisplat.ckpt
|
| 97 |
+
wget -O checkpoints/dl3dv_trisplat.ckpt \
|
| 98 |
+
https://huggingface.co/lhmd/TriSplat/resolve/main/dl3dv_trisplat.ckpt
|
| 99 |
+
```
|
| 100 |
+
|
| 101 |
+
## Datasets
|
| 102 |
+
|
| 103 |
+
Packed `.torch` datasets default to:
|
| 104 |
+
|
| 105 |
+
```text
|
| 106 |
+
data/re10k
|
| 107 |
+
data/dl3dv
|
| 108 |
+
```
|
| 109 |
+
|
| 110 |
+
You can also set:
|
| 111 |
+
|
| 112 |
+
```bash
|
| 113 |
+
export RE10K_ROOT="$PWD/data/re10k"
|
| 114 |
+
export DL3DV_ROOT="$PWD/data/dl3dv"
|
| 115 |
+
```
|
| 116 |
+
|
| 117 |
+
## Training
|
| 118 |
+
|
| 119 |
+
Train on RealEstate10K:
|
| 120 |
+
|
| 121 |
+
```bash
|
| 122 |
+
bash scripts/train/train_re10k.sh --gpus 0,1,2,3,4,5,6,7 --wandb-mode offline
|
| 123 |
+
```
|
| 124 |
+
|
| 125 |
+
Train on DL3DV:
|
| 126 |
+
|
| 127 |
+
```bash
|
| 128 |
+
bash scripts/train/train_dl3dv.sh --gpus 0,1,2,3,4,5,6,7 --wandb-mode offline
|
| 129 |
+
```
|
| 130 |
+
|
| 131 |
+
Extra arguments after `--` are passed to Hydra. Use `--ckpt` to resume or initialize from a checkpoint.
|
| 132 |
+
|
| 133 |
+
## Evaluation
|
| 134 |
+
|
| 135 |
+
Evaluate and render RealEstate10K meshes:
|
| 136 |
+
|
| 137 |
+
```bash
|
| 138 |
+
bash scripts/eval/eval_re10k_mesh.sh \
|
| 139 |
+
--ckpt checkpoints/re10k_trisplat.ckpt \
|
| 140 |
+
--data-root "$RE10K_ROOT"
|
| 141 |
+
```
|
| 142 |
+
|
| 143 |
+
Evaluate and render DL3DV meshes:
|
| 144 |
+
|
| 145 |
+
```bash
|
| 146 |
+
bash scripts/eval/eval_dl3dv_mesh.sh \
|
| 147 |
+
--ckpt checkpoints/dl3dv_trisplat.ckpt \
|
| 148 |
+
--data-root "$DL3DV_ROOT"
|
| 149 |
+
```
|
| 150 |
+
|
| 151 |
+
|
| 152 |
+
## Simulation
|
| 153 |
+
|
| 154 |
+
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:
|
| 155 |
+
|
| 156 |
+
```text
|
| 157 |
+
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh.ply
|
| 158 |
+
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh.off
|
| 159 |
+
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh_post.ply
|
| 160 |
+
outputs/<eval_root>/<run_name>/<scene>/mesh/DIRECT_triangle_mesh_post.off
|
| 161 |
+
```
|
| 162 |
+
|
| 163 |
+
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:
|
| 164 |
+
|
| 165 |
+
```bash
|
| 166 |
+
ls outputs/re10k_mesh_eval/re10k_mesh_eval/*/mesh/DIRECT_triangle_mesh_post.ply
|
| 167 |
+
```
|
| 168 |
+
|
| 169 |
+
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.
|
| 170 |
+
|
| 171 |
+
## Citation
|
| 172 |
+
|
| 173 |
+
If you find this repository useful, please cite:
|
| 174 |
+
|
| 175 |
+
```bibtex
|
| 176 |
+
@article{wang2026trisplat,
|
| 177 |
+
title={TriSplat: Simulation-Ready Feed-Forward 3D Scene Reconstruction},
|
| 178 |
+
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},
|
| 179 |
+
journal={arXiv preprint},
|
| 180 |
+
year={2026}
|
| 181 |
+
}
|
| 182 |
+
```
|
| 183 |
+
|
| 184 |
+
## Acknowledgements
|
| 185 |
+
|
| 186 |
+
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).
|