Final Project for CS426
Modelling and Rendering of Metallic Patinas
Douglas Thunen
A much more detailed description of what I did can be found in my final
paper
Introduction
We sought out to simulate natural weathering effects on surfaces, specifically the development of patinas on copper surfaces. As planned, we followed a path similar to the work of Dempsey and Hanrahan [1].
The idea of trying to procedurally model variations in texture is desirable, since, although possible, directly creating realistic looking textures for such effects as weathering and patinas is a rather difficult task.
The approach we used involved modelling effects on a surface through the use of multiple layers and a set of operators that defines the application of these layers.
As with so many other things in computer graphics, this approach is a combination of physical laws and hacks that simplify the situation while still providing images that “look good.” Modeling weather and time effects with multiple layers that are of varying thickness approximates what actually happens in nature—through continued exposure to various natural phenomena such as wetness, chemicals, and sunlight, parts of the original surface are worn away and new materials are also formed, e.g. rust and tarnish. It should also be possible to at least somewhat realistically vary the degree and rate at which these changes occur based on properties in the model such as direction and slope of surface—a horizontal or sloping surface will retain moisture more than a vertical one, hence it should age more quickly; some methods for this are described in [2]. With appropriate material definitions and operators, we should be able to provide a good representation of these effects.
Background
The problem of accurately modeling the natural processes of aging and weathering of metals and other surfaces is of great value:
· It allows for the prediction of how an object might look in the future
· It allows for insight into how an object might have looked in the past
· It allows for the modeling of artificial processes, such as those necessary for creating antique reproductions and even washed out jeans
Methodology
There are four primary components involved in attempting to follow this approach:
1. Developing an encoding for surface layers
2. Defining and implementing the various types of layers, e.g. tarnish, copper oxide, and copper sulfate, that is, the typical greenish patina eventually formed on copper.
3. Defining and implementing the operators on surfaces that will allow for (randomly) applying layers.
4. Implement in the raytracer the ability to render objects incorporating the manipulated layers.
We were able to successfully complete 1,2, and 4, while still getting a start at 3. We implemented the Steady Thickening and Random Deposition growth functions, but were not able to provide operators such as coat, erode, and polish.
Original statement: In order, will do 1, 4, then we hope 2 and 3 as well. So, I guess it went pretty much according to plan.
In completing task 4, we used a modified Kubelka-Munk model that allows for the application of multiple layers. In order for this to work, we will include the necessary properties: thickness, transmittance factor, reflectance, absorption per unit thickness, and backscattering, in our material definition. The absorption per unit thickness, i.e. K, takes the place of the diffuse coefficients in the original .ray file format.
For 3, we provided a couple of different application methods for layers, including Steady Thickening (the simplest), where basically the thickness increases uniformly over time and random deposition, which models particles falling from random positions, increasing the thickness at the point where it lands. We also supplemented RD with surface relaxation that allows a particle to fall down to a local minimum after hitting the surface--this provides for smoother results than a pure RD model.
One area of potential difficulty was creating operators that accurately simulate the natural phenomena that we were attempting to simulate, primarily in terms of modelling changes over time. Indeed, we ran out of time to successfully complete these operations. Also somewhat difficult was computing the interactions between multiple layers of varying thicknesses due to some obvious difficulties--for example, we must correctly determine reflectance and refraction through these irregular layers based on individually computed diffuse and specular coefficients.
Results
We implemented the thickness map as an ordinary 24bit bitmap, using the red channel to represent thickness, green for the surface incline scale factor, and blue for surface exposure scale factor.
Through some web investigation and tweaking, we were able to create some fairly convincing material parameters for copper and patina (the tarnish didn't turn out quite so well...).
We have solid ST and RD growth functions that allow for user specification of the amount of thickness to be added.


On the left is a sphere to which steady thickening has been applied (-ST 100), while on the middle is one to which random deposition has been applied (-RD 0.5 100), and on the right is one where random deposition with relaxation has been applied(-RDr 0.5 100).

(left)A side view of the blue (exposure) channel of a thickness map
(right)The front view of the same model. Notice the darker regions where there is less exposure--these correspond to areas that are more protected and thus where there will be greater patina formation in final renderings.

(left)The side view of the green (incline) channel of a thickness map
(right)The front view for the same model. The faces facing towards the ground are much darker than those of a flatter slope in the same direction of the ground and thus will have less growth on them (if surface parameters are used in the growth models.
Our current system correctly renders a stack of layers using the Kubelka-Munk equations.



From left to right, this is a sphere with no additional surface layers, the same sphere with some amount of tarnish, again, with patina formation beginning, and finally covered with a sufficient amount of patina that it almost completely blocks out the underlying layers. Notice, however, in the intermediate pictures how the layers interact. It can also be seen that tarnish and patina growth occur more rapidly at the north pole of the sphere, i.e. where it is the flattest, with rates decreasing towards the equator, and then decreasing even more towards the south pole (exposure does not play a role here since the sphere is the only object in the model.
A preprocessed thickness map for the Statue of Liberty model. Even in this 200x200 resolution, this thickness map still took over an hour to compute...
Summary
Most importantly, our system allows for the creation of models that include multiple layers, including tarnish and patina, and subsequently the successful rendering of these models. There are, however, some obvious improvements that could be made:
1. We would like to be able to make the process more automatic--currently, the user must first preprocess the .ray file, creating the appropriate thickness maps; then the growth functions must be applied manually; and, finally, the .ray file and the processed thickness maps are fed into the raytracer, which ultimately outputs a final rendered image.
2. For any models of interest, our preprocessing and subsequent raytracing is painfully slow--it took 63 minutes to preprocess a model of the Statue of Liberty that consisted of ~7,500 vertices and 14,000 triangles. Therefore, some form of acceleration, e.g. bounding boxes, octrees, or BSP trees, would be beneficial.
3. Perhaps there is a more suitable format for maintaining thickness map information than by using the r,g, and b channels of a 24bit bitmap (although for our project, this seemed to make the most sense).
4. The calculations for surface inclines and exposure are somewhat arbitrary--they provide the right kind of results, but the actual values we compute for the scale factors might not be the most physically accurate (particularly for inclines). Also the random exposure calculations introduce a fair bit of noise into the thickness maps (although surface relaxation helps reduce a lot of this if it is used in intermediate processing).
For a much more detailed description of what I actually did, please see my
paper.
References:
[1] Dorsey, Julie and Pat Hanrahan. Modeling and Rendering of Metallic Patinas. http://graphics.lcs.mit.edu/~dorsey/papers/patina/
[2] Wong, Tien-Tsin, Wai-Yin Ng and Pheng-Ann Heng. A Geometry Dependent Texture Generation Framework for Simulating Surface Imperfections. In Proceedings of the 8th Eurographics Workshop on Rendering, St. Etienne, France, June 1997, 139-150.