Scratch Iridescence: Wave-Optical Rendering of Diffractive Surface Structure

Sebastian Werner*, Zdravko Velinov*, Wenzel Jakob, Matthias B. Hullin (* joint first authors)
ACM Transactions on Graphics 36(6) (Proc. SIGGRAPH Asia), 207:1--207:14, 2017.

Abstract

The surface of metal, glass and plastic objects is often characterized by microscopic scratches caused by manufacturing and/or wear. A closer look onto such scratches reveals iridescent colors with a complex dependency on viewing and lighting conditions. The physics behind this phenomenon is well understood; it is caused by diffraction of the incident light by surface features on the order of the optical wavelength. Existing analytic models are able to reproduce spatially unresolved microstructure such as the iridescent appearance of compact disks and similar materials. Spatially resolved scratches, on the other hand, have proven elusive due to the highly complex wave-optical light transport simulations needed to account for their appearance. In this paper, we propose a wave-optical shading model based on non-paraxial scalar diffraction theory to render this class of effects. Our model expresses surface roughness as a collection of line segments. To shade a point on the surface, the individual diffraction patterns for contributing scratch segments are computed analytically and superimposed coherently. This provides natural transitions from localized glint-like iridescence to smooth BRDFs representing the superposition of many reflections at large viewing distances. We demonstrate that our model is capable of recreating the overall appearance as well as characteristic detail effects observed on real-world examples.

Files

BibTeX Citation

@misc{WernerEtAlScratchIridescenceSIGAsia2017, author = {Sebastian Werner and Zdravko Velinov and Wenzel Jakob and Matthias B. Hullin}, title = {Scratch iridescence: Wave-optical rendering of diffractive surface structure}, journal = {ACM Trans. Graph. (Proc. SIGGRAPH Asia)}, volume = {36}, number = {6}, year = {2017}, pages = {207:1--207:14}, }