To watermark a model, we induce some broad changes on the geometry. These changes correspond to perceptually important features that are already present in the model. We amplify or diminish these features by small random amounts.

To identify the important features of the model, we use a multiresolution approach:
we first convert the mesh to the Progressive Mesh format. This representation keeps a base mesh and a sequence of vertex splits operations (each operation takes a vertex in the mesh and replaces it with an edge connecting its old location and a new vertex). Every prefix of the sequence does its best to approximate the geometry of the original model. Operations that induce large geometric changes correspond to important features of the original model. We select a few "important" vertex splits. We change the geometry of the model in the neighborhood of the vertex inserted by each of these vertex splits: first, we trace this neighborhood through the refinement operations to the highest detail mesh.


Next, we perturb each vertex, in a direction normal to the surface, by an amount computed as a function of the distance to the center of the region (more exactly, to the vertex introduced by the selected vertex split).

 We have experimented with several functions, of varying complexity and smoothness:
 

Hat
Derby
Sombrero
1 - r 2r3 - 3r2 + 1 -21r5 + 45r4 - 25r3 + 1