---
license: mit
pipeline_tag: image-to-3d
tags:
- 3d
- novel-view-synthesis
- triangle-splatting
- simulation
datasets:
- lhmd/re10k_torch
---
TriSplat: Simulation-Ready Feed-Forward 3D Scene Reconstruction
Weijie Wang1,*
Zimu Li1,*
Jinchuan Shi1
Zeyu Zhang1
Botao Ye2,3
Marc Pollefeys2,4
Donny Y. Chen5
Bohan Zhuang1
1Zhejiang University
2ETH Zurich
3ETH AI Center
4Microsoft
5Monash University
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
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////mesh/DIRECT_triangle_mesh.ply
outputs////mesh/DIRECT_triangle_mesh.off
outputs////mesh/DIRECT_triangle_mesh_post.ply
outputs////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},
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).