## A Bayesian Inference Framework for
Procedural Material Parameter Estimation

# Supplemental Materials

Yu Guo1, Miloš Hašan2, Lingqi Yan3 and Shuang Zhao1
1University of California, Irvine 2Adobe Research 3University of California, Santa Barbara

In this supplemental material, we provide detailed descriptions on the procedural material models used in the paper. Additionally, we show animated results for optimization (i.e., posterior maximization) and posterior sampling (using Markov Chain Monte Carlo).

Procedural Material Models

For all models, `light` gives light intensity, while `iSigma` gives standard deviation of the vignetting falloff in centimeters. We use truncated Gaussians for all prior distributions.

- Bumpy surface: The diffuse color is given by `albedo` (an RGB triple), `rough` is the roughness, `fsigma` and `fscale` define the Fourier-domain Gaussian power spectrum.
- Leather: Here `albedo` and `rough` are the same as in the bumpy surface, `rough_var` gives the roughness variation (increase) in the grooves, `height` gives vertical height-field scaling, `power` controls cell edge smoothing, `scale` controls the spatial scaling and `shift` the 2D offset of the Voronoi cell map.
- Plaster: Here `slope` defines the vertical scaling of the fractal noise pattern before thresholding; other parameters are like in the leather example.
- Metallic flake: Here `topF0` and `flakeF0` define the Fresnel reflectance at normal incidence of the top coating and the embedded flakes (the latter is an RGB quantity), while `flakeRough` gives flake roughness and `flakeNDF` the width of the normal distribution from which flake normals are chosen. Other parameters are like in above models.
- Brushed metal: Here `f0` is the Fresnel reflectance, `roughx` and `roughy` are the roughness values in x/y direction, `fsigmax` and `fsigmay` give the standard deviations of the Fourier-domain Gaussian spectrum, while `fscale` gives its scaling.
- Wood: Here albedo gives the earlywood color, `ring_size` the size of a growth ring in centimeters, `lw_power` the power applied to earlywood color to get the (usually more absorptive) latewood color. The parameters `lw_fraction`, `lw_ramp_width` and `ew_ramp_width` control the relative size of the latewood as a fraction of the growth ring, as well as the smoothness of the latewood/earlywood transitions. The small scale noise scale and strength are controlled by `ssn_scale` and `ssn_power`, respectively. Growth rate noise scale and strength are controlled by `grn_scale` and `grn_amplitude`, respectively. Global distortion noise scale and strength are controlled by `gdn_scale` and `gdn_amplitude`, respectively. Finally, `ew_rough` and `lw_height` control the relative roughness and height of of earlywood vs. latewood, and `cut_angle` and `center` control the cutting plane with respect to original tree axis.

Clicking the images below to control the optimization/sampling animations:
left click the images below to start/pause; right click to reset the animations.
Results
Synthetic Input

We use the neural-network-based summary function for all results in this section.

#### Bumpy surface

- Prior
- Optimization
- MCMC sampling

#### Leather

- Prior
- Optimization
- MCMC sampling

#### Plaster

- Prior
- Optimization
- MCMC sampling

#### Metallic flake

- Prior
- Optimization
- MCMC sampling

#### Brushed metal

- Prior
- Optimization
- MCMC sampling

#### Wood

- Prior
- Optimization
- MCMC sampling

Real Input

We use the neural-network-based summary function for all results in this section except for Metallic flake (Bins of radial bands) and Brushed metal (Bins of vertical bands + 1D FFT).

#### Bumpy surface

- Prior
- Optimization
- MCMC sampling

#### Leather

- Prior
- Optimization
- MCMC sampling

#### Plaster

- Prior
- Optimization
- MCMC sampling

#### Metallic flake

- Prior
- Optimization
- MCMC sampling

#### Brushed metal

- Prior
- Optimization
- MCMC sampling

#### Wood

- Prior
- Optimization
- MCMC sampling

Demo code

We provide demo code (`code/run_me_*.py`) to generate different materials.

- Bumpy surface: `code/run_me_bump.py`
- Leather: `code/run_me_leather.py`
- Plaster: `code/run_me_plaster.py`
- Metallic flake: `code/run_me_flake.py`
- Brushed metal: `code/run_me_metal.py`
- Wood: `code/run_me_wood.py`