MAPPE
Purpose
MAPPE (Mesh Assessment via Point Cloud and Projection Estimators) is a full-reference mesh quality assessment framework. It combines image quality features from rendered views with PointPCA3 features from sampled point clouds. This repository is the entry point for the MAPPE experiments and regression-based evaluation.
The Python distribution and import are both named mappe.
Related projects
| Project | Role |
|---|---|
| mesh-projector-pylib | Python interface for rendering views and sampling colored point clouds. |
| mesh-projector-rs | Rust mesh processing, CPU rendering, and GPU rendering backend. |
| pointpca3-pylib | Python interface for PointPCA3 feature extraction. |
| pointpca3-rs | Rust PointPCA3 backend with Voxelization-based Spatial Sampling (VoSS). |
| pointpca2-pylib | Python interface for the alternative PointPCA2-RS backend. |
| pointpca2-rs | Rust PointPCA2 implementation, also used by PointPCA3. |
Requirements
- Python 3.11 or 3.12 and uv.
- Git to clone the repository and network access to download Python packages.
- Mesh datasets, including OBJ files and any associated MTL files and texture images.
The package requires Python >=3.11,<3.13; its mesh-projector dependency uses enum.StrEnum, which requires Python 3.11 or later. A GPU is optional for the default CPU mesh renderer and CPU PyTorch execution. GPU execution requires compatible hardware and drivers.
Installation
Clone MAPPE and install the default environment:
git clone https://github.com/arthurhscarvalho/mappe.git mappe
cd mappe
uv sync --python 3.12
MAPPE installs mesh-projector==1.0.0 and pointpca3==1.0.0 from PyPI. Their published wheels include the Rust extensions, so supported platforms require no Rust toolchain or sibling repository checkouts. pointpca2 is also resolved from PyPI.
For the configured AMD ROCm environment, use:
uv sync --python 3.12 --no-default-groups --extra rocm
This selects the ROCm 6.3 package index configured in pyproject.toml. Use a compatible ROCm installation and GPU. Run subsequent uv run commands with --no-default-groups --extra rocm as well, for example uv run --no-default-groups --extra rocm python scripts/main_experiment.py.
Usage
from math import pi
import mappe
import mesh_projector as mp
light_config = mp.PointLights(
positions=[(-1.0, 1.0, 1.0), (1.0, 1.0, -1.0)],
global_ambient=(0.6, 0.6, 0.6),
global_diffuse=(0.6, 0.6, 0.6),
global_specular=(0.0, 0.0, 0.0),
)
mqa_config = mappe.MQAConfig(
search_size=361,
render_config=mp.RenderConfig(resolution=512, ignore_opacity=True),
iqa_projection_config=mp.ImageProjectionConfig(light_config=light_config),
pcqa_projection_config=mp.PointCloudProjectionConfig(
density_factor=0.3,
light_config=light_config,
),
view_angles=[
(0.0, 0.0, 0.0),
(0.0, pi, 0.0),
(0.0, pi / 2, 0.0),
(0.0, -pi / 2, 0.0),
(pi / 2, 0.0, 0.0),
(-pi / 2, 0.0, 0.0),
],
)
features = mappe.process_mqa(
"reference.obj",
"distorted.obj",
mqa_config=mqa_config,
device="cpu",
max_workers=8,
)
print(features)
Experiments
The scripts/ directory contains dataset experiments, ablation studies, parameter searches, and regression evaluations. Dataset-specific configurations are in scripts/dataset_configs.py, and metadata CSVs are in data/. Configure dataset paths and experiment parameters before running these scripts.
Publications
- Arthur Henrique Silva Carvalho and Pedro Garcia Freitas. “MAPPE: Mesh Assessment via Point Cloud and Projection Estimators.” Signal Processing: Image Communication, vol. 150, article 117722, 2027. DOI: 10.1016/j.image.2026.117722. Available online 5 October 2026.
@article{carvalho2027mappe,
author = {Carvalho, Arthur Henrique Silva and Freitas, Pedro Garcia},
title = {{MAPPE}: Mesh Assessment via Point Cloud and Projection Estimators},
journal = {Signal Processing: Image Communication},
volume = {150},
pages = {117722},
year = {2027},
doi = {10.1016/j.image.2026.117722}
}
License
Metadata
Release files for mappe 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mappe-1.0.0.tar.gz | 6.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mappe-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.1 kB
Release files / mappe-1.0.0.tar.gz
| Download URL | mappe-1.0.0.tar.gz |
|---|---|
| Size | 6.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f664ee1a193da7219ca8d29cf8661440ce0d36f57b6c8482ff32e2a2be663d8
|
|
BLAKE2b-256 checksum How to use checksums |
60cae8e1448e9d311b56016fe2b3e4e599a8d6af8c0b5b485a26a02c1ac49c83
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Release files / mappe-1.0.0-py3-none-any.whl
| Download URL | mappe-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
301b73c764dec6fea91a73a7d6239f19309401f39bd22e457a4f8fa1480a5c61
|
|
BLAKE2b-256 checksum How to use checksums |
2824c7a04ed54d1ec52c54bbfc3216a65cfb9e1ef61531b99fc2a79a5c0a07c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Security for mappe 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.