3D-PAQA Evaluator (PointTransformerV3)
A lightweight preference-aligned 3D quality assessment model. Given a textured 3D mesh, it predicts six perceptual quality scores aligned with human preference:
geometry, texture, material, plausibility, artifact, preference
Each score is on roughly a 1β5 scale (higher = better). The model is trained on the 3D-PAQA dataset and predicts perceptual quality directly from point-cloud features, without rendering or MLLM inference at test time.
- Backbone: PointTransformerV3 (
cls_mode, global-pooled regression head) - Parameters: ~38.9M
- Input: surface point cloud sampled from a mesh, 11 per-point features
[xyz(3), rgb(3), normal(3), metallic(1), roughness(1)], voxelized atgrid_size=0.02 - Output: 6 scalar scores (order above)
- Training data: JiHyuk-Byun/3D-PAQA β 216,540 preference-aligned Objaverse assets (24,096-asset held-out test split)
- Selection metric: best validation mean SROCC = 0.7357 (epoch 47), across the 6 criteria
- Training code: github.com/JiHyuk-Byun/3D-PAQA
(this checkpoint pairs with tag
v1.0)
What the labels are (and what "human-aligned" means here)
The training targets are not raw human ratings. They are preference-aligned annotations produced by an MLLM (Qwen2-VL-72B) using an exemplar-anchored relative- ranking scheme, where human preference is injected via 100 human-labeled anchor objects (see the dataset card for the full procedure). Alignment with people is measured against a held-out human user study (~12k human responses on an Objaverse subset). On that human benchmark the evaluator correlates strongly across all six criteria and exceeds its teacher MLLM on every criterion β i.e. the large but noisy MLLM supervision distills into a smaller, more stable predictor.
Files
| file | description |
|---|---|
model.safetensors |
bare PointTransformerV3 weights (fp32) |
config.json |
architecture hyper-parameters + metadata |
inference_example.py |
end-to-end glb β 6 scores example |
Usage
The model code (PointTransformerV3 + the 6-head regressor) lives in the training repo JiHyuk-Byun/3D-PAQA. Clone it and load these weights:
git clone --branch v1.0 https://github.com/JiHyuk-Byun/3D-PAQA # tag matching this checkpoint
# environment: torch 2.1 + cu118, spconv, flash-attn, torch-scatter/sparse/cluster
# (see 3D-PAQA/requirements.txt and the PointTransformerV3 environment notes)
pip install huggingface_hub safetensors trimesh
import json, torch, numpy as np
from safetensors.torch import load_file
from huggingface_hub import hf_hub_download
# 1. build the architecture (from the 3D-PAQA training repo)
from qt.models import PointTransformerV3
cfg = json.load(open(hf_hub_download("JiHyuk-Byun/3D-PAQA-evaluator", "config.json")))
model = PointTransformerV3(**cfg["model_args"]).cuda().eval()
# 2. load weights
sd = load_file(hf_hub_download("JiHyuk-Byun/3D-PAQA-evaluator", "model.safetensors"))
model.load_state_dict(sd, strict=True)
# 3. sample a mesh into the 11-ch point cloud (see inference_example.py / mesh2pc.py),
# build the batch with the ObjaverseDataset collate (grid_size=0.02), forward.
# scores = model(batch) # -> [1, 6] in the criteria order above
See inference_example.py for the full pipeline (mesh β point-cloud features β
voxelize β forward β 6 scores), including the exact preprocessing contract the model
was trained on.
Preprocessing contract (must match training)
Scores drift if preprocessing differs. Sample surface points and attach, per point:
coord (xyz), color (base-color RGB in [0,1], 255/white if untextured), normal,
metallic, roughness (1.0 if no material). Voxelize with grid_size=0.02, FNV hash.
The reference sampler is mesh2pc.py in the
dataset repo.
Intended use & limits
- Validated use: human-aligned perceptual quality assessment / ranking of human-created (Objaverse-style) 3D assets across the six criteria. The decomposed, criterion-wise scores give interpretable feedback (which of geometry / texture / material / etc. is weak).
- Demonstrated (single case): as an efficient reward/verifier in an agentic loop that steers an LLM agent to iteratively refine a generated asset's weakest criterion.
- Not validated (potential extensions): use as a general generative-model evaluator or dataset curator for AI-generated / text-to-3D content. The training labels cover human-created assets; generated meshes are out-of-distribution and this use case would require additional validation.
- Scores on out-of-distribution meshes (very high-poly scans, non-object scenes, generated content) are less reliable. On generated meshes, weight iteration-to-iteration deltas rather than absolute values, and treat the model as a relative quality signal (absolute-value anchors are approximate).
License & attribution
- Weights & code in this repo: CC-BY-4.0 (this work).
- The backbone architecture is PointTransformerV3 (Pointcept, Apache-2.0).
- Trained on labels over Objaverse assets; the underlying 3D assets remain under their original per-asset Objaverse licenses (not redistributed here).
Citation
@misc{byun2026_3dpaqa,
title = {3D-PAQA: Towards Preference-Aligned 3D Quality Assessment},
author = {Byun, JiHyuk},
year = {2026},
note = {https://huggingface.co/JiHyuk-Byun/3D-PAQA-evaluator}
}
- Downloads last month
- 167