Scratch Iridescence: Wave-Optical Rendering of Diffractive Surface Structure
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.
Video
Text citation
Sebastian Werner, Zdravko Velinov, Wenzel Jakob, and Matthias Hullin. 2017. Scratch Iridescence: Wave-Optical Rendering of Diffractive Surface Structure. In Transactions on Graphics (Proceedings of SIGGRAPH Asia) 36(6).
BibTeX
@article{Werner2017Scratch, author = {Sebastian Werner and Zdravko Velinov and Wenzel Jakob and Matthias Hullin}, title = {Scratch Iridescence: Wave-Optical Rendering of Diffractive Surface Structure}, journal = {Transactions on Graphics (Proceedings of SIGGRAPH Asia)}, volume = {36}, number = {6}, year = {2017}, month = nov, doi = {10.1145/3130800.3130840} }