iBRDF
iBRDF copied to clipboard
Code for the paper "Invertible Neural BRDF for Object Inverse Rendering"
iBRDF
This is the code for the paper "Invertible Neural BRDF for Object Inverse Rendering".
Prerequisites
- A C++ 17-compatible compiler
- CUDA 10.2
- CMake
- LibTorch 1.6.0
- OptiX 7.0.0
- TinyEXR (bundled)
Usage
A Dockerfile is provided to help setup the environment. The following commands are assumed to be run inside the Docker container, though it is not a necessity.
Building
Download and extract LibTorch and OptiX into ./third_party/libtorch and ./third_party/optix respectively. Then run the following commands to build the project:
mkdir build
cd build
cmake ..
make
Training iBRDF
Assuming that MERL BRDF binaries are placed inside the ../datasets/merl folder. Run the following command to pre-process them into a format that is suitable for training:
python ./scripts/preprocess_merl.py ../datasets/merl ../datasets/merl_processed
The resulting BRDFs will be placed under ../datasets/merl_processed. After conversion, run the following command to train iBRDF:
Usage: ./build/bin/ibrdf_train [MERL root] [Number of BRDFs per batch] [Number of samples per BRDF] [Number of epochs] [Output]
Example: ./build/bin/ibrdf_train ../datasets/merl_processed 50 10000 10000 ./run/ibrdf
Material Estimation
Usage: ./build/bin/estbrdf [Input] [Geometry] [Illumination] [iBRDF model] [Number of lobes] [Number of optimization steps] [Output]
Example: ./build/bin/estbrdf ./run/render.exr ./data/sphere.pt ./data/uffizi-large.exr ./data/ibrdf.pt 2 200 ./run/brdf.binary
Illumination Estimation
Usage: ./build/bin/estillu [Input] [Geometry] [Material] [Mirror reflection] [Illumination width] [Illumination height] [Output]
Example: ./build/bin/estillu ./run/a.exr ./data/sphere.pt ./data/alum-bronze.binary 0 512 256 2000 ./run/illu.exr
Joint Estimation of Illumination and Material
Usage: ./build/bin/estboth [Input] [Geometry] [iBRDF model] [Number of lobes] [Illumination width] [Illumination height] [Number of optimization steps] [Number of material optimization steps] [Number of illumination optimization steps] [Number of gray world steps] [Output material] [Output illumination]
Example: ./build/bin/estboth ./run/render.exr ./data/sphere.pt ./data/ibrdf.pt 2 256 128 10 100 300 3 ./run/brdf.binary ./run/illu.exr
Rendering
Usage: ./build/bin/render [Geometry] [Material] [Illumination] [Mirror reflection] [Output]
Example: ./build/bin/render ./data/sphere.pt ./data/alum-bronze.binary ./data/uffizi-large.exr 0 ./run/render.exr
Citation
@INPROCEEDINGS {Chen_2020_ECCV,
author = "Chen, Zhe and Nobuhara, Shohei and Nishino, Ko",
title = "Invertible Neural BRDF for Object Inverse Rendering",
booktitle = "Proceedings of the European Conference on Computer Vision (ECCV)",
year = "2020"
}
LICENSE
MIT Liencse