Documentation

Everything you need to install Open4D, understand its data model, and start working with time-varying 4D geometry.

๐Ÿ’ก

Open4D is under active development. APIs in open4d/ are the stable public surface; modules evolve independently. For the latest state of the code, see the GitHub repository.

Introduction

Open4D is an open, research-driven platform for the representation, compression, processing, evaluation, and streaming of time-varying 4D geometry data. It serves as shared infrastructure for application domains such as XR systems, robotics, teleoperation, digital twins, and autonomous systems, where geometry evolves over time and must be processed under tight latency, bandwidth, and accuracy constraints.

The platform is organized into five layers:

Installation

Requirements

Development install

shell
git clone https://github.com/open4dfoundation/Open4D.git
cd Open4D
pip install -e .

With compression submodules

N4MC and TSMC are integrated as git submodules. To fetch them along with the core:

shell
git clone --recurse-submodules https://github.com/open4dfoundation/Open4D.git

# or, in an existing clone
git submodule update --init --recursive

Quickstart

The examples/ directory contains minimal, runnable scripts for the most common tasks:

shell
# play a time-varying mesh sequence
python examples/play_mesh_o4d.py

# play a point-cloud sequence
python examples/play_poincloud_o4d.py

# play a Draco-compressed point-cloud sequence
python examples/play_draco_pointcloud_o4d.py

A typical workflow โ€” convert raw per-frame data into an .o4d sequence, then play it back:

shell
# 1. package raw mesh frames into an .o4d sequence
python open4d/tools/create_o4d_mesh.py

# 2. play it back
python examples/play_mesh_o4d.py

Repository Structure

Open4D/
Open4D/
โ”œโ”€โ”€ open4d/          # Core public API (stable)
โ”‚   โ”œโ”€โ”€ core/        # 4D data structures + core codecs (N4MC, TSMC, TVMC)
โ”‚   โ”œโ”€โ”€ io/          # Readers / writers
โ”‚   โ”œโ”€โ”€ metrics/     # Quality + temporal metrics
โ”‚   โ”œโ”€โ”€ modules/     # Research modules (tvmc, unity_decoder)
โ”‚   โ”œโ”€โ”€ player/      # Playback for meshes and point clouds
โ”‚   โ””โ”€โ”€ tools/       # .o4d creation utilities
โ”œโ”€โ”€ benchmarks/      # Reproducible experiments + baselines
โ”œโ”€โ”€ apps/            # End-to-end pipelines
โ”œโ”€โ”€ examples/        # Minimal usage examples
โ”œโ”€โ”€ tests/           # Unit + integration tests
โ”œโ”€โ”€ docs/            # Documentation and figures
โ”œโ”€โ”€ scripts/         # Helper scripts
โ””โ”€โ”€ docker/          # Reproducible environments

The .o4d Data Model

Open4D treats time as a first-class signal. Instead of a directory of unrelated per-frame files, an .o4d sequence is a single logical object: an ordered set of geometry frames plus timing metadata, so downstream code โ€” codecs, metrics, players โ€” can reason about temporal structure directly.

Supported content types in the current core:

ContentReader / WriterPlayerCreation tool
Time-varying mesh open4d/io/o4d_mesh_io.py open4d/player/mesh.py create_o4d_mesh.py
Point-cloud sequence open4d/io/o4d_pointcloud_io.py open4d/player/pointcloud.py create_o4d_pointcloud.py
Draco-compressed point cloud open4d/io/o4d_draco_pointcloud_io.py open4d/player/draco_pointcloud.py create_o4d_draco_pointcloud.py

Design Principles

IO โ€” Readers & Writers

The open4d.io package provides a unified interface for reading and writing 4D sequences. Each content type has a dedicated IO module with a symmetric read/write API, so codecs and players are decoupled from on-disk formats.

python โ€” illustrative
from open4d import io

# read a time-varying mesh sequence
seq = io.o4d_mesh_io.read("longdress.o4d")

# iterate frames over time
for frame in seq:
    process(frame)
โš ๏ธ

Snippets marked illustrative show the intended API shape. Check the module source and examples/ for the exact, current signatures.

Player

open4d.player renders sequences interactively. It supports mesh sequences, raw point-cloud sequences, and Draco-compressed point-cloud streams โ€” decode happens frame-by-frame, matching how a streaming client would consume the data.

Conversion Tools

open4d.tools packages raw per-frame assets (e.g., a folder of PLY/OBJ frames) into .o4d sequences, including Draco-compressed variants for bandwidth-constrained playback.

Metrics

open4d.metrics hosts quality and temporal metrics used across benchmarks. The design goal is systems-aware evaluation: not just geometric distortion, but the quantities that decide whether a pipeline is deployable โ€”

Docker Environments

The docker/ directory provides containerized environments so that experiments run the same way on any machine โ€” a prerequisite for reproducible benchmarks.

FAQ

How is Open4D different from Open3D?

Open3D focuses on static 3D data processing. Open4D targets the time-varying case: sequences of meshes and point clouds whose geometry (and even connectivity) changes every frame, with compression, streaming, and temporal metrics as core concerns rather than extensions.

Can I use only the codecs?

Yes. N4MC, TSMC, and TVMC live in their own repositories/submodules and can be used standalone; Open4D adds the shared IO, metrics, and benchmark scaffolding around them.

How do I contribute?

New modules, benchmarks, datasets, metrics, and documentation are all welcome โ€” see Contributing.