Blending

The traditional Coons patch approach is to combine the lofted surfaces $ {\cal P}_i$ using Boolean sums in a way which enforces the correct interpolation on all three edges. An alternative approach, which we follow, is to blend the three surfaces using Hermite blending functions. That is, the final height function is computed by blending the three surfaces
$\displaystyle h_b(\alpha , \beta , \gamma )$ $\displaystyle =$ $\displaystyle b_0(\alpha , \beta , \gamma ){\cal P}_0h (\alpha , \beta , \gamma )$  
  $\displaystyle +$ $\displaystyle b_1(\alpha , \beta , \gamma ){\cal P}_1h (\alpha , \beta , \gamma )$  
  $\displaystyle +$ $\displaystyle b_2(\alpha , \beta , \gamma ){\cal P}_2h (\alpha , \beta , \gamma )$ (11)

using appropriate blending functions $ b_i$.

To see what blending functions are required, consider the edge $ {\bf p}_0{\bf p}_1$ where $ \gamma = 0$. The surfaces $ {\cal P}_0h$ and $ {\cal P}_1h$ have the proper behavior on this edge, but $ {\cal P}_2h$ does not. We must therefore have both the blending function $ b_2$, and its derivatives with respect to $ \alpha $ and $ \beta $, be zero for $ \gamma = 0$. Again we are in the realm of Hermite interpolation; we blend based on the function

$\displaystyle f(t) = 3t^2 - 2t^3
$

which has $ f(0) = 0$, $ f(1) = 1$, and $ f'(0) = f'(1) = 0$. Furthermore, $ f$ satisfies the symmetry relation $ f(1 - t) = 1 - f(t)$. Our blending functions are
$\displaystyle b_0(\alpha , \beta , \gamma )$ $\displaystyle =$ $\displaystyle \frac{f(\alpha )}{\sigma(\alpha , \beta , \gamma )}$  
$\displaystyle b_1(\alpha , \beta , \gamma )$ $\displaystyle =$ $\displaystyle \frac{f(\beta )}{\sigma(\alpha , \beta , \gamma )}$  
$\displaystyle b_2(\alpha , \beta , \gamma )$ $\displaystyle =$ $\displaystyle \frac{f(\gamma )}{\sigma(\alpha , \beta , \gamma )}$  

with $ \sigma(\alpha , \beta , \gamma )= f(\alpha ) + f(\beta ) + f(\gamma )$. (This denominator is included so that the blending functions always sum to 1, and remarkably enough, is necessary for the derivative interpolation to remain valid.)

There is a great deal of repetitive computation in the above exposition. In our implementation, we have a single function which, when passed two vertices and corresponding unit normals, returns the height function of the interpolated curve. A similar function returns the surface normal. Another function effects the $ {\cal P}_0h$ surface function by evaluating the boundary curves at $ (\alpha , 1 - \alpha , 0)$ and $ (\alpha , 0,
1-\alpha )$ and applying Hermite interpolation. This function is called three times, each time with the vertices ``cycled'', and the resulting three height values are blended according to the blending function.

The Hermite interpolation was done with respect to the contrived edge surface normal $ N_S$ in this exposition, but that surface normal could be anything, as long as it matches the vertex normals. For example, if one of the edges of the triangle were part of a ``crease'' in a mesh, the edge surface normal could be different than that of the adjacent triangle.

Comments: Brian Smits
2000-06-02