PrincetonComputer SciencePIXL GroupPublications → [Matusik et al. 2009] Local Access
Printing Spatially-Varying Reflectance

ACM Trans. Graphics (Proc. SIGGRAPH Asia), December 2009

Wojciech Matusik, Boris Ajdin, Jinwei Gu,
Jason Lawrence, Hendrik P.A. Lensch,
Fabio Pellacini, Szymon Rusinkiewicz
Our system represents a target document as a spatially-varying Bidirectional Reflectance Distribution Function (svBRDF). We have developed BRDF gamut-mapping and halftoning algorithms that approximate this svBRDF with a set of printer inks. Here we show a printed ramp between “silver foil” and “metallic silver” inks, set up to reflect a checkerboard target. The perceived specularity of the surface varies smoothly from left to right.

Although real-world surfaces can exhibit significant variation in materials — glossy, diffuse, metallic, etc. — printers are usually used to reproduce color or gray-scale images. We propose a complete system that uses appropriate inks and foils to print documents with a variety of material properties. Given a set of inks with known Bidirectional Reflectance Distribution Functions (BRDFs), our system automatically finds the optimal linear combinations to approximate the BRDFs of the target documents. Novel gamut-mapping algorithms preserve the relative glossiness between different BRDFs, and halftoning is used to produce patterns to be sent to the printer. We demonstrate the effectiveness of this approach with printed samples of a number of measured spatially-varying BRDFs.

Wojciech Matusik, Boris Ajdin, Jinwei Gu, Jason Lawrence, Hendrik P.A. Lensch, Fabio Pellacini, and Szymon Rusinkiewicz.
"Printing Spatially-Varying Reflectance."
ACM Trans. Graphics (Proc. SIGGRAPH Asia) 28(5), December 2009.


   author = "Wojciech Matusik and Boris Ajdin and Jinwei Gu and Jason Lawrence and
      Hendrik P.A. Lensch and Fabio Pellacini and Szymon Rusinkiewicz",
   title = "Printing Spatially-Varying Reflectance",
   journal = "ACM Trans. Graphics (Proc. SIGGRAPH Asia)",
   year = "2009",
   month = dec,
   volume = "28",
   number = "5"