Meshroom plugin for SDM-UniPS (CVPR2023) -- universal photometric stereo for surface normal and BRDF estimation.
Prerequisite: a working Meshroom installation (2025+).
cd /path/to/your/plugins
git clone https://github.com/meshroomHub/mrSDMUniPS.git
cd mrSDMUniPSMeshroom looks for a folder named venv at the plugin root.
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install torch torchvision
pip install -r requirements.txt
deactivateThis installs SDM-UniPS and all its dependencies automatically via pip.
bash download_weights.shThis downloads the pretrained checkpoints (~480 MB) from Dropbox into checkpoint/:
checkpoint/
├── normal/
│ └── nml.pytmodel
└── brdf/
└── brdf.pytmodel
The plugin auto-detects this directory. No config.json needed.
export MESHROOM_PLUGINS_PATH=/path/to/your/plugins/mrSDMUniPS:$MESHROOM_PLUGINS_PATHLaunch Meshroom: the SDMUniPS node appears under Photometric Stereo.
- SfMData JSON with multi-lighting views grouped by poseId (multiple images per pose, each under different lighting)
- Mask folder (optional) with mask PNGs named by poseId (e.g.
12345.png)
- Normal maps -- surface normals per pose (
<poseId>_normals.png) - Albedo maps -- base color per pose (
<poseId>_albedo.png) - Roughness maps -- surface roughness per pose (
<poseId>_roughness.png) - Metallic maps -- metallic parameter per pose (
<poseId>_metallic.png) - Output SfMData files --
normalMaps.sfm,albedoMaps.sfm,roughnessMaps.sfm,metallicMaps.sfm
If you prefer to work from a local SDM-UniPS clone instead of pip install:
- Clone the repo:
git clone -b meshroom https://github.com/meshroomHubWarehouse/SDM-UniPS-CVPR2023.git - Edit
meshroom/config.json:[ {"key": "SDM_UNIPS_PATH", "type": "path", "value": "/path/to/SDM-UniPS-CVPR2023"}, {"key": "SDM_UNIPS_CHECKPOINT_PATH", "type": "path", "value": "/path/to/SDM-UniPS-CVPR2023/checkpoint"} ]
The node tries pip imports first, then falls back to the config path.
Ikehata, S. "Scalable, Detailed and Mask-free Universal Photometric Stereo." CVPR 2023.