A photograph of wing mirror (left) with pronounced glint from metallic flakes that served as an inspiration for our wing mirror scene (middle). The metallic flakes are modelled with a 2K normal map with flakes sampled from a GTR distribution (GTR gamma = 1.5, GTR alpha = 0.002)[Burley12, Dimov15]. Additionally, the roughness of the flakes is modelled with a Beckmann distribution with Beckmann alpha = 0.005. The flake roughness contributes to the overall appearance, and is a useful parameter for artistic control. To the right we provide three regions from the same scene rendered with different Beckmann flake roughness (0.0025, 0.01, 0.04). Small perturbations of the roughness of the flakes completely change the behaviour of the glints. The rendering of such nearly specular surfaces requires some form of filtering, the effect of which is shown in our accompanying video. All the renderings in this figure were done with our proposed normal map filtering algorithm.

A Multiscale Microfacet Model Based on Inverse Bin Mapping

Abstract

Accurately controllable shading detail is a crucial aspect of realistic appearance modelling. Two fundamental building blocks for this are microfacet BRDFs, which describe the statistical behaviour of infinitely small facets, and normal maps, which provide user-controllable spatio-directional surface features. We analyse the filtering of the combined effect of a microfacet BRDF and a normal map. By partitioning the half-vector domain into bins we show that the filtering problem can be reduced to evaluation of an integral histogram (IH), a generalization of a summed-area table (SAT). Integral histograms are known for their large memory requirements, which are usually proportional to the number of bins. To alleviate this, we introduce Inverse Bin Maps, a specialised form of IH with a memory footprint that is practically independent of the number of bins. Based on these, we present a memory-efficient, production-ready approach for filtering of high resolution normal maps with arbitrary Beckmann flake roughness. In the corner case of specular normal maps (zero, or very small roughness values) our method shows similar convergence rates to the current state of the art, and is also more memory efficient.

BibTex Citation

				
					@article{https://doi.org/10.1111/cgf.142618,
author = {Atanasov, Asen and Wilkie, Alexander and Koylazov, Vladimir and Křivánek, Jaroslav},
title = {A Multiscale Microfacet Model Based on Inverse Bin Mapping},
journal = {Computer Graphics Forum},
volume = {40},
number = {2},
pages = {103-113},
keywords = {CCS Concepts, • Computing methodologies → Rendering, Reflectance modeling},
doi = {https://doi.org/10.1111/cgf.142618},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1111/cgf.142618},
eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1111/cgf.142618},
abstract = {Abstract Accurately controllable shading detail is a crucial aspect of realistic appearance modelling. Two fundamental building blocks for this are microfacet BRDFs, which describe the statistical behaviour of infinitely small facets, and normal maps, which provide user-controllable spatio-directional surface features. We analyse the filtering of the combined effect of a microfacet BRDF and a normal map. By partitioning the half-vector domain into bins we show that the filtering problem can be reduced to evaluation of an integral histogram (IH), a generalization of a summed-area table (SAT). Integral histograms are known for their large memory requirements, which are usually proportional to the number of bins. To alleviate this, we introduce Inverse Bin Maps, a specialised form of IH with a memory footprint that is practically independent of the number of bins. Based on these, we present a memory-efficient, production-ready approach for filtering of high resolution normal maps with arbitrary Beckmann flake roughness. In the corner case of specular normal maps (zero, or very small roughness values) our method shows similar convergence rates to the current state of the art, and is also more memory efficient.},
year = {2021}
}