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