Hong Li*, Houyuan Chen*, Chongjie Ye
Zhaoxi Chen, Bohan Li, Shaocong Xu,Xianda Guo
Xuhui Liu, Yikai Wang, Baochang Zhang, Satoshi Ikehata, Boxin Shi, Anyi Rao, Hao Zhao
* Equal contribution
LINO-UniPS is a method for Univeral Photometric Stereo (PS). It predicts the normal map from a given set of images. Key features include:
- Light-Agnostic: Does not require specific lighting parameters as input.
- Arbitrary-Resolution: Supports inputs of any resolution.
- Mask-Free: Also supports mask-free scene normal reconstruction.
- November 2025 - Update the code for PBR material estimation.
- August 2025 - Update the eval code for a new benchmark -- DIR. We're still SOTA!!!
- August 2025 - Release training code.
- June 2025 - Release paper, project page, Hugging Face demo and model checkpoint.
-
Release checkpoint and inference code. - Release
PS-Verse, the training dataset. -
Release training code. -
Adding support for PBR material estimation.
git clone https://github.com/houyuanchen111/lino.git
cd lino
conda create -n LINO python=3.10
conda activate LINO
pip install -r requirements.txtDownload the following benchmarks for evaluate our LiNO-UniPS.
- DiLiGenT: A widely-used benchmark for photometric stereo, consisting of 10 real-world objects with diverse shapes and materials under precisely calibrated directional lighting.
- LUCES: A challenging benchmark focused on complex material properties, captured under thousands of high-frequency lighting conditions from a screen-based setup.
- DiLiGent102: The large-scale successor to DiLiGenT, featuring 100 real-world objects with more complex geometries and materials to better evaluate state-of-the-art methods.
- DIR: DIR is a dataset for Display Inverse Rendering (DIR). It contains assets captured from LCD & polarization-camera system, which is the latest benchmark for the Photometric Stereo
After downloading, place them under
data/as the folloing directory tree.
|-- data
DiLiGenT
βββ ballPNG
βββ ...
LUCES
βββ BALL
βββ ...
DiLiGenT_100
βββ BALL_ABS
βββ ...
DIR_pms
βββ 01_ElephantPNG
βββ ...To evaluate the performance of LiNO-UniPS on the DiLiGenT, LUCES, and DiLiGenT10Β² benchmarks, run the corresponding scripts below. The pretrained model weights will be downloaded automatically on the first run of eval.py.
# DiLiGenT
python eval.py --task_name DiLiGenT --data_root data/DiLiGenT/ --num_images 16
# LUCES
python eval.py --task_name LUCES --data_root data/LUCES/ --num_images 16
# DiLIGenT10Β²
python eval.py --task_name DiLiGenT_100 --data_root data/DiLiGenT_100/ --num_images 16
# DIR
python eval.py --task_name DIR --data_root data/DIR_pms/ --num_images 64The evaluation results will be stored in the output directory.
Note for DiLiGenT10Β²: The ground truth normals for this benchmark are withheld for official evaluation. To get your score, you must submit the predicted results, which are saved in .mat format inside the submit directory, to the official evaluation server.
The performance of our released model exceeds the results originally reported in our paper. For this comparison, the results for all competing Universal PS methods (UniPS, SDM-UniPS, Uni MS-PS) are the best scores as reported by the Uni MS-PS.
|
|
|
LINO-UniPS also demonstrates robust performance on multi-light images captured in-the-wild. In the data/Real_data/ directory, we provide two real-world scenes captured using a unique two-iPhone setup, where one device was used for recording and the other as a movable light source.
For more real-world data captured by camera, you can download from UniPS, SDM-UniPS.
After downloading, please place the extracted folders under the data/Real_data/ directory to match the following structure:
|-- data
|-- Real_data
A
βββ mask.png (optional)
βββ [Prefix (default: "L")] imgfile1
βββ [Prefix (default: "L")] imgfile2
βββ ...
B
βββ mask.png (optional)
βββ [Prefix (default: "L")] imgfile1
βββ [Prefix (default: "L")] imgfile2
βββ ...Then, run the following scripts:
# Real_data. If the value provided for --num_images exceeds the total number of available images, the maximum available number will be used instead.
python eval.py --task_name Real --data_root data/Real_data/ --num_images 12 OLAT results correspond to issue #2. The data is sourced from the OpenIllumination, with a resolution of 3000x4096.
| Captured by iPhone | Captured by Camera (provided by UniPS, SDM-UniPS) | OLAT (OpenIllumination) | |||
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
This gradio demo is a GUI interface that requires no expert knowledge, suitable for general users. To run the demo, first download the required data from this link. Then, unzip the archive and place its contents into the demo/ directory.
Simply run:
python app.pyYou can also use it online. Click here.
Here, we provide a simple way to capture multi-light images.
What you need to prepare is:
- Camera: A smartphone camera is perfectly sufficient, though a dedicated digital camera will also work.
- Tripod: To hold your phone or camera steady and motionless.
- Light: Smartphone's flashlight is enough, others can also be used.
- Subject: The object or scene you want to 'Photometric Stereo'.
Keep the camera and the subject stationary. Capture multiple images by moving the light source to a different position for each shot. For best results, we recommend capturing 4 or more images.
Organize your captured images into a new folder and place it inside the data/Real_data/ directory. The images should be saved in .jpg or .png format.
For example:
|-- data
|-- Real_data
Your_Object_Name
βββ mask.png (optional)
βββ L_1.jpg
βββ L_2.jpg
βββ ...mask.png is optional. If needed, it can be generated using RMBG-2.0.
This is for issue #3. The high-quality normals predicted by LINO-UniPS can be utilized as normal bridge for Hi3DGen to generate a high-quality mesh. Compared to vanilla Hi3DGen, the superior quality of the LINO-UniPS normals results in a generated mesh with substantially higher fidelity and richer details. For more results, please refer to the Home page and try it out at Live Demo.
If you find this repository useful, please consider giving a star β and citation.
@article{li2025lightnormalsunifiedfeature,
title={Light of Normals: Unified Feature Representation for Universal Photometric Stereo},
author={Hong Li and Houyuan Chen and Chongjie Ye and Zhaoxi Chen and Bohan Li and Shaocong Xu and Xianda Guo and Xuhui Liu and Yikai Wang and Baochang Zhang and Satoshi Ikehata and Boxin Shi and Anyi Rao and Hao Zhao},
journal={arXiv preprint arXiv:2506.18882},
year={2025}
}



















